From 2d4b57a8bfe16533585efb55aa5cd2d9520d0762 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Fri, 10 Sep 2021 21:20:10 +0300 Subject: [PATCH] DS-1170: Jupyter in community. Extract jupyter language to ``intellij.jupyter.core``. It now has ``jupyter-core.xml`` with language only and ``jupyter-core-view-only.xml`` to be included in community versions. It also provides framework to show jupyter using web applications GitOrigin-RevId: fa80df820adab872768dc28ce567c7a86a2b552d --- .idea/modules.xml | 2 + jupyter/intellij.jupyter.core.iml | 20 + jupyter/resources/META-INF/jupyter-core.xml | 10 + .../messages/JupyterPsiBundle.properties | 1 + .../core/api/lang/NotebookLanguage.kt | 9 + .../notebooks/jupyter/JupyterFileType.kt | 18 + .../notebooks/jupyter/JupyterLanguage.kt | 7 + .../notebooks/jupyter/JupyterPsiBundle.kt | 16 + .../jupyter/preview/JupyterCefHttpHandler.kt | 105 + .../jupyter/preview/JupyterHttpUtils.kt | 14 + .../viewOnly/intellij.jupyter.viewOnly.iml | 22 + .../resources/META-INF/jupyter-view-only.xml | 9 + .../JetBrainsMono-Bold-Italic.woff2 | Bin 0 -> 55716 bytes .../JetBrainsMono/JetBrainsMono-Bold.woff2 | Bin 0 -> 52096 bytes .../JetBrainsMono-ExtraBold-Italic.woff2 | Bin 0 -> 55232 bytes .../JetBrainsMono-ExtraBold.woff2 | Bin 0 -> 51680 bytes .../JetBrainsMono-ExtraLight-Italic.woff2 | Bin 0 -> 53168 bytes .../JetBrainsMono-ExtraLight.woff2 | Bin 0 -> 49660 bytes .../JetBrainsMono/JetBrainsMono-Italic.woff2 | Bin 0 -> 54448 bytes .../JetBrainsMono-Light-Italic.woff2 | Bin 0 -> 54248 bytes .../JetBrainsMono/JetBrainsMono-Light.woff2 | Bin 0 -> 51288 bytes .../JetBrainsMono-Medium-Italic.woff2 | Bin 0 -> 56040 bytes .../JetBrainsMono/JetBrainsMono-Medium.woff2 | Bin 0 -> 52100 bytes .../JetBrainsMono/JetBrainsMono-Regular.woff2 | Bin 0 -> 50800 bytes .../JetBrainsMono-SemiLight-Italic.woff2 | Bin 0 -> 55180 bytes .../JetBrainsMono-SemiLight.woff2 | Bin 0 -> 52168 bytes .../assets/fonts/codicon.ttf | Bin 0 -> 56484 bytes .../resources/jupyter-view-only/datalore.svg | 32 + .../resources/jupyter-view-only/dataspell.svg | 208 + .../resources/jupyter-view-only/editor.min.js | 1 + .../jupyter-view-only/externalLink.svg | 3 + .../resources/jupyter-view-only/index.html | 46 + .../jupyter-view-only/ipywidgets.css | 19 + .../jupyter-view-only/ipywidgets.html | 20 + .../resources/jupyter-view-only/ipywidgets.js | 62282 ++++++++++++++++ .../jupyter-view-only/notebookViewer.css | 4999 ++ .../notebookViewer.deps.min.js | 1 + .../notebookViewer.tvm.min.js | 5609 ++ .../jupyter-view-only/pages.icons.js | 12 + .../viewOnly/JupyterViewOnlyFileEditor.kt | 96 + .../viewOnly/JupyterViewOnlyHandler.kt | 11 + .../viewOnly/JupyterViewOnlyProvider.kt | 21 + .../PythonCommunityPluginModules.groovy | 1 + .../pycharm/PyCharmCommunityProperties.groovy | 2 + python/ide/resources/META-INF/plugin.xml | 3 +- ...tellij.pycharm.community.customization.iml | 1 + python/intellij.pycharm.community.iml | 1 + ...tellij.python.community.plugin.modules.iml | 2 +- 48 files changed, 73601 insertions(+), 2 deletions(-) create mode 100644 jupyter/intellij.jupyter.core.iml create mode 100644 jupyter/resources/META-INF/jupyter-core.xml create mode 100644 jupyter/resources/messages/JupyterPsiBundle.properties create mode 100644 jupyter/src/org/jetbrains/plugins/notebooks/core/api/lang/NotebookLanguage.kt create mode 100644 jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterFileType.kt create mode 100644 jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterLanguage.kt create mode 100644 jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterPsiBundle.kt create mode 100644 jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterCefHttpHandler.kt create mode 100644 jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterHttpUtils.kt create mode 100644 jupyter/viewOnly/intellij.jupyter.viewOnly.iml create mode 100644 jupyter/viewOnly/resources/META-INF/jupyter-view-only.xml create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Bold-Italic.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraBold-Italic.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraBold.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraLight-Italic.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraLight.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Italic.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Light-Italic.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Light.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Medium-Italic.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-SemiLight-Italic.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-SemiLight.woff2 create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/codicon.ttf create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/datalore.svg create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/dataspell.svg create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/editor.min.js create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/externalLink.svg create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/index.html create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.css create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.html create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.js create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/notebookViewer.css create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/notebookViewer.deps.min.js create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/notebookViewer.tvm.min.js create mode 100644 jupyter/viewOnly/resources/jupyter-view-only/pages.icons.js create mode 100644 jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyFileEditor.kt create mode 100644 jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyHandler.kt create mode 100644 jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyProvider.kt diff --git a/.idea/modules.xml b/.idea/modules.xml index b605def1d14d..9439c2466ba8 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -637,6 +637,8 @@ + + diff --git a/jupyter/intellij.jupyter.core.iml b/jupyter/intellij.jupyter.core.iml new file mode 100644 index 000000000000..ad5c06c270dd --- /dev/null +++ b/jupyter/intellij.jupyter.core.iml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jupyter/resources/META-INF/jupyter-core.xml b/jupyter/resources/META-INF/jupyter-core.xml new file mode 100644 index 000000000000..507145b1687c --- /dev/null +++ b/jupyter/resources/META-INF/jupyter-core.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/jupyter/resources/messages/JupyterPsiBundle.properties b/jupyter/resources/messages/JupyterPsiBundle.properties new file mode 100644 index 000000000000..1fbbe40dc031 --- /dev/null +++ b/jupyter/resources/messages/JupyterPsiBundle.properties @@ -0,0 +1 @@ +filetype.jupyter.description=Jupyter Notebook \ No newline at end of file diff --git a/jupyter/src/org/jetbrains/plugins/notebooks/core/api/lang/NotebookLanguage.kt b/jupyter/src/org/jetbrains/plugins/notebooks/core/api/lang/NotebookLanguage.kt new file mode 100644 index 000000000000..f7e2ba48246c --- /dev/null +++ b/jupyter/src/org/jetbrains/plugins/notebooks/core/api/lang/NotebookLanguage.kt @@ -0,0 +1,9 @@ +package org.jetbrains.plugins.notebooks.core.api.lang + +import com.intellij.lang.Language + +/** + * General language for notebooks. + * To share some of the common features for the notebooks, their language should use [NotebookLanguage] as base one. + */ +object NotebookLanguage: Language("Notebook") diff --git a/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterFileType.kt b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterFileType.kt new file mode 100644 index 000000000000..f03b6b76b81a --- /dev/null +++ b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterFileType.kt @@ -0,0 +1,18 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter + +import com.intellij.openapi.fileTypes.LanguageFileType +import com.intellij.openapi.vfs.CharsetToolkit +import com.intellij.openapi.vfs.VirtualFile +import icons.PythonPsiApiIcons +import org.jetbrains.annotations.NonNls +import javax.swing.Icon + +object JupyterFileType : LanguageFileType(JupyterLanguage) { + @NonNls + override fun getName() = "Jupyter" + override fun getDescription() = JupyterPsiBundle.message("filetype.jupyter.description") + override fun getDefaultExtension() = "ipynb" + override fun getIcon(): Icon = PythonPsiApiIcons.IPythonNotebook + override fun getCharset(file: VirtualFile, content: ByteArray): String = CharsetToolkit.UTF8 +} \ No newline at end of file diff --git a/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterLanguage.kt b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterLanguage.kt new file mode 100644 index 000000000000..7af94a33364b --- /dev/null +++ b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterLanguage.kt @@ -0,0 +1,7 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter + +import com.intellij.lang.Language +import org.jetbrains.plugins.notebooks.core.api.lang.NotebookLanguage + +object JupyterLanguage : Language(NotebookLanguage, "Jupyter") diff --git a/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterPsiBundle.kt b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterPsiBundle.kt new file mode 100644 index 000000000000..ec134dd69f44 --- /dev/null +++ b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/JupyterPsiBundle.kt @@ -0,0 +1,16 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter + +import com.intellij.DynamicBundle +import org.jetbrains.annotations.Nls +import org.jetbrains.annotations.NonNls +import org.jetbrains.annotations.PropertyKey + +@NonNls +private const val BUNDLE = "messages.JupyterPsiBundle" + +object JupyterPsiBundle : DynamicBundle(BUNDLE) { + @JvmStatic + @Nls + fun message(@PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any): String = getMessage(key, *params) +} diff --git a/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterCefHttpHandler.kt b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterCefHttpHandler.kt new file mode 100644 index 000000000000..53841b9f58b3 --- /dev/null +++ b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterCefHttpHandler.kt @@ -0,0 +1,105 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter.preview + + +import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.util.io.FileUtilRt +import com.intellij.util.PathUtil +import io.netty.channel.Channel +import io.netty.channel.ChannelHandlerContext +import io.netty.handler.codec.http.EmptyHttpHeaders +import io.netty.handler.codec.http.FullHttpRequest +import io.netty.handler.codec.http.QueryStringDecoder +import org.apache.http.client.utils.URIBuilder +import org.jetbrains.ide.HttpRequestHandler +import java.io.File +import java.net.URI +import java.net.URL + + +/** + * "Web server" to serve Jupyter HTML + */ +abstract class JupyterCefHttpHandlerBase(private val absolutePathFiles: Collection = emptyList()) : HttpRequestHandler() { + + companion object { + private val allowedTypes = setOf("css", "js", "html", "svg", "woff2", "ttf") + private const val JUPYTER_HTTP_URI = "jupyter" + private const val prefix = "/$JUPYTER_HTTP_URI" + + /** + * Jupyter HTTP files can be accessed with this url + */ + fun getJupyterHttpUrl(): URIBuilder = getJupyterBaseUrl("http").addPathSegment(JUPYTER_HTTP_URI) + + /** + * Root of the web app + */ + fun getIndexUrl(): URIBuilder = getJupyterHttpUrl().addPathSegment("index.html") + + /** + * Resources are in different folders when launched locally versus installation. + * This method handles this difference. See .groovy build scripts + */ + private fun getResource(path: String): URL { + val javaClass = Companion::class.java + val url = javaClass.classLoader.getResource(path) + if (url != null) { + return url + } + val myPath = PathUtil.getJarPathForClass(javaClass) + // static/css/.. <--our resource + // lib/python.jar <--getJarPathForClass + val result = File(File(myPath).parentFile.parentFile, path) + assert(result.exists()) { "Can't find $result" } + return result.toURI().toURL() + } + } + + override fun isSupported(request: FullHttpRequest): Boolean = + super.isSupported(request) && request.uri().let { it.startsWith(prefix) || it in absolutePathFiles } + + override fun process(urlDecoder: QueryStringDecoder, + request: FullHttpRequest, + context: ChannelHandlerContext): Boolean { + val str = request.uri() + val fullUri = URI(str).path + val uri = getFileFromUrl(fullUri) ?: return false + + val extension = FileUtilRt.getExtension(uri) + if (extension in allowedTypes) { + return readFile(request, context.channel(), uri) + } + else { + Logger.getInstance(JupyterCefHttpHandlerBase::class.java).warn("Extension not allowed: $extension") + } + return false + } + + private fun getFileFromUrl(fullUri: String): String? { + if (fullUri in absolutePathFiles) { + return fullUri + } + if (!fullUri.startsWith(prefix)) { + return null + } + val uri = fullUri.replace("//", "/").substring(prefix.length).trimStart('/') + if (uri.isEmpty()) { + return null + } + + if (".." in uri) { + return null + } + return uri + } + + abstract val appName: String + + private fun readFile(request: FullHttpRequest, channel: Channel, file: String): Boolean { + val appName = appName + val resource = getResource("$appName/$file") + val bytes = resource.readBytes() + return sendData(bytes, "$appName/$file", request, channel, EmptyHttpHeaders.INSTANCE) + } +} diff --git a/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterHttpUtils.kt b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterHttpUtils.kt new file mode 100644 index 000000000000..8e793308c705 --- /dev/null +++ b/jupyter/src/org/jetbrains/plugins/notebooks/jupyter/preview/JupyterHttpUtils.kt @@ -0,0 +1,14 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter.preview + +import org.apache.http.client.utils.URIBuilder +import org.jetbrains.ide.BuiltInServerManager + +/** + * Url for HTTP and WS Jupyter services + */ +fun getJupyterBaseUrl(scheme: String): URIBuilder = + URIBuilder().setScheme(scheme).setHost("127.0.0.1").setPort(BuiltInServerManager.getInstance().port) + +fun URIBuilder.addPathSegment(string: String): URIBuilder = setPath((path ?: "") + "/$string") +fun URIBuilder.addParameter(name: String, value: Boolean): URIBuilder = addParameter(name, value.toString()) diff --git a/jupyter/viewOnly/intellij.jupyter.viewOnly.iml b/jupyter/viewOnly/intellij.jupyter.viewOnly.iml new file mode 100644 index 000000000000..7e3826b91022 --- /dev/null +++ b/jupyter/viewOnly/intellij.jupyter.viewOnly.iml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jupyter/viewOnly/resources/META-INF/jupyter-view-only.xml b/jupyter/viewOnly/resources/META-INF/jupyter-view-only.xml new file mode 100644 index 000000000000..581fd8e0089f --- /dev/null +++ b/jupyter/viewOnly/resources/META-INF/jupyter-view-only.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Bold-Italic.woff2 b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Bold-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fe93ba058641fdba5041a622c2f5522a8dbb320d GIT binary patch literal 55716 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

M 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

)EveR233NhQ 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%0A+lZGx?i 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 RbG!e5-=s}~hav<3005BPkN*Gw literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraBold-Italic.woff2 b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraBold-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2204647ffe8373a1713c26b973db02344efac68e GIT binary patch literal 55232 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 literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraBold.woff2 b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-ExtraBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..35bcfe9cfee7665ec3bc00b6610e45fe7ff17185 GIT binary patch literal 51680 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 k@@nRKNi3hSOFQt*J4lzd%yrL_?uW6F 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%0DSN;uUmQs!0mS=Rfn%g z+NK+_2v-5xw}${8J1A0EYz}Lh1Ex-_T+m+TFDZ+40ZC%5yuerzfMXZWv|VquQoy&S58 z5dEo;NBs3`IWz|`+6(=fK4$3~K|C_!$QGYTm3Qnr?lEZ6b~erXWyO$B(^$!^2yU%Q z_xDOlhblT+>{@wG6Y2eRZF@T{e69V#2DR}mIoZO7sl0_M>2n~F)2Q&jTw3wW&&k#* zn>yw~8n{s8R*$g;fnC|#p1Wp#RvdXFHLE$&an!GxSjSFoxCt}f{8M;04!=9Okxk3) zPd%SL_VV)#;Q;`Rg{r(}l}x3#u+xvybKeFVyyN>Q85g#*sXx3_Z5-RjM`6ePW^KMk zCZv#^#|IAr+pa)fJ3?TtH&q!o`!9jD*8U&Ju;_?M zCfr3V{bu|>@-;N`=gfp?_elaQ^FLh9uN2(mIAgvzNK@?0MBu1DQL^@@{6w}N&iwcE zc>j^vdCDGbi8%XcvlOQ9L!{LGq3lcd=W?!Q=YZI8rDNwPpV=Opqj?v~n$}|33=$?W zpI*i72d<9mv6y_*pT{}i98bt+MUfG~J}`vtR!%*o4YW4A_bUpSxWNJS|{XD*i`Cus2tfvMf_17eIfoF91+o;XQ{dMR4 z)l+K#c(!Wh(gtc7+dNejZnE8L3(qr8od{>)kjikQ?Or52_k33=)OPP|KECk}C^!FX zgez{A;;Royk*Aw^2*@EGa##1P%(k^1tR~`A+Qvg4yhVz%;#M9+_YtRj*Bp8z~#OTW$W_k32eG>CYF$MW?5)gx81}@t4+Fl?~H}EwibOHMU zKq^W-yk_G9>`07 zs(%PRBy1XI9Fk1ISwj^-tbcpfog2Z!Vn&U4Qp&^)?7Eb|_2B&g^4X05S4Lv!l7m10 z`Lpt`Usn8Rrez!Hir2sH`Ce&8{tPYI%c*+PPtz5DV*025d6*09#qHPFyuVj%Nh?95 zq3NQF;6*HJ|Knt}if)0o*sQMXq=O!d-YhhqQ zsJ=rXUPLa?$TVdN-sFiN7;#9Lh3#!;#HNp8v0009>`Y#6--7!f1Ph%-BAi1r92aqM$rh|{f@xi!oQ(*(BooAv zkDM)sLX#hK41Wn;+dY&&8pyHcKsQAeJ#Ka#i*#{g&qjA6Q~lqzM|n6ho0?US=jKoZ zAs7v$Nw-%kaTE?U3#$nUUiUoI@$oN&o6fBRkFTDjf!eK~2yGn&PwwW&1Wi0%DtHnc zLWFZ?EgJy0hX;kUt_6?L4;H3_Lkq!8i(AOioUx?hPr%)&vB+5HSHd|PERz30cXzX! zol>^+um6 zl9)cDzixqP2|K>63XCrtmTj(zvE;zU7WUj*z<~b$*NLDm{>jsT(ow{;}iix3+r&Gl)|-2Nj|O0q$!D<^%oxDF}ZH9nH(R%tBCKFaQux>heV? zJktKxp_h6;c|6uoYB$Sgs`&Pi`SVgk7rEjqLSptjzO(sLqE=a7J_dflCO*4EJkb{g z!aeV`q)kyHs7P6B7?HDX{y_KB+EtU?`Pd8NlslIO|+66ERs?s53b0ujXG4|BS4^Z1;M? zOR`wvBWPl1Noy^S|4mBAYTC}P6ZrIAfYHS#+u+5VsoZRYcpX?1m@NuzG&IN*awdPe zNNQ*X^-1h(xDgfQq4FS8^w|W_C8Z%RvwG-LvM^Y|hn@ycOKz~<`PC=iZAD+}MOA4P z%CaW8zx#h|vI~AI*DWkw&EHr`y24*UkHTO$AyS zcbNY??2QN^k!y*y+}mKaYzE+taE&7l)5o(%A8jkrf1gi+duBDcV%;~TjV*Mjk>uGE zM5M4e#q!{!!v$6Izr%iDDej9~sW#}&)d$Yi`n^09DZ%)}66muQyY!~rwf>I^02fIv zL_!7sNRVrfeprHyhLEgp>@RPe%lh@gkji z0#FUjUwb17j+SyyG_oZ-x!F3?>((R5zr4jF=%d|U-Sjwh{QhjWfgAWz{mh`{=*_t( z1KbDzW`PWOo(@9D)3^B9ZwI&YeKR`X!^5F4GlH@zyvqIV^w#(Ulh^M>M)ngyxF@>C zBixhzNn`}ZPcTjGjrmOz-JvHhXHxGz(0u^CXnu%myOkH+FSJMDMO_s^!PO_#Mdnl- zfP_j56?#qaZS^t{le0hns6FQ^@M8drp$z(~`$oX4k?q0IY#Is+w1E|j$QL*8x8qY5 zc}aRBN5Nq)UesLtZ{Gnf(kRrka0TeLrIEF#U9dAb6uNG#h=&TBY7vGU;6iDf^4 zKV+W1Ji8K{JLjcd&6jDwX~gKqk*{Eu+mYL;s{nzqKg@C~a&GD9G`EE*UwC}wZVQHz zHkw${(^y67CKZPI*|?5#;d2Ar2b=LqEvZ|Q^P)v6C$_M#OtfzaB zRbt!Fc>PiMW#eb9NrA73h*;Ke9Gmb$ixkasJ7`|TF=dJPpT_HDp}+CX%v}Sx6lOra z(nHw$P9%;5l9F0O?{jKCULd#UqbcJoyDG~}I^-Kz2aP zduCylUa&zL@!Zllvs~0}&J`ms2+TFW5=XL(;`QR4r?gnUd<3@C` z&^yhuPg@0zV}Vg7`CQUyMoqkvm48#w%l(aGcg(R)MM^`%AB{qR7&GK%-*X4Q|RiKxRs>b2TA3hvfUCXZ$zC`jQi;o`KIK zq^S`2Z9cwSi12iifxblQ@HMuZ)ZLT@v^)lC&K&O?^c)7-c--bMXZ0Jk-5ZX182-6~ zQL_TQ$DW!CyTg;6%H+Yj6Y|CwC9JeMj%k{MjK>b@D#*9>`--N6Df1$CLwI3lTOHfy z|GNYafAq?|8hWafs)g?z?^R~D$$Mqx{i|Pw!aMP=22HXabom z%Z3hjR@J^6MUb0B;v{dsx>>n4b5+(rNB-es;n~KwW7!-0<~9g}5bgb04a_^W%>6_m zJe{i}5&ux*X<<>%`JQxrO?eN}`H6F#lS^L?ihJrlwWt{K#+Q)-wDa6RnnhHBh*ls+ zL!pyk)upzdRqZD3Tu z6w>ShMisMok{%4AYg*ScVT~b&#p}dbiH9r~jq6`7*UGyz`*+=~QESyt-$Y|Fw4t#LxP@UYJKLmV$uc@|&! z&i3+XeyHjleAU^pGT}^#Qi+%Y7Orq|f7V3>t}aWgVmQ z*5iB&2JJHVLnF1{c`(r#+r`Z|b<~XvL>>>?7$HSdZ^R!XE2_6NC`s*mVN~$Xj-=AK zlL*O3w%DSM$1=ktDuKy{9e*6c<($x3Hf|6}BwWS2mql=jMN`);CB$#Ja5L?Fx^GNU zB2>?&k+MQ%AV?=7C_&IchCGR(m<8oaXk^wRBBbL}^Oea+P@U)O^3eCbQK`hGw#3k< z%;+f%y}Atik1td0PO{@pD4Q_TQltoA&XZWt@EUL_aGWtFcXHXW1+_hIX`%YfJj^Q8 z(i&pbSW@?~c1Y`Aan#a7tE^}ryQfR;*e#MWeJ~9>E}PKgRql5s9`D&itH(177M@r- z8w>CibMOuGVQyJQQ>ca7)b?D|Y>)tURl=_}+|Uz*UEZ0)rFZZI{r>#&qg(FK6Y5tv zS}M`QAr{yYrT9ts0d?UXC&|C^Z~-Hy4{IMMpSl8{66~JNFYwn9J$adw??WelQvqWxS->kMU=w5vDDWn@q6$m+Sb?f`lSjx-CYEgwoOp6}WRBp?Sp@}& zFhnpi9m7j9@5!@@69je+Alx0U_vtL2)a}b{ z>8l;@)*!W_z1zf}NB2Qh$C#yJ;^U|nbNM?$m|iT}<>g)KuyX5%KPlfPGS048G*7A1$dQ!f7O2`< zG>@jq7XV&AAkx~c$|M4i6~~&-p?qm4aTtabzqD*!etGHBb4pcza!WdriDGif6my*@ zk>0M!i$|impqeJP4S=HG0`BU^kS~wD+;Phi>Uv3C`uhcXfzn#>L3FW{6NiLqo1D&E zOOZJfVEl|@sY;thOuBZUHr*!I14?UE7$SplP}m=H%)r&V5ZUV~DhhQ(s!!fNSNwCj znnJm`-+Q>Zts$7CNE?9}?cm&eOLbd)5G(w>K_#`X1reN*jJB5hUGiE$9bDGYq}c+l z^pKhvi^ue~o0LNKyT*=&O>5YLzof?WnuP6f3PIQHCmi!s$9Kd%KZnhi#=4B-Zb&*RV5$;_dV|IwrC((LI-`Vk zk0FJOX6GUYwbi)hQPU)3#Ycc_z6uT`3)8P|_zZZ4`WqlH-lm*uPgHU-8kf|t*yUBF zb}-O==_pz^m8IkGHSd-v@?>|VND6XR4S94ngP9K11Z`U5sv1^dFO9WpAtSb$^#5Gl zAP9414nh`a-&^Vbr?Mx@v+i@|5HTT!0cq&Tp$rmZGZ+wmZ_Xdg_GyJWqb}MyYl)AV z`)ea*a&4?{;T`_g^)HnHfyAMFsMH_C3<#|>CGc}yHw0&-0+mp9#Rs+_?vK+g6#p9l%>Qa5!$!3=%5a_;c6t}3tD@s!TWJ2z99 z$2Nm4{!fq_KY4Fuqn4)?l`4mqD6i<{oT)#-JCl&u^55y%XW2o&1KugMdVqMX7En$) zX;+9Zg&@pmld{2`+q>t5xzYNrpi7XCz{hi8wG)YOt|hPTL(t4fYC zDy#~q>p&)4<#lTYvkYd8$+=enQ*MMSvg)s&14uJ-63qE(;gD>v*= zeKTT$ZC0pgVcMC`zNE0SbumRnS~gdGjilm<4I_fnjHBau0{u^?UsaFtpwS-Bkue`^ zJJHWyRr6*)t(&<^H^j*R+MAc)OZpptZj7Zq8?5mQg>zk?{!mJKbY>(|rvf^Syx*;$ zc-8u;4nnq%mPL%|d}*c;B1qIlvGqm66(BTKhGGxB54|L05!7W;-D66+`M(x)JZ=3%nT6gmF;G+O7m^cq4x<&QKU#0lwXzSwfQL)4Ux$$`~uSw4%&EWpGqmT$Njq0L9a`0`ixb+Gg zITW7i^g=+M>7!r`8)uvt->rGShZwpf^P@ z3%aO<70&cH4Jh(2D_Hn19J(dQcs5V-UO$x}DvSx08dlmzFGHa?I$pthUOmN^lQ{Iq z>g}x|cT;n=@3{){#SIDzuZ{M2HSv5D;~S^v@0d(_d4#ZMaTIbHI8vh&UE5TsbL-g) z=78vexb;eAWrS(;0tiDt+sD zC1u?6GRhtoBD!U(oA-Dd_%P~yuM;*ZruvODmZ_q^;6n;I80!8e9g7m3r-yoxl9 z&zu<;=pTSUdafN?w$4sIWBKMD<95QlP?Rh{q4Ptn*~#;{+H)i3ZH<~SZ>W=+#-I9< z?)8dc+e_cmev-fI^RJie0`q&w2FSASAR8gI%KP9p!?nSyFUL&B4AhB%+HB zhw&9}J)rGV@YQ&IQsf0M;jcsR)k=1xeVWUB-Bs`-4tL~%?{rSi#ab0U)A}Tt;~&P< z=g@n(x8`UPed(_7&GWjYm!|h+;udbDFJUs*s(zq87_*n5RLr?OTa}cFBNtRfHOpEP zxM{e5NH$t**DG8#T8!^ML=<70W4SZ0Tu|f5MHsPnds=>qQA1qn@qd>-q5c0wct1-+ z%H^q9rk5Z#v&b<$_)oPqbv~alL`DBXAd_U#4G%BSU4sGs7z(OXhBA(gX;gUJQX$7y zsEVx)2(8JMFw<3nB3EO(#rjYK++ElKkjl>>MW4NR{BHtmIxF+&jg+bjeO1T#KbO<5 zOZG9@_?)<`+#eDR#a+qBJo=&6eFguONZqF^=yJG6b!`b5j>F=X= z{UZ8sKXz!NQXyUhv;Mo`zKu^VZ$>7tP(gPPUy_#9be=_X&D4-Fm&Kd@I>fQ8fr}G_ z?+_ij?Ps8MwHiz0ud822xF_S_&YL*c9~SvA*%%zU4wFU2zFnU+3J&dhhG-lR7+_uG zkpWKKGAXuj09dk2j?Enq_AFN>E>~uy{x`r~zD!ZMjO7I(#DM{m@>T2tIYid5RwjtY zGhz}bZ))5;1WkjLM9fLcuU|aKV8oKp&T<(-h{U<>);WKwK zf%-u?G8LT*^bN5JBT(Xp^kP}aA}V{uGI`}PcFMz8?0M=J`nWwd7E_d~lXBy-7|}37 zOfFBwsbvfWb!wL7M`)JE&xL;M;NdFu$~Eb#%|hXEzBeHt?_V-FPyGS8UqG7C`Uc3-NhhT=W3doFTaYKo zqln?=o-V0MZCz4Z!0?>vScHv6iBX9u^;ni$-h1;o90A{;+SnrCz2pNQKY2*sXcLtU)hEqP!>yK{Z5{>I^bthrKHAc6sXY z1t;D~O*KC4Kw9d-wAV-J?C%Bt3mKaFxGPXTC$7JQ&GP533in<`A86VC-yLh2q|z;a zj=^hcGrY` z3vdcuxdNe!$u8u73q!>db1!|vu4DgiImK@UqsFKBY(|L94l%M{H|qRl{_t0^vk{$- z8t*i>J_@H(`!9dx56Ajl?(pB;`mK<@=ue=xSN`ZXjhGvUuh@kWe`E81@H2)38m)B4 zpFnl5Jo`6|h=-?Qs9#s#Y50o^s}f%MHf4u_gmdVSVe@@6~ zu2++#M9VZXf)z{FoMHdo>~#pWkrsTq-`{l&O`$JUbFS88BDsr>w_GKg7)++)gUN)} z+^;Xq@0qp)4a1r^R|C13nd@nI*#5VGo^JWWp9^ta42%%Xtg8PgGbY|z{(Qilzw+}p zv*_}L$^8SsieB02XUjgw_5lFwJs8|k%GwK~m=0K#xpVTDbnj>X*6_1r3O-cn87d1? zT^wgGACy-OvVGpg)TgU%5C*^$4PoKy=ykI{3PFNd_MFDj+Rp@oeErS8YWY|AS4%2PW_DEnr%Rg& zAoT#&y#WKweY#u8m&jAZx#nA zjtSDMOSJMnJ~uPJO(VBz3!af4kS8HptijZXj~Zh$Z>}nx(daDiFUbRm)kKn+r;nbV zoY0Hjt(Gp(cj6G-IrnW z|9c@BovTHz9!E9RRKw+cWFJoUo{{NlHljvtB6{M{s_AfBUD`fnD-f!-ZS;BWyvcuZ ztCT#t!>l5+F5)bdYVtJlB*>CSOBu~*MsuM^rzf-@-|kl!0O6zgRkvtctUuOcy@w`? z)4gveQ}QZ0DKh}Rvvo(8@lAtzs(2Dws@d5f-80d)x^#Z5^(4B)CgX-G-|Nq?v zs@I@VlV&YinXPZr-24AmzP%0tb{zV8jl=1yKL9lvD_$Fb{TTJlR#SYrdemJ2SUnFb ze{VIj?j}GKjr_OXDMqX%p5zME?vm3Lotr9>`|E?Vuf4CgiNOfy&6~h*=pQp1sGOWteYt|# z4FORG(%Ig%0IS9(rz8}{Y&q6cwudqo7J1zLI;b&IYSy#Gpm84$GCp-f0N4ZAMz-5zJONYvPqaXn^i&r1rc;K8=A_nPjDR8e& zgu1aSr8<>&REjvwGrKV=5d$}?gRBzsZgA>U-cgB)JM{9#za4s7F)LtntV?B$pJtiT zvqH%UHmkr8i^_&qI<1BI*`qdY?E24DwSTro3)^VZHsXTV*KnCRfJd?(cm@>QCF;bi zZdh*Vsa8B+qT~->pbT&k1%yeOaVoLp5pF3M67LNQYG3+n|ycjSi>O9OblmI?Bo%w z@xT;Pd8Nw|k4>(EyF{tnSt$=Vw9_fDT*Eb}dciu8;@+GCycK{c-8zJSjPn^rKhU){IV>6#T^pQ2Hna;?ZE=~jSsDSf${jA|TDV3}q zes!MUex=63X_OxG2v^IeDEhU;P&p*8=U*p}zypq`>t!1e3#HghlW#NM-m*hP`5Hvd4MMX|%I?yfk_1pTJ=LkLbm%J$c(lxTxwz{64GjQp zSep~_HHd(?D;gLaSz@z^t$a#8yXx-EvUHBr-kS`$Rf}v-jzDtR1B1><7_^19(0w;# zHq>!ZAZH^-hLot(C^FZr2;Dg|)7EDGKJV7QldYq)VBayuDzXaRooYp9uK8`RRQBxr zQRY?HzwNq3c-)g7j(6bLaSPT-NGY{7-C&~2?JHY^biehe^;SU3kJOcx(otF{bNBq~ z#1H&?k_EA8{Lf;J=-JcGOeq+xT4n`i<^E@7m3w?Gqbb(LF*dx5!Tsyae$tLM-QH~+ z)AE@jYX8SNdY<$j^isj{l0aXIF2}JmvrNtBQJP;j6UN5bCeKIue{M4$(r^Q~^g zLXdSDU~xw@gUKBXVK_j2dj1s|{V?-0txk{x|UA35CVrM4Y<> zmMjXZx%K%h(tbwO8tyU$%{;gSF~a7BiKctnljm<3%MdB0s_S$4fc#uhrRd2xb6Fd5 z(wt1F$*In>5Gn57=d!um!U(wLs*;03dqwd|oZ}IdAhRu?*I8Wp zOOc{|>*JZY%3_Jirg0TUA1V_>oiz?tZ&c#ds49y*OIOQs(N-MFri!QHEHpeUY+_e0 zE_YcV^H|Fz6HZs_A_$y09>Sg}B?g9hA819MM2+DR?ne)+o?u9|0gRSb&u<(|S{vciLO_%8y z&DAlC<|*W6U>%6`7kHu_wdNs~^LfbW6fr$(|7xBdG-2#t0(?x`KQwR{C?nwvr$DGeRJC%dot96igO?&92xn}On53Q^O!HO2b*po7 zXSq-zz=iT5basSku*RfL&MxD*3ewWBUNsf!(peO9fwi)TRd#ha$S_Y(k(#w|r}Q~u z&?6<3s9o@AF01)t&d?4w%peZlPs13apaWu|b;VDMqaW`Uq^GDX8c`4^F_Q^^GNz!> zzX8F3ke3eI`bUPT$8}}|orRo7Wpg~SCeL+V0h#U|JrH#64{4_>@vI(ngaYv81)Gqk zK9CZXXyaf7URhwlyi|i6C=I`j3N6YwV~E5UarqE%uZqRu*E8Nqv$*fyg*Bs!Y;7-wIC$ zTfI1uf%|?111nefT)Y!af9yn&oc}0iM7LOkb3-t4!$LBKmCMoKPub+Ox^70YXR@;O&n`RNCYUk&+8Jz!_pX^wYw@pQx; z18`3QbHMSTR%pzqvRY#0rx-(~ht zn2i^cR+54#*#tZuk<976kkt-2LvFU#N?9`IcDzF7rC0Sm7Y>McU_jpsHYgsVXYtc_ zs;7PZCqJe!EdaoR*xx=OxjBp_F+}^-6Jvn91d@p$rbHL*loZXX1X(R5u;ilXsD2sn zvpdy@xaJvf$XM@5U3BToV{M!ucLd5^c|(~HQZB=R|IWML2wR9&T9+j;P@2=9}r1~8q491k}( z*+Uv4w;;Rp1r0&`Zg80F?h!RzR`#CA+q?6X+sldK)@sb-3t3uIR@? zXFbuS+M@5^G5}A!gUpGbNlqrP>Tmc^2rFFh=n934WCXf5dK?B?CY@8}5{(qw(wN0# zs+H!$3JQ~0T;ec`k`s<(>*{0|J2F)rU%wvrGqPe$WSzzu@dIh3%1E+q@v4G2GjI=? zhOmoibnGXQRp@~IRSb?oNQO1l7My;hM|TOX?0aJDK(NCScM)d=@m$y~+(vC>Z&`u@ zhzhOcBQN%LV~@Be5~KT`C^BL&cZM)!;+d7A)aLNqtc>3ST?`t#6hY)>a=LX!Ej+Cr z*?{>$n=c0w%w(o+auI^#!_!9w48Gk{N6o(tolP>i%`C{PMolz~K{UEdcgQS;q={tN;uJ{eQ)k-V+~}qOxe2n3M`Mx%%ek^%DJi&|nn?AAi|?s~KA<#sbr4=+T2Hag zX+VzB8G2YLVeOH7wJ!i#mj~90b_6N!rZ%vrz-ghBPT8-?vdHz38EmkS2|V|KF|ZAW zLqMcRGn!Vk$!&A7br(>u(772L16%#r_~Qz*!ZdvRiU{?|&(vA8O&)(0`}BP#HhKJr z$A?HpzynB_!lriVq|WZW&L|g#UF7B&Yy>T?)^h5!+krC{3Tn1N$`e2N<7P~?&^6XT zV~4i*PG?T+4pDyp<wr*ttUbIl`$c&o03BW0zL27()e!#)|;b(5q#e+Zbt3{EC< zz%s9KCcIs%j$3YA7_HNA#1*p)t37`zKp8YyM%sY56aVfmIJ@L~7RL!5G~2x=!gIIDgAXRr4lVF#%%9yvDo66=OSQM*g( z?tkkT?UyUUCWHMzrRzzpE(53!wd&K}0oqThXM!@2CBz}}o=3x$D8tf*Dl?R~HY;oJ zxT*YLrvghmGG(UEA)ExC!F{z6?OA&AiP$3z+Cl&62^qY{ z!&**60Y;d#ZlS&qFXt$7HcfFV2=)h`j^(=Ap5_(2Sd{ynIB_rqT8?9Ct|4I%{=pSx zKi*MQ432Pi(0?6m2v`8(*Q$5~RSQh68>SJ4i<5WIdLA4gaHDV61vVr_JGw^C!CBh3 z?E7<4Vin4&p0e(BS!Z^?6o4faQ3_jrvk+odjA5U zzsziTl`=qgj{$~)1#NMF-Sh$ox0sZfVH#cn7%|#QHOvQ8CI+K{z_4X;sFmy*ppGHN zmA2$OTGSgdJOze_rCSPsrX?t(;E}`;5JO%kNSFx2+_|BW6zWm2e!5uG^MsBRirt(n ziAzTpa2I=Cg#=Cxn+Oag)UkqsEfA>t!qnEV7!D5k200!h#+zo4odky1{>s3w;Dcj0 zVp3qd$DSyZrKdSIhpi_NweL@4o_i|MEf{WHP=Cdms+IXlNkzo-Noy2?ikWnV-&@nf zx6VM-nXW}h{Ndqd$T)@7gg=o_!EFK~bOp(ltT(f6t2&-hghs|Osl8jWJOTnx5NBYC zreY9vypmU?mPE;xt?yxLiNzDtBysZHHf~-_tW>@AM19x(;6OWdlIns1S(-lU|3bdi zKCNkRu+xCi!eixM>J7wJfl$><9&+b;MLn*sIntJ`w|aeQ&o5h`ylUiJ36)P<0K`$q z?b1sa!efv@#BGE5!!&SU6jHy}<2{*l>6}&%RvjLI`Nk21-yP5a`Znw` z`@IDyXxE=qIOZ5>*-ac*q-Oz&4TSw=Z>W$as+!(|C#;fFN2K2fDXTz2-th;j|3 z-mnQIykP?=v^n5h;O4@6yqE!4#QC{Wi1Q|S`TVG^)M-1eap4rGnY8O*#{uP-I^p?l zW0Nsj+ui7JF-tL#!es1F7ha16mily!$CMIKgx0h=(0;-h|Mly?VTs2K`!hA_l9pUr<>Zg)Z_sFAn zBCZ&;^C$8GTL3ulzU3t&K7!P^IVge%pawY@^;B3SG&t+hy{|Sh0iiSRm10Nzp!s5` zBHWW;_~PXSc|y}R80NAGBciTJC1;Z|M-^pvm=7LH4@71mdcHxnQOB(tc8Rj*8TA8OS@=L;GBsePYD-n%x z!!5XPbB^P=oZYXtaMu|!urpxTu}Ug6&B>s~v`sW9wJ8%trVW+Y2j5zGS*Y#k*1o#~ z9zpD(4WC{7Ly^+|5bGCGUhwPM%4+gVrd`P`zrFvC6RPq=3+}cCC zzt2=3n`dI&gV1gZ!_WwyYaSl46Q1qQb{JfPL60EbCfVK|*s-_n0x1;!4Y!cpbLN^C zb!L@PzrbZZaP5z&y}2yH6(w z?q1X2Y5mgn-R|Gz*x_8`d2YFQ!sxS|n{00r9(ivn&ckU&hFqLgoweU)TN>ZHAH>{LgQ=6LoUQ2h)s9c4Q2 zQJ3!jXU&cJ*aw>Xt*A(~jGiNHTT#q@=rG5&~P` z=2iZUImxAFB3-`4x51$6K~6*fxxuI)aSiW3l1))3fDku;Tm$jIYal`Mn>0JGNk6YM zL47j8?&wf868Nk2UX4>M`RusK4`Z0gZJRA=*^1EHY`Wr|c7uBEk#bvm=g?~~ zOkO?UfDB8XZJ)P~;mpDGw_Wd|;GdtB<%+pkgayp^55NQ_QzmHA7?jq4Q`f)|hi|?~ z$VJMe-;Lg?@=CnLEmtmL0{M1F<)!}?Vbk^GC#~}WJgKSO=^Eno}Bsp=~=DY@bhF z0@WrB+$Ks39kt#86cAl?y^2aTYu*&rhg~MSJl1`cd^##>vZ;BtB9(*a37laec)t;| z^Io4N9%{o>Y9t1q!F@PvZb#F%Qc>P>7C+q#k5BJIv{4sL9jo?i?IXs8Ew)9DNv?XQ z8RU}hGK)p9YR`%icCiJ}lpPTq!)2iYX$=HFyHsQPFkb`y(+60kO1aJzjIWkhvE_hn zpBHqv6~VgCv35mRoIcf*JY;ieIlob~o1Z*E1WKDSzH`bPKNih0f8B0sms(dvsV#W{ z-;CntZ>Qr3-3V`AEj}$jmY2uZ)5~bOgWQXFezlCfE5?28Mv9z9R2d$hLJp&(kz}5u zf$ky|DV-vSkJi@iKg*a_BM0OZcMdaJy&+Yu_0yr|+ftw-yaD10K54tyEi7ALf|lsv zC>H~gKHE~;-U_RYh;$;j=V1G&=^utBCJ1qT!!}rNlK8&+1 zhuAjTRIvU117oa|K$`nR_if76N%rSeJNymYs1=M4?f+UhNA_qcygxnJ6r_j6KigYs zA7{LJ)U39B*%#etKmCjHI7*U7^>J6L_=)KKN9K>eDC5^4^G-u7@8F+!wn)V1k7uVR zo7I=~m*un97j)0v^<7{>I+-zujx@>LlA;rfb)QXT4I~dRW}9lBj9?O_skG`rJ%`MT z;axi0TiO=!&}$RFS|L^&&91CNL5vgRj(pSV%RJ#w?Sb1iS2yWL19|Lv`=TiS>4JQ$ zZApG`FmOG1tAe7CTyC9F=9>IuANK311SZ=8b`T!z$FZ*WkNbz4t8q8>{=8~i52{mW zYcqe(7$OZ3g2Y0A( zFl!q9g_2#aXgk3+>|#nCcf-BCQ$`7b!mb@qT^sQ|Y}{RfQCpUeTX8LYivw1e%0!|m z$@s)E=CT|(%C(0trjA+KZ&^7`{GZ)Oa$Zs6m+}@_dg6I96!R=fj0EMD?5M0n@eArU zO(yl?tG&67+q(X^dB;2e$HD>PaA@&;*~)xT%l~pi%K+2K(51#@gH>+X)*e5qvdF<) zBaO*^Vunw`DEE`2y}hliqtl`%$9so+#cNx;TSpG!6`OJ7=rMfv|E?c=qA^wm;TEk}2B%#qY8HO@UwS>}a>CX-I5Qpx3oj_U0;leOMr z))}J)y-KShzb1JBO-coFp0tG-hQQ*JgH1l`D0*B%e007bk1yp)*kYzAM@UaeYUC^c zkHgAk&{E@PQprSoQ-$~g7%&();$S~ObA`CWj5Rf(P-$r(;PE(}g@rZs)z{UAs_UyN zODpQj%K|0!!D5fU-sg1|`P{BfffF$uAVVRlz8r3O?2wgnjzTsV$^0=d!yBJa=8@{* zYGUG-lCejr+o?-04tzmU`>>;@ z%4sCG@DOQ&-NDaaZ6M>xZ?$ANgp6Gd(YaqTWLaBe1ZGz*csP?OfO+7aqJ)6Kj+7!y z&BeZHm5e)F$0mGyvZ8hd7Z21MIT_7cD3d>(b}G~Ls8X=AjkT)cy2EWfQ`7IHxf1Gd z(@qS=4HEx@fjRS<7u!0Qr|EO7Tyc!ciVL!CIACUf(Iae1T4TUOgTP&hL=o2kBA5?ZshLm6}gUw}mXIt(rK{w9Orr-uVgK=gp+u z9E%6NMwu*yl|9j7(ay~Z8{feQ#V;8NI00$rB1gL%GRx(8heBL(QPUE36+@6|PA%qF zk=z|ylVQa4EqXKhOVuAZ$4q9&k8ak@7y^awg#@?sn+=bBH_#y6&;j=oyDOWfK zxLObeU>}O~cJiqn(e*D-Hv-0d_q}07#|}DCf&wXf&e%_1W!HH5BP5eX9fL3(jENxa z23~_m6^+Q-XUwS7{X&s1G&nOFp~nlWae=;diUE~nTO=8g7|oG@0rKGXE}KOa*Kl?M zi5~DN?$ttyo5yHq2=ki?x;{PaI>hPo)7#U--__$!;lrTOl*z`}*j`9LFmJu0GKBku zo%dHW_+1DiFj6#vwqt0_-WvwH1WJmzk+Tr;Ydv>uHY?5CKHF|Z3iUNI^!n0s0*QhL z1{m1kEMxQT*FCOZ1fMYk+@5tjnsO(#<8#<8z}!%lCmCD|UI#YgJXvRU3lFf9-67~U z1+)3aefmqP0e5|t;w3~wrr<=O)Kn(FucZNZPd&A2NV_C?N6Kt6a5DuMfE%C_Do5pf z61K)SVm-W!qY#LPFU{xE4Y?nmu1~^>p=}zE3CNRgmUM`o@uG-D8velFJl||mHyX7e zd*e275az`KX~CvVO&l*fZf$9_8uF;y$;h?!OqBYF^U*~RVUxN8UITu=UfD2AMDYZhkgHpoq2wo$f-l zVsvnFJi>22FVJI1dSl^ny;|jYG6Abo?U*l{_qkfv$+&_l1BtaijLHi zGDqA3bPDRCA>MsE+<_7{fa*0tmq0-=mO^Gft^kZ1Ub2gWWtmogS>Hmii>L6x*y7YF zzowOfVpe?_6|Ee^L8gfhK8nWqczqvfZ_M%q4|CGLpxqXt5mHxpT;791`rzD)7QI2} zH4!iSG;t>9s~J|eP64s2`crI=xo4xiOY}ldNThKf8VCDW6uRH+GGV?oUR_OaORwO zb=j1gxq#fM4Q7Kj4t|?VeWwk8Kd4egVL6(dOpWVfWC7RNVm(4n+MzaoKVhLlf+d9) z1E!^B%mqiIuy~uZH}HzQQUxBJhzDdevPFoyDr)UN5siHSm*=2Qw(Pe)jD#3P&lp4n zaSDTZfo$JKjf3ENlyMcE*lffKnNgKP!_{FFDdN#>EYb2vK#Yd8Z^QQD&YUjIBgls` zbKzcF1K*9{2#Y5EnQV((yB#;y9z?ZSnP-ygA^sbeEIJEtBzaTrup-403LTQD%VA%4VX-`qHy0lxjq}j!TVz7Jm?1{T&3yCu z65RTLxuq4OPJL-YPJ@zbq{@{xfAh^aDI;fL{KHun=Z#HSQcn9OtA)PJP|juZxlhS` zBEQXdFhFU@X0O(d+7e4<7*t76mVPV*AP;O{@lDp+>a?nc;!XsxBmK0pi;tm*3`VU2 zV3fz8AkyH>6BEml?&f%khW(;G>l4M8Jvb*=MMwArJO-k!qnV?nz!emT+e|=@@ELrD znMMT78Cg#^5g&e4auFy_b--A_dx3w>)Bq_xm3I>7hlfUHu{#RUyX+G4TfDL@wCnZ9 zUH+?7F*9gp6{4@;ey1z4m|Y>mk!FO<5&AsfIedLT3OTY8;*VZ}brJulfh<&uM-5n3 zJRUWWwJPy-2Fer+lH?J$-o!++4sf5c4|ErHjLx6~UwkUdT3H&|NH&#OMq?_0W_MqF zDr4j=#qHV&0q5JwP31D$z(dLg2YvgdIUmSM(#9+u!6 z=UFCxnVlq`-PQM3YjQjsarpTQL61>^7riR6g6R+|J7-i1hetztzor^}(DxQ6?g8T4 zOH{Po0D*_o7#lfW%>a!=ZrBJqE{Q~9q>*5CsgZWjgoEUxm=-skz|Uv5)KivjzQD%g z{l6TnZB0KaJHBGs0%08>p=sYU$g(3mdPgT@6i>Pa}Z_>1YGQXAldI&EXU=&hbOl*Q{gGb0BAmT92V(Gxfm9K?sIjq+oEj= zD}GQk6s7j78uU>_C>H~>Zep%`aO72_d+_qCsRpLW+tcI;2uyOoKV^- zPxOM-a-9-J+RbvEafmI1*P9LJh|OpF)8)n4$^8C)aP6{u;HIfiNwHlB2%;bld>4pS zb^$IK-$r@>e#RW7I=@XHk7T#MH@5}DfHY;( ztm>Hl^{|vY2__DQcPH(((C^gKv8->LS*$rdL!~-RNKl$rmDBft%Scl!llf-3E^`PK z@ETfS(Rj z1O~Rmj0sVm+7%jiM8wWHD26~-Tth?1Cp}#}qE(j4i}GdQb>~P|lgB*56n0>V!PdnA zMF6DCX7jSM<8E&aX~{YlTNz*Zk=<6Qv+M9CeeN(S5JCDs1HDkdy~w*cSAuUj-?!9` zMUy7pALQ!dul7!cMZ5jiFGu8XR=%LS+__%h+6}x|k{V8utYybJfJ7+z$MWZfc-nzB(Mcep(uJ;jl4FT!34m1sV3#gw) z*@mWt@{)NWDJikrsnnAClDdj=d(d9&c2RA~23-*>q~c-3^BO-~EKGtVLw>K7n~2!0 zIcS)E6s2nonIBp`9IAc1iFLz&v#9_PGexP_O3V5I`nc+%JlDxtHrulID``5pDP${F z^z^j1TP!O^S8QCps%Lr6vVs2gMePf_IxTJ8W4N)lCRFZnP+RZs;^8RY%crf{M>RNpwb7hN3|O4caEo^!`-o-1&t>1eAW zxKmQG&DK>9Y8{S9Qo-?>#6eG=xQA4PA>{U)8NI~Tn;#a4)cH>myB=$B3=V2z%S596tM;LmLwpr#M(evxniAJ|3`SxmMTa*(!1A$$L zWu_-mjT|ze#@}>ORZg}aH^czhxhZt_`$W=a* zh-vpQUCI;?^=-Q+`|Q zMX$QecU5k3UWTP~C1db3H!a(0^Y)<1;O%E{X0QS;&?7iQ*3sEWv}Ax|nVM7#iyfAu z*)~i#SUk}#uS#zsxiGakjcgpgPy5NFg-Igv9RHxpVm>Bf28;GoXfe72eN;c0iZOYK z{G!r(#m}RSB>>nYgP%x|Dipq}O3U@S>q_*QN;#NeO35P8S&Xy5A4@bS&e8R=(Qxu4zt|jGu zIHIqqM;Qd;2WE|rq~`{lpn^b18NKdhPvt}~V>`N+gplwgN;tuhlCzXB07eOj6b#&p zbE(B>V-5mRES@ri@bh+Qf=V$MN>BhrzB9tjtWfNRm-beL{yYR+6)jGY*o9t|LCT)C zG>P{p1}&3yuO-hiix0hpti6cCY>uU$V+wYriP6e0BJ5j8u~}9M^?2wqUO@b`-r}Kf zN(>eCp;ETjc}=&BZer(#n7K=Eh`2O5B0mDF`Yr|n_Z-F_M?KNd<*4IUyyD9BJZIYD>a%2%a5=5Tln(s+$&1%(TYBF-;^(+OI--~)gnm1Z8mKl{=yv{{!mQkj{xL8*ybzs$1RfKd=iYP_`G^Mhj0kWJWh~f~4huz}O zi^DHoN7+C!q7v-xkM|x($+a#o@(lY^apdFW+44ck*RddX#^!3<`>2ZvWmSSYC&#>R zZCK5!$>3ziy!Sf}hNA}LWW?d;r?c22^>4AlPuFqfm3WShx3!p8FV?+K{f?{jG#8P+ zM9N7)@fm7&xr4_+a^2iM(lVcd>37{l+F4|dIpMx21O%(^yn=-8bnW17g>yh7yD@?g1UXwebxP%O0v=?&MO_YRa?88nU^03^pA2FTga7=c-U?(C2a5l@laulyb2s zoni*aq!xjApNAZ|i$bekmSS<7WOV3iUf5{7S=*({sG(ulsM4oE0&D_WMWW18gXsKp zFpRUs8spKi7ML)WC{h)m>;90DmNQ#dM-?y0XGqu**z23DW`jnQ9B<0N+u{=k*zyx$ zbx76vni78UquXorh0osd1EC$Q#rocl^>m+xP9vJ&~HPxoLA&(Ulk-(OQrIRBBTQGi5N!_$KlK1O( zo?#P&`u%R7;|}y?N(krZ0~yKY+&9)-j4a3sv~}iMx{a}6k$!iU1kIzv)VGWPbXW)x zB4mXleOix}RY{kFhBy@Vm;D>cFSoRL+~_s1)S@h$*QUT8kEZn!9IYTk2@A&!j39?> zrcH_&i)_EY(>>k}`ZAZOS6Fe;wcGwjA6mn-lV-DXW(%`tc_*~C^I6;JhHYmX z)}8DNdgrpVQ<)FD`(mjk}k#X{0+%!vRb2PsM_`e+!*?)$$6taQ+HxvIMerw(o zJpcat`iBnpKU#F+)!UzT^Vvat!9l1 z2&i8+lepGf)AI({Do&j5{q9K={j^)lAgevsZ0~Q}5%#M=5#m+x&T#qMS{N-ucFQA5 ziC8s7>Z76L>C)*wP8~s;8*wfqxlOvpMt7}%pkgvvL{6Ls3+VizpD|?736~OobZE3} z>x$FmR1%KmS~19D-gzrrNbHq`6>Y9?^6{*2f=6r(d7>C|8&jUxL)Ph!#gU~O=Z}qj zj9f}}Ohieu>Z*%k2Mo z<1pN_&c>1L-oRu)P#Z@-mWr~lmEs(f35x)8%84VU|1T?RqQ*<+hZ{i7GF6+^QQH)t zskj_-M3yUal+!)8^}}|wFC4K`{QI1p8_^ZALfKgW2#@LhMFLg*xQ#zLf83&v1f5z+Z{F$z%Sho!!7i;RWVZ z^S+b-fX5`cXB$|oo{p8oTS6gkAD<70ltwGjsun@mCl$-EkGEhthStv~lpe~Ane@-< z(V$u~>9J3>%BC%Gfn;BgZ5d4O+nhhGy}7u?M%n2~Sey3s^FbV@C{J+D)<_SNc)dn! zX|Q3&!{Lu=gRE@4z%HTYT0O5RkqRf)yAWGCHlMV%o1uDE!__Zsc&M;YgHPd5DXMvF z**$cW9oc-}*o(~gScp9oo)Xx*Uv^bG=;WQL9uPi%*e7j-ljJ!PRi^lbd6i$tk79&{K zf-PC;o83YU8J%1yqcP7wLwO{6;oJk8g1D6WhYC!X{p8I%pYfei(?$g#^t`z}Gup>c zz3j5}!Em*wTavUSlq1R|7J1$$he^PQf>5Luqc|Bhny(Rzau4OSdxif_W&E5_uA$<0 zf!O|39%|_WS{iut!R0z+MT8?6CwvJ)8(|w^dmi3(@4R<256Ri&@yDWlN6^wsYDLc~tJ;j|{!F?|qAhX6 z(PzkgCq1^M7o^*@l1-FECt|B^i4c7fHKzM<%N&iny8ZHhQBO7r8~EgybV;D)cwGyB zi%wJB;UmQ6+=Hy#rk~+sJAt+s&r5G-KJ_wJ)Df{{y|kejSMj!Kjr#1j z3q7;wKz?*}{2r-XQEi}zs%1c547B^M6zJ^}NAUjvV@XmbTEihL*E&=u<&!FPT~$~V zj1pA==~!yPrIAKDq@+VBrDN$10a=k21yPVCq`Q=MSGqe^8d+cwSDK|+x|X{9_ulWm z-KUwinKLtIo@Tyt^~fT-t!BHYMI{G6G{>mTH9GQx#GoYEvBx%RF@Z(v5Z*Ij{&aVj z5?X_b>D%AJXyG5|gXret-#Tt5s&{N^=mT3R@1Bz~XAVm;?Vb96uVg(NaWupytE{}~ zBgi@lBj`RYyx~rF6J3Gzh>SP)pq?=L#kOe07b_OA^tc8F3H~7nVp5$z(NyZ>^RR0j zUvuR?^)Yl^b{|gv#v5i-=CJ2XR&c+yeno&tvqYO2GzM_ zAb>7HSjZXadD5(3xESIE>a(8KuXlZt>W!M^%SrUB`5R&UxWb7XI$p-*wX$vOz>@q| z$f1}!6k^=_ctffSu%=V)v-FvIlIG)hGuNTh7nYD@Un&ifd>~ZFOqG~V16kz>`2zMz zUEaXDStQ(74_!F%4kK2N45R-@_iq4Ru}^C~p~N{~VZ9}0k=oC9>-f2%`fO$3=3)<% zq)00kFL@>kz98$V?~@jrk~=01GPem$RriADOQ*5e_t5Hh?t?!OFoBQeL#_$!N_0d8 zJW>nCuIf2qfwyQB?e6Qyosktiy`<~I;v+X~ADkvurUI*&* z=R<+SnHKOx%j#E1Mz%&LKAR+;<}9`%a)L1JKO*5PvNW9>aHU zeXGDQ08Sc3chR%|x*hE8|KV!wz234WL+M7azl3FsGx`lu{ERZeYE1-(oneGqIGuD1 zxK6ZNu7r~c+dJJxeWZ-A06qjEETn)kvs}_*P zkv4egK~9GM3J&DiF@EnS-Fft<({<7IEcwH+{=G++4J^RQy?W%JZ;V&R@@Nb8{@nbN zBQ|_a-j6g7)x`yWk`|uj@`Cj21zp=ejb6+;SM0O_LvUBKF^HrM&vr97Dr?6pjEeX= zXEd#NNP6wl6i9kD%!XCpzvsv4+SbL|ss5PFK5K8`>Q|nM=xb2+^<#y8#e)^fypR(D ztnga_=k$rw@c^+RSA^e_3?uZkX94)9R8PRAw9eWD36xrO~-4+RY0_}78ni4;Id%WA7e zfrf297Xjqk9`h@Rt@*sIuv?8F9>dShW^wWXD2yE3}y=(h|df#%YEK>cbyU$Tf)bN8m}PH-P2RCz6YO4jorYv*N^06T-SXf_*P zGybwBF+=Jy!HYyX;|cPKYUb&~2$9c85<@Z79MFg;p=1ZpcPqwa(cwrRci$|6BP-mgWY zK9>LovpyqsI(h^WO;QHuC?TkVVy_A>sY$%2o~8J*7vMY4AvVEuvJG&6v9Re8e`vS7 zf96x0jEU~@a__0ZD61M>8(DJjD*Ygp`BVuawP8V=e_+;5oj}-_Dp-;t>WPc&(10)N zG!|+~mlu||_e$LrL7b&RcgB&xWkevAP0aR1|AU_d(G3`-;*>BB5>^?h?0TGPajRj& zer%o*jvL;K;$$7a#`83;voJD9c6?YNZEEGlBTuEA;9tHiH8~|MA!Kl9rdRhK-d<2u z7Kn6*)uAjv4p32qna8c$47upsyG|c1Jc0O4Hp~=?3;q#5t_Nu}&@BS(*`uf`xbi5u z?TLCYl?+0$G5cydVb*Umt~F^yUKXcdn&xvm^JmdxenjZA(2n9gBu<(ad*ch@ZCsK8>= zPzUu$RK27l+ns$dBgy2% zSWYxiOZ$SKZ%EQ3cKs=oM}yP}ChSgV{=)^=I>LVb6Y4^LVAQ2JjlS{#zOV^lo7iYw z?|zRDxMdU1Qtw^Ms5ZH9gBZxD%paC`f3?6yvWh@X}F zpfZ*T0(eH4r7X;av+Zv)-9_vb;a}voathI zz_W&AtSjuNgQQ*T>y1K^=nq!jb=GXHsEo;2Z@rqs8$XiSnAKbtAA!X(PM%Nf2gm>D zB6M7y9so>}Q#kdP`-jDPE&M{f;b$j)dKapfIb4dRklqS>n9QRE!?ubR@+dWkp{^G81G{~mKnatHYTZ6?~*%nLG_ z%B|9HD1k3+Yi5!C)#2MQj+`P_=5ICDQdyT#upf#_Ixr% z3BBTb8G|)`_f8cU9!Srrhy|GR`HZZKHdS@b=NdS(M?e<&SC{yZlDR*$r&BviQRQcM zL?e2p`Gp>`!(?#2apcv6ppD@p3wmz=S(uZif@qDEpLKIeqNORpcj4bO-MJ;SVux?d zc?VHLQnTanDcX+)>e{Akm-UG|fV5k>JO}Z7 zkRjwgNd@kzAKatReH01h)82Vs$jj#7#VyHqp<~!sOZo1>>lqQd$$Yv`c5)1`?*ii3 zsynHLwcSo0SXz$?4yH*m;v2hjq!g;~*~TOO-|yhC)4E~n#QOP2r0W8|MCRr@fw+Xh z--5}?_#gO|Rrno}PO0vwrHf&S%Ag~SA_#_m_6>uB3K1h9A1bH9|I!noAZ1GyTR z9%yP68De(NLg^V#LpIx(xMb?wl1oVeJGTSqOB5B_*#J#3H5F(c^G~LIC4)LYc;Y_c zgfYK4!rUBU<_6O8BCqhXpAA#XpmQ(^m^-8E`t^K!DZ##;(q4N&^t-w6_UMsusXrR9ZoT4b{Mp=^e@qmZ}WC1{F~)noKu%hE=Sa)lZZn z_;E_glGTmYZ!dRG!L-TLmyt*w&%34~3^CND`aqKW22O7D6CdSc$KKIt7U1D*(Mvh! zY>(!3z{(6zSsz7b(vD}R1CZ6@%;;AUG=J2J9RN$A`_f z-`NgwvAy@P1Bu-ny)uO+?cbc$dc|Z3?kem%W1eNcp#u~CRZ8*mznDE!I8a!+YCQd# zQ?<^JY)AUoM)kwBUvbe%fFk}5&M9O)M0?&q?2{@QBE&#k`P0w?BB?r=541rc# z+~Sc){7>#)_BA3IU}tPwz3(0Z%Gna;nRdr*qxjrtANc$Oc=OCu=}vU{v}s8S+5i9l z|Ns9BlMb0es)1T{?))b-kAYpKwthZd=uLd74h@`AwNx5;_Xv{9GAOoWL!nqHvq8Ld<&K98tr$R91#}-PiQv#_4!Q-O z4J0mKnO$VCjz`r-Z&^-5tHi9RBKmw+i-&fKSxYf0nlf!vB@1z7p22j6dU}X2unwru zJU2&4h*Bfw<{s71fDtTdp$m`{vt!4W%H%h6R1r25XHZEv7lO(q$w3NbWmN(5N~p@( zrJy<*FzE|H($v%x8db`m%C@HnTu;r$LDMG*e;cV)^rM-k^ieu`A&oB43KX~j-JU6v zgQ-zZt?+sa6CnvLg9Z-<6YcWL4?}7^YdT>?aKY?m&}zLC%QA+?48C{_$(X-CWB_yW z265b;078w{6N{>?LJl{N`Gx;T=f7v}tXAarBsl=Y9RgPA5y}t9iEa5d6<(eM5&|3S z{%dzy8#7k83|sQYlr}7-{-2xw-Nb>!fe12)SbU!O7qN2Bmem&J`V>tyZfYlXkd;&h z`4nkofyIX?xRdU5IuTeh1*nL2Aw>?(*J+=D0w4yiH7iW8x+y*0mo?ASy*7u(r^Q~S z24MhocRoa`r(%VpxDMayUmAg;)c9 zvvF1pz7Lc5vjXffX!*0qSPak4ttlXzN=$OmZ2cC0&Bj;}+o+aGp^d_GFrrQ{P(e>H z3j4sQQ$WQ)3GeX00u}Q-v9X8FML0X*kxgidRap7Cs3iX9c5g5kV`ylz2f<{sbwkO& z0RjXD!vFu@`}lLsby6yYq5;qF07f_*@Nl#V#7YM%8t_p0|GsdxnMk{x}X{w}8+Aei(ZK;!%)BjnX=; z83Z99$-6aR(d^l2(^S4jROm>uHqDX6FOK{mi|5CtbO>EtA~o#+iZZiZ^|TIf-5!*+d7p_E4^q{(lqMYZJN@8&biae%mRVXWI)rONAVRhP0x}u0`Vt;Rk@l_C+U^Hdsr&6 zhpOG$OV2^A#_6WVUN@4Axi3l5eaT4obzl2Px-UtxlB}frlVq&!OOhl>lJ?PkNs=TZ zN#_0}N%ysnB%}MX=DuXF_a|$&VrI9Eh$C)akgA~SIkSj?M;tuyC)DTvr?ap3s#NWn zcU{Lr5og4^L9{1FNhP^VYFPDeHG9t5?n>{ybf%gAgwsHUae__k5IP4)LmV|7us$)u=8^Pz6ZJ|bf)H6w0ocbtIs%9v8v{= zB5FmP6DLkgR+=djRuY2_uW{#E>-ju7%ndsObr8V1nq}ze47~5*P-L_wx${4`B-#N> zqcsggxJ(CN$$eMudX>AgB>%e9^h!_w3IPEC2EYIu1=rGuBTCat9{?25NQ>FIIc=md z{m!gFLndad*`Kn2dthr37r#{qC3T&CR9&0tU_rctBoOKLQZK zvAneWNRwmhCkzhGi*==S_`>A1VVZPK!Yg~9;XJ}$rDb8LW-e3ylv)%Wu$G|PlveEf z|KSNi9q~FmnB^*`&N#pdvfMdK0W~?pG;)FE5?U>5vOy`NcL3i7;K1WoVC}DV0k6#A z&AEgrjmiGKbRA^`Y4`t^s(ssf0HfG}l-=j6J;|C#w%PJ&!Xja4L=V%q6!Q+ubn} zuX10}8ZR)`!$bWrr!)C)qE7l$E3WLSZ2CG{m(9`DRp9~Q5Sm#0FHNl!k046K>~$#K z>&murib3Sf9EEK3`PKMp^oTSYqG5B3Mwzm32mJrLY<|i)$R^F5Rgse2 z{FyC{CM33(fO-jSKp~N6gvKGU1_IoLbO7F3TLlpW76+{*l<d;+8+AiEk1GhtG&GXHzr2S>9412v z!IV-u%puUgm9Q z-Kv}e6cd!l`6~yRvl;}nBHB9?TUiNXhh@M87zor~1E$V#d{E;Mn^s2($+rI9_a=x3 z8(>Ts=uSTWXt`> zNMd`zDdN(^K|939-An<)&4h)BfLwNobj1GJ;HlY=_;I(R(ZQn93d@Wq2nGrLlkovT zi5Q8@z(}Do8Jn1*F<3Km3rifHK!iwS3YA7@Fj;I4m&X?fMPi9mCRZp`R@OGQcJ>Z1 z7y^aC5l9pogT>(qL=u@IAt@zIrOC+B8FEZ{7Mt$SdOUW4PJJ9$#_yE1oTm_3+x5f9 zx1y}vQc+n|T~nLmqna|dd)xh-gF^~5qCJ@m7P-M(OBH(A8lU^spH4b~TPucIq@o+w z^zvKQv%TG?{akrR10)$~j+%!SywFNryj8kRuA57;r0eI3<%IVh-n;IdFpz;_j~);L z3IiL-f-tDy3HV5hh)W(h;hGmJ4hlo2!}NuIMt_wfB&xjzLTQppHT9_c8GDSCF%6uV zdhe0HeX;VeI6@|mxn-U)U*iOYMx+-AMJ5hM6MZZ$>wvYgZdjiUT9x(OQ9paA)mADO z)q3Muf!Cn{63RFl01rq7fgxb@;2>)RH!KQ;JPT4brMrv>tYRgqXCRxcj5PISwvMR7>;YW7sxn9I8D(+1`Zt{NFT-jUD( z1sm=*sJyLVE>4j>#=5eoj|GjnE~043F`Q1KF2%)Gv4uXt5B&y|>CLmWKe}A^A0)Ej?_c-N83-Hwimi7Zzw^Xs#_9f2?m9ZhjHLMe?cXFV}f(!s1O$mm_mUL4%{Rk{>17}J9qp<K|J7%H?e7a#n~-1kCExIUA4`)-s)%9V z+MoKDd`DzNF%2FnAhfU;Mm&x@I%71m#by$LbubNX33Cnol9%_KCk2(_w6ZC?pOo?( zuNeB)h4ZikLIsysxOjbr{CKVFQF(P!c};c^Sw&;a_K0qs^s?`bck5zbI&4|@4_pw2 z6w_lD&*KYt_ymKe8z~MA&SBJa$L6%p;8Q|Rn#q=m{T3y!m%RDoPrZ2?nuvVMHrdiP z+tdC;I=sw4?g!n_KNUhI*{P#D&1p+=>AiWSlqMN3-_#j)ns z!m=ubrKdC@gmi_JX)?-z??g}aQr~N`0B%;QM~!PX6nU*{M@eM^MF781I1D|Eg%YY@ z1r*i^?FllZLLt0%^nK_BMB^9p3e5;Fe8KM=Fy@ZiX0V?*uldIDk|S>L;ziZqs-joT z>fXat)obA{_v&cbE|*qrF5fn7=MF+Q0y2!?utdNDJP=_Do^VUh1LB}+5JHB2cA1lG zjEpmL0~pSTbM85D@+64{YswMjZ>rQ~lY9O=Od(+nQu@?o5l{CON~!?_Q2#+ow@q7D z(c)_^xYaR;ICfDc!ca`bT&x8y5j$}Z|5QRu)D+P`P^nG@3YFfKQ_sqkG|yE+ zyWU!@6Ej0hK9kxsVA&1Wk}OnBvc9jz$EvYZTK6?l*K08; zi}iK=RKHIENlTl!)9GYW6R~O+CJ(1q&iv|g;t3}=ymkR2&#*vZiC)*Hitm82jBCh) z0U^Q*&i2Ck@$H~*K|j`S`fo>_Egb8rV?Xs!HTvp4Fsv~j2Z#G}7^4^+z`%wa%R$3% zvNqo19=QHBt|~(9u=VzQb?2JXipE^5$(C%n%0jERb{oW$NVZ95=XXn}r08$E*D-=y zop;r*A&}C&)Zg}AACpfF4DMJF$&zt9-j4_=**xetj`+wT%#Ye=jXu2LfQbxQX$*NV zN6xgeB9)FDQYMhQo`-a@SAR;)Ul}WQ9j;N+Rh3n!)`6$)HLnQ>DqmJnp*|FtqbY-N zO?UMxv0Hm@N`B2oOxU%f-23$Ve`MSC{X9NSG6X==4XsI)sK1n%IBHZwfy}IYNS%_`;)9kc zFbT;+t2XJlrG@wdr{@(JzgZM+H87)xhawU?C&l;e6$HL zq`hQM;QeX;1Tco)_KiMm=o4m#j8vzuwyR^lAZ>5iC)L@LHx=KsvW(_#+W=)i8{t)zE?!7SwZ-7+cuw^%GxEL&-emhj6?G^g*SV)NxY>6tULB9mb|b zZSHB;RVy0aDzdK3wn!enSmzKtjIYzc4*lx{9G!dpJ|D_iHmIldEV6J6@Z3R?wlX<* zCO$SV3bm(QS0U}>r%uYJrfkwsDK|B#yswa3LPrfCh`_WccExi%50)ZbSn7yv0W021 zrobemTeNDEF0CN-P)sS_76Di~j(8*F z>sf%=SUA>hiY8GB6=z4zGHusl>j4*FJMLNEl_sig8Et7(ess~3_R<$jO}52*s$u}% z<@)O=Y@AwxU6tY;2IsK{_5qi-UsQ{GFoq?8+UZ$vn&yy{kt*bc8*mW1c^6XV}DSJ;XjEPmJ-7n?2wSB^(nN|G2m+COL&Mfm)BQn!T8W`j%_~U-2d~1tuY> zY1O9JbBu%v#mHXnK|wgnvk;z$BzQv}#jFZUR&fVUbbzEq)3?Z9NbPB{?QAeq9hq=4$z$ z4Jbj&KZ?fZ>%o5^k5IB0U3<;Mcjw(+3L`$nF5g@_O!^0Wfb;lLL)No<4Ps7b)4V*9 zI%cl}qJ{V(&&GM#9Wq*!-b)?6t7HDKWv-T=lhX{ZSuRmWYg{X#LOO~?S1An@4tg?D z8}IhQ7~v}RnRMcE-*toe|3h#oa-I3hyzS0|=<1jP?65Ff;h^>3Xoqx?tQ=X3<6Tla zc-=auAn9(g3C~32Ovp-m^Y^2W-(RCdX}h)Do&ZVNv)|DPSijDG(p|PVvuDyjUhA0b*p|HxNEb4S%o~TZJ7nzNBCDRhc6E#m77}xJ3uptU&L>)S z*n`O+k%zW8a|tFua~g`$yq|HlH2o>b%CuCC(;wwErPNfO=asaI2~3OdGF-3MX!J3U zdgIK(++qu4``$#RfG0^!t2TALHiq3JGLL$r+*|YnjL>=@9}=EVVEj5gmDe;#eatTP zC^70Wibm%WDi9Sxg8DiFPIUf$-7GskX_xAD*g!APFoKeCok~n{P4_If~$9Z zB{JgA+F4q-+4Mh%ISnD}+0}^WK}~C#>huKE(EbTf45{jkS{rI%cF1_vCWUWT$9%=+ zx%8RIZ%`Rh5v)U;yz*a2Q>J=Qx7K)lDWn!$8?6V*q1_^?Io5Y6wFX%-P9F=@x;Kka zLHXBTZStoWn8THB4en`un3C91_Qo-|L_jw3GFBriG?b`$q^_&7kmR0r>txrGvd<*E zK@uce$eJdvC+2juO)6bytOsf#3dF@&-zL$JYj&=*U&vc6bCt+6Tu;|iLeV_i2^E@A zy?h!t78Je$@Lf2aj-U=&4VA@1*-`>6#(r>7z=w`~ zv7&O1dxB>2fDwji;W%`xG?+Tm3gkoVHKqg{e-=r3*ZA1{qFE!d1zLCp*#vsR=Ke#g zHg(3$?XHJ=z^EN>Ysak~=!8-Q6ByrhzmV`ac^Ajq$+qy56$9Mg(Z%PsYkIJ1s+mCg zb0{mUvY-a2J59$?o+SZi8m<9dUfFRf3S&+xWrS@Gwpc~0zz{?2#4&$z<(tbyLuhZ% z5U-G~pLTCQjhEr{NmwHGx}RJ~b1B#sED|I2_*{kI{BgHD$?Kp?UHayPq640g%;ibn zd4GZ0T5jJl7f@dTKFPQMn2n&1nOb_>#WppuSI1{4hoK&xp?3l-^17{o z+ZfZL;#%`hUeDPUSm04I1u6g<2_8sb zo+OCA+Kk(*yR`XqKW$Cd!}@(vyUY~s_)`z8LW#fx#;;rR(z<@J$wtb(O)Mo&MW_ho zYe=yk+`a-<3UL9j0av}};@7g>!i7mYBd$`acf732{3*Pxq&NfHb*&-`{5W_HqCs>9 z5Em+gpDdR?_MOXQX@74C?8oJ*Zt^Jd)3%VpfDnZ+EtbEtyl=IMsm&`(-gRq}Jq7kN z6+BHBFoBArTu6(3eOR`@0S}T*pc6KNqE(x^J{xhT9z-7*iNe%zvj>hf;h4bqF7Zt4 z{a_+uhr%7A@O^z~3xX(UF_=WMdN^17buJZX_^A6ANC?6$S<`r>=Rt^5+W3pobmm+> zh29M^P6oiQ<2#xe^t15|-=-QZ(b>+_mw=~2FC$A_;ZJ%x%uP7^ zE&bWqKb{9}osh=*{T>)K543HpQQF*mZc`PLH|#BK?zRfXd_gi7I&qU|mM%$n=FR)IAwVhr2D`BYXjS@0l>^_gFw8W6LnUl0Mk}S~pKM ztC0^TBhF+TIhN=9W+r+B3>8BDOLbsS_GZrE-`<;6pCGH*Yq0_!`NS2Rr59n&04PBeNW%1rpo)`G%WVtX_0dm4N?iIm;&g%}Q&3Mf<1Ve*)HT|S!5+c*oH)9Vqr2lz zJ@60`o=;%>9agzCjgUS+6-elPVwBZO&q>x&}2EhCDcLL6=u)jmE=i!{|OCX(x+QOGC=zz?rD9Wxg3k5VKSaliIOuEE8 zff5S)h5(Ds%@%mU7isNsn1tOrb;-nPhxFVnkV(TufRgJxz^Y2NlPp{SypDLewRR4h zYzUn(v7|IDNvPn+$fE7!ui9Ntj`I!B@>zmv15 zgp{u&3&i#X7XTl4m$kLgE0ojEEnMqWme$n?6Ef#h#nM{n#3VxpSX$Xk=+fr#rHx{T zjB_?`k6pvBWB3l$7xHmY!5cXi)@-5O6>Ekv?fkgwMP3{=yA~qV^5OGxZA!r z;?pFXw`?{d$0amQksMHxe?eG>tp~n=!C|al*VweRDM!4RY}9jlVo7PbHwYEp(TuWt z1ZhLCugLPo?hh_7U?x7LWqM%ngiZGw@EU{fw74GiknREUnPe3g!WvHu+LL?sbcLtg z6`FC?Jq@O%Y28v9mouTGJ)qScW?TjSd;RxW9B;uWy9&T=DYk`&@?t>FMOyt^erwH~ znorT|S>4!tb9m*});ytQa|1?ycL}DNV~N!Qf9~pf1ZmD^G&?pC#R5g;iE%yyHeBR7OrKV!_P-z{bF+4DOH#ll?~0j5RV$iJzoK%@Q?@7B4?K~Fp43Z zGJiaGQGc^7Ft6`N@s#xw$4>~}Q}=+XFF8IWYf^30gViglioio_8m4$+ygUq8&!|gA zxUq7Hbtt!d&5LSL6%irz z`b||(k5nQ?3u2Yh@u41A7}|+p#XIZQR_)TnYQtB$iT1!v1@ThL-C=-y_j+|* zt9?cXn2;#IYluN=-KLY>^GK&XrM1qwqFcSvt5<|Jo%e97+cjR!m!e)By%(%=9d-ot zdSn#dfk~i!9&!rj6PAGu&Yz+zKhAPP;Iwt^rh{^Y->?NN1-D{(NT13504tZ}C@0mt zt?YrNC~qEx=LP|>lxR@GY008vnLL#k`-^~=tXn12SyQPVSee0SazpmK?(TbKdhMdda-(hNSLipmN>~@yVK$yCr6E zRz+Y%E9OCIRf(CqemC+**xKwXn!TI`m|Kv%YT0qj??cD^nDsYIyN8zjMEo6t?oJAG zDjg?5Z&HDpyf+_sA(za=*JX8o4=Ou*{UuqGvhZYRh`-=L1v7|zr7w?!S<3Z8BkW~? zmArEX%>2mms-?$aM&Y(gXF>x#VYhoh23 z$v%@cDRJv+^%j8@napt869MfmN#o>5O|=I>k-QgFDD;x0weU6ET3B6bHNSQ~2C0^W zk{VH6DW)4LN5bWFVq$5lBvC$jti6INFmZu~%bQ-g^OPJWbAc~yE}ZL_{o!tLPSP1r zu_A54v{x5U2PS5KE_c;UrtPU~kWe(=kx2orm6glM(! zC=3>rnev7oBa*Eg$Bc}9sMKk&>nQ6!^2yW za^yE_FQ>cL>IlqBLI>u&a1hUpF|M!a=lbmhX011vrqhq=9$fIevm3hd1`ZSwM7On z26{V`?PFzDz9I@I3(%XO0@>}~lT7{w)HJ9Yp}&Q``If#2Wi%@=`Wk413u3auoq221H zGU&$DuE!J5SE2l-1nIyvbp~e4|1Y8F#?s8bnC?v5!83UTx?6zq(0L~#l-66W+g)_& zJ{QZ~bvB^S2HC~^x7D|dRzY`8$fsGz!Z=m#p_&zu&pk3tfcx3*P8)P7Np9Npa-rHVr4{R6A)-sWV?zz@gmW(JkUTiyYd`_ATimL%L3u>`7fn zg?hS}qn@i0=RS$ziHfjG!#Ttg;_P>u76zGCQP@olRW6>GLga^%p9(0~DdEhQ5fotJ zf%gbP$dvT> zJKBlf#HKSz<5hVa!A_+k?4oER5_|)QFu7q(q+?1*@P$pa(H1rE2~Y9!AVL(0$+xJt z{VsNE``L0D-pH|QL^^6TQiMIbFomfh2Fa)W+K_wzG|36hbibm;}h z`On2JBp`l3CDei#)Bs^)z!b1{z{fY;v5zEc8o)rUU+-Z+I6$b0$SVM}C1rq((Exs* zFu6K7Mzu(p9GEabn)u&K!4Ny)O;L(-ID(vyI6v|yW2T1Y^kl3Lee4Tg+2)8QTnjf> zcFIwCC@+=UieBsEHY|c*%_(7UzEL-5>b;qlS+ZC5Rdh zLrk#70R$~N+(6Kvv-{Z*KeA~0=1(1-S|n(|fGJB_icNO7;FedtDA(m)?%$G*EM!%y zqpl{JYNM^*o_cFx=8@lxKKNp3%g_DVjo)8C^e6blq{ah;)PHXct^L=o5A!jxknf`5}RwGeE!h z94XYHUVT#ExaUPsNc;Q#7+r)ckx&oKHt+P|+3)$)Zyq~;-htrHqio`zW(@2T0D})) z0dLBnW*6}f^f3%90&oisn^?#!W-^MAMD2xp)}K^PH3UGPy&=x&IsIJduu0zoOisEc zs63@h+8z7du4}TZx{Dt#wcDsGwd+CG!>*g%Apnzi>E;12@pVAHiFebrFX_zg%<7Eo zT-}-2xh$GBVLkwiTe6|~Xdar2=AhZ=Z?yT>bJMnvw#9AAHffuv4R)vB`bYLuO0l~~ zS-iNelNhPLhCP6-EtLTL+{SfX6Pw(WrtAZXSy}(~w{`p>QT^lOt(>@3O z&vJ3YovUQ+0(!Xq#jYiG`~6vqRtaGH!>w^lZ4a+9^fddD*yqGPUD?Mg`|yTFKcbO* z+=!bRT9XXf?rXF*)P_3KZd_(WlW9>VzY8)g8FrJkPg1LGj5!WCG6xsDKLssw2~osR z_p{BCCQYzDvFv+yH@eeDD%65{ut>Uk$~F#hn3J641~<9KL*DS7k6<}i0s5FWMqs)a zO^n4%;u4?au(L@5U#%|WqXcw`8%;K~sI0br`!CHFEm)|&TGqE+Aus(I=ri{=MjU^a zzGP@AlQv;ff@?--(V$5e1%Zl=4ExD%h8X{|-PY&MSENwkmWkK`md)0G7Tf<kc7?%6YDS&Yt56QeD@q)k;QZI=-!tC&^wY>$Gn(mE)=jGXeeR>4zPLvbxdHE$DGztj$3xT`8tg2z~X#3nDAgs~Bv+j*A1 zI~@(`xx;x>SxT~xWR-`!K4_V6sR0z zSFqh7_JrCSW?#7d5e`JkZFDfop=gI=N`+=Lrx8tPN@Eqj^6}ZbRE8Oiih31*=RtqfkfSI1K%!6ImgeH~k2gmf$m#T5#245HA zI8K7Es)3VnP57o1TnpERjW+qt_r7(LGDsXwjYuf9+tdoVOsUfI1!9X;XEJNuE+Y(w z#h_701fD{r!AJH)$9aodHUQx74Ig}vuH8Rq0UL%4n3^yhxq0^NuBJOnhlZZqxg)}6 zbz{`d|tI!mg3xs(9`e6cB&EP zaHUa>Qz9b4ym{0jQk%h8`{_~nO;O(zp+MJC_&6-brVgq%&ZKFlV#tT6+3CDhBO~Fv zXH4<7ISl=0yC>I+XC_1J3;eWF z#W<=W;xTH^MQqEhsgDi|=?TWFk>EKM@al=wdp|QG$>ChR0NQ1gedVPCOjV5PaLUG} z-VhsYwv$pv>OX_$%eIww)-WB?l&NN7&}gI3odmRGe8Q`7C5HzwFE*$Uv*`ZSs8@kS zS)r;iQb!U#I%0^XY+w>+B;k(IrP!^fZg#x{P23NA{(_B~IZ{NC(vy%PuJFw4v?RTH zkpoH`t9hJ+a?GGHD`(CPz?hUtzn7M^0bZ?98!uSL5Lwk; z@blbtWI&P#Lq2E5mxTIA2BA;oY^=DTlR1Qm{j5IdHyD9Q>K`u>)T<-Mi@A_ZqZ?1r zZ|aJpz>DedVz$L+?95rTFOkVP@6P-3NcIGe@C;=>505BY2pLyF+f>M|i(|~!qkD}- zCW}^)d{Yb#$aQ5)7Oh|d-Pr(P5vW4Kw_=9h+C>PDz9q=w)+)3zQEPL7T)p%dsHd;k z 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 ZH%!*s!SPS|M`-=XHCdh5#)d9+0RWdog`ofd literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Italic.woff2 b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..828c42961422928231579cb0f3271791a4e20ce4 GIT binary patch literal 54448 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 literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Light.woff2 b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Light.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ed3e844b1ec083c035b1273c6033c774c39e6c3c GIT binary patch literal 51288 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 pU6jqgG(+LW2nq`J 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

ZsZuDujQat=O%!xA-LiI6`gYGwHwkMGsJ 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 JZP)++007z)3cLUS literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..520befdb2b1a6717b6ab7ce6cc2fe95566d5e57a GIT binary patch literal 52100 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�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 VkvI4A literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e57de0b1bcdb1115e3e61d86a09041c2513f86f7 GIT binary patch literal 50800 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%0Ag#9Nn(8{1a07$IJXHeH_&)22GSob=5pusY#{I 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 literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/codicon.ttf b/jupyter/viewOnly/resources/jupyter-view-only/assets/fonts/codicon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..90ace76ff74d8fefeaca496859d954dea38f0cc9 GIT binary patch literal 56484 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�=qye-w{FJ~3+`oWMv;hvw74u%WgrDNFeV9#2QXO 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 z zYR7s<=m}r~pq7TFRGQ_qW2qtB)XaEFO@f~`$NQ9aj5^LFR;$KFsJ|P=AhIy&aKWyi zv1A#WN>7eVpg+swBBvOenoMcNQwR7%)A0uHRJw5htx^YQR#S{;uuTS?cd)lVWuW^U zoycN{rw$l0*`eO?k;D9))e{&ky+bL@L@z{3fA6>oPaHR1oERBbOkjB8WopQXuVVVg zmD9Yg&hN-Fk;QCF-8h;%e~Ru%-r!K87v@qL-U)G`%JZjiGWsm;7In1)cnG*Z{66RO z7+|=yQ9Rh34*d(yV!R)d9-27huriw(N*y$lP=O`|5r7Fal~u{h{B1vWoWhAhoIy0; zd%TVBO{5QDhZ7mn7{*iB1)77IEVi4N$_>+(`0{9K0B3_XjhsR&H>{v_H~>u`_%6Sc z!i=oS;yI@#ZP`o)JxLzUa!1ymwMxw9a*FI!-yuz|7k7wGPHyBB^sdigP~)Kt;;_bi z8=Y*dH?7ZMboCEM(JLlYavN{B`B`HwHHjH)C>JFOp(!k>a>FC3^nf}Cu?&4o!`~rR zRXOThhs-%#13moy)BxRFQ!X<_w}B?EY$k2VO{5_>&WvA^yrMAXG6lj$D{`eTag^I(Fo#{4H^ zsmbBY{7%L&RTVbGi9lECFPtbIG_3ASwr~u{UH*7bkm%G?Tr#QIb?z82BluFB2)W z4q}Rc60DmXMvsEVkj&^y^btUE9~GMUOjVx`bT$BNPuRLN3NOYP_ZOkC>2 QnamiC1OATvE?DsY05TnBRR910 literal 0 HcmV?d00001 diff --git a/jupyter/viewOnly/resources/jupyter-view-only/datalore.svg b/jupyter/viewOnly/resources/jupyter-view-only/datalore.svg new file mode 100644 index 000000000000..f2c6c2a03031 --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/datalore.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jupyter/viewOnly/resources/jupyter-view-only/dataspell.svg b/jupyter/viewOnly/resources/jupyter-view-only/dataspell.svg new file mode 100644 index 000000000000..473363efa4f0 --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/dataspell.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jupyter/viewOnly/resources/jupyter-view-only/editor.min.js b/jupyter/viewOnly/resources/jupyter-view-only/editor.min.js new file mode 100644 index 000000000000..af0e8476da96 --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/editor.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,(function(e){"use strict";function t(e,t,...i){return function n(e,t){return 0===t.length?e:e.replace(/\{(\d+)\}/g,(function(e,i){const n=i[0];return void 0!==t[n]?t[n]:e}))}(t,i)}const i=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{if(e.stack)throw new Error(e.message+"\n\n"+e.stack);throw e},0)}}emit(e){this.listeners.forEach(t=>{t(e)})}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}};function n(e){a(e)||i.onUnexpectedError(e)}function o(e){a(e)||i.onUnexpectedExternalError(e)}function s(e){if(e instanceof Error){let{name:t,message:i}=e;return{$isError:!0,name:t,message:i,stack:e.stacktrace||e.stack}}return e}const r="Canceled";function a(e){return e instanceof Error&&e.name===r&&e.message===r}function l(){const e=new Error(r);return e.name=e.message,e}function h(e){return e?new Error(`Illegal argument: ${e}`):new Error("Illegal argument")}var c;!function(e){e.is=function t(e){return e&&"object"==typeof e&&"function"==typeof e[Symbol.iterator]};const i=Object.freeze([]);e.empty=function n(){return i},e.single=function*o(e){yield e},e.from=function s(e){return e||i},e.isEmpty=function r(e){return!e||!0===e[Symbol.iterator]().next().done},e.first=function a(e){return e[Symbol.iterator]().next().value},e.some=function l(e,t){for(const i of e)if(t(i))return!0;return!1},e.find=function h(e,t){for(const i of e)if(t(i))return i},e.filter=function*c(e,t){for(const i of e)t(i)&&(yield i)},e.map=function*d(e,t){for(const i of e)yield t(i)},e.concat=function*u(...e){for(const t of e)for(const e of t)yield e},e.concatNested=function*g(e){for(const t of e)for(const e of t)yield e},e.reduce=function p(e,t,i){let n=i;for(const i of e)n=t(n,i);return n},e.slice=function*m(e,t,i=e.length){for(t<0&&(t+=e.length),i<0?i+=e.length:i>e.length&&(i=e.length);to}]},e.equals=function _(e,t,i=((e,t)=>e===t)){const n=e[Symbol.iterator](),o=t[Symbol.iterator]();for(;;){const e=n.next(),t=o.next();if(e.done!==t.done)return!1;if(e.done)return!0;if(!i(e.value,t.value))return!1}}}(c||(c={}));let d=null;function u(e){d&&d.markTracked(e)}function g(e){return d?(d.trackDisposable(e),e):e}class p extends Error{constructor(e){super(`Encountered errors while disposing of store. Errors: [${e.join(", ")}]`),this.errors=e}}function m(e){return"function"==typeof e.dispose&&0===e.dispose.length}function f(e){if(c.is(e)){let t=[];for(const i of e)if(i){u(i);try{i.dispose()}catch(e){t.push(e)}}if(1===t.length)throw t[0];if(t.length>1)throw new p(t);return Array.isArray(e)?[]:e}if(e)return u(e),e.dispose(),e}function _(...e){return e.forEach(u),b(()=>f(e))}function b(e){const t=g({dispose:()=>{u(t),e()}});return t}class v{constructor(){this._toDispose=new Set,this._isDisposed=!1}dispose(){this._isDisposed||(u(this),this._isDisposed=!0,this.clear())}clear(){try{f(this._toDispose.values())}finally{this._toDispose.clear()}}add(e){if(!e)return e;if(e===this)throw new Error("Cannot register a disposable on itself!");return u(e),this._isDisposed?v.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(e),e}}v.DISABLE_DISPOSED_WARNING=!1;class C{constructor(){this._store=new v,g(this)}dispose(){u(this),this._store.dispose()}_register(e){if(e===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(e)}}C.None=Object.freeze({dispose(){}});class w{constructor(){this._isDisposed=!1,g(this)}get value(){return this._isDisposed?void 0:this._value}set value(e){var t;this._isDisposed||e===this._value||(null===(t=this._value)||void 0===t||t.dispose(),e&&u(e),this._value=e)}clear(){this.value=void 0}dispose(){var e;this._isDisposed=!0,u(this),null===(e=this._value)||void 0===e||e.dispose(),this._value=void 0}}class y{constructor(e){this.object=e}dispose(){}}class S{constructor(e){this.element=e,this.next=S.Undefined,this.prev=S.Undefined}}S.Undefined=new S(void 0);class L{constructor(){this._first=S.Undefined,this._last=S.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===S.Undefined}clear(){this._first=S.Undefined,this._last=S.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const i=new S(e);if(this._first===S.Undefined)this._first=i,this._last=i;else if(t){const e=this._last;this._last=i,i.prev=e,e.next=i}else{const e=this._first;this._first=i,i.next=e,e.prev=i}this._size+=1;let n=!1;return()=>{n||(n=!0,this._remove(i))}}shift(){if(this._first!==S.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==S.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==S.Undefined&&e.next!==S.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===S.Undefined&&e.next===S.Undefined?(this._first=S.Undefined,this._last=S.Undefined):e.next===S.Undefined?(this._last=this._last.prev,this._last.next=S.Undefined):e.prev===S.Undefined&&(this._first=this._first.next,this._first.prev=S.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==S.Undefined;)yield e.element,e=e.next}}var D;let E=!1,x=!1,k=!1,N=!1,I=!1,T=!1,A=!1,M=void 0,O=void 0,R=void 0;const P="object"==typeof self?self:"object"==typeof global?global:{};let F=void 0;"undefined"!=typeof process?F=process:void 0!==P.vscode&&(F=P.vscode.process);const B="string"==typeof(null===(D=null==F?void 0:F.versions)||void 0===D?void 0:D.electron)&&"renderer"===F.type,W=B&&(null==F?void 0:F.sandboxed),V="string"==typeof(()=>{if(W)return"bypassHeatCheck";const e=null==F?void 0:F.env.ENABLE_VSCODE_BROWSER_CODE_LOADING;return"string"==typeof e?"none"===e||"code"===e||"bypassHeatCheck"===e||"bypassHeatCheckAndEagerCompile"===e?e:"bypassHeatCheck":void 0})();if("object"!=typeof navigator||B)if("object"==typeof F){E="win32"===F.platform,x="darwin"===F.platform,N=(k="linux"===F.platform)&&!!F.env.SNAP&&!!F.env.SNAP_REVISION,M="en";const e=F.env.VSCODE_NLS_CONFIG;if(e)try{const t=JSON.parse(e);M=t.locale,O=t._translationsConfigFile}catch(e){}I=!0}else console.error("Unable to resolve platform.");else E=(R=navigator.userAgent).indexOf("Windows")>=0,x=R.indexOf("Macintosh")>=0,A=(R.indexOf("Macintosh")>=0||R.indexOf("iPad")>=0||R.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,k=R.indexOf("Linux")>=0,T=!0,M=navigator.language;const z=E,H=x,U=k,K=I,$=T,j=A,q=R,G=P,Y=function e(){if(G.setImmediate)return G.setImmediate.bind(G);if("function"==typeof G.postMessage&&!G.importScripts){let e=[];G.addEventListener("message",t=>{if(t.data&&t.data.vscodeSetImmediateId)for(let i=0,n=e.length;i{const n=++t;e.push({id:n,callback:i}),G.postMessage({vscodeSetImmediateId:n},"*")}}if(F&&"function"==typeof F.nextTick)return F.nextTick.bind(F);const t=Promise.resolve();return e=>t.then(e)}(),Z=x||A?2:E?1:3;let X=!0,Q=!1;function J(){if(!Q){Q=!0;const e=new Uint8Array(2);e[0]=1,e[1]=2;const t=new Uint16Array(e.buffer);X=513===t[0]}return X}const ee=G.performance&&"function"==typeof G.performance.now;class te{constructor(e){this._highResolution=ee&&e,this._startTime=this._now(),this._stopTime=-1}static create(e=!0){return new te(e)}stop(){this._stopTime=this._now()}elapsed(){return-1!==this._stopTime?this._stopTime-this._startTime:this._now()-this._startTime}_now(){return this._highResolution?G.performance.now():Date.now()}}var ie;!function(e){function t(e){return(t,i=null,n)=>{let o,s=!1;return o=e(e=>{if(!s)return o?o.dispose():s=!0,t.call(i,e)},null,n),s&&o.dispose(),o}}function i(e,t){return r((i,n=null,o)=>e(e=>i.call(n,t(e)),null,o))}function n(e,t){return r((i,n=null,o)=>e(e=>{t(e),i.call(n,e)},null,o))}function o(e,t){return r((i,n=null,o)=>e(e=>t(e)&&i.call(n,e),null,o))}function s(e,t,n){let o=n;return i(e,e=>o=t(o,e))}function r(e){let t;const i=new oe({onFirstListenerAdd(){t=e(i.fire,i)},onLastListenerRemove(){t.dispose()}});return i.event}function a(e,t,i=100,n=!1,o){let s,r=void 0,a=void 0,l=0;const h=new oe({leakWarningThreshold:o,onFirstListenerAdd(){s=e(e=>{l++,r=t(r,e),n&&!a&&(h.fire(r),r=void 0),clearTimeout(a),a=setTimeout(()=>{const e=r;r=void 0,a=void 0,(!n||l>1)&&h.fire(e),l=0},i)})},onLastListenerRemove(){s.dispose()}});return h.event}function l(e){let t,i=!0;return o(e,e=>{const n=i||e!==t;return i=!1,t=e,n})}e.None=()=>C.None,e.once=t,e.map=i,e.forEach=n,e.filter=o,e.signal=function h(e){return e},e.any=function c(...e){return(t,i=null,n)=>_(...e.map(e=>e(e=>t.call(i,e),null,n)))},e.reduce=s,e.snapshot=r,e.debounce=a,e.stopwatch=function d(e){const n=(new Date).getTime();return i(t(e),e=>(new Date).getTime()-n)},e.latch=l,e.buffer=function u(e,t=!1,i=[]){let n=i.slice(),o=e(e=>{n?n.push(e):r.fire(e)});const s=()=>{n&&n.forEach(e=>r.fire(e)),n=null},r=new oe({onFirstListenerAdd(){o||(o=e(e=>r.fire(e)))},onFirstListenerDidAdd(){n&&(t?setTimeout(s):s())},onLastListenerRemove(){o&&o.dispose(),o=null}});return r.event};class g{constructor(e){this.event=e}map(e){return new g(i(this.event,e))}forEach(e){return new g(n(this.event,e))}filter(e){return new g(o(this.event,e))}reduce(e,t){return new g(s(this.event,e,t))}latch(){return new g(l(this.event))}debounce(e,t=100,i=!1,n){return new g(a(this.event,e,t,i,n))}on(e,t,i){return this.event(e,t,i)}once(e,i,n){return t(this.event)(e,i,n)}}e.chain=function p(e){return new g(e)},e.fromNodeEventEmitter=function m(e,t,i=(e=>e)){const n=(...e)=>o.fire(i(...e)),o=new oe({onFirstListenerAdd:()=>e.on(t,n),onLastListenerRemove:()=>e.removeListener(t,n)});return o.event},e.fromDOMEventEmitter=function f(e,t,i=(e=>e)){const n=(...e)=>o.fire(i(...e)),o=new oe({onFirstListenerAdd:()=>e.addEventListener(t,n),onLastListenerRemove:()=>e.removeEventListener(t,n)});return o.event},e.fromPromise=function b(e){const t=new oe;let i=!1;return e.then(void 0,()=>null).then(()=>{i?t.fire(void 0):setTimeout(()=>t.fire(void 0),0)}),i=!0,t.event},e.toPromise=function v(e){return new Promise(i=>t(e)(i))}}(ie||(ie={}));class ne{constructor(e){this._listenerCount=0,this._invocationCount=0,this._elapsedOverall=0,this._name=`${e}_${ne._idPool++}`}start(e){this._stopWatch=new te(!0),this._listenerCount=e}stop(){if(this._stopWatch){const e=this._stopWatch.elapsed();this._elapsedOverall+=e,this._invocationCount+=1,console.info(`did FIRE ${this._name}: elapsed_ms: ${e.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`),this._stopWatch=void 0}}}ne._idPool=0;class oe{constructor(e){var t;this._disposed=!1,this._options=e,this._leakageMon=void 0,this._perfMon=(null===(t=this._options)||void 0===t?void 0:t._profName)?new ne(this._options._profName):void 0}get event(){return this._event||(this._event=(e,t,i)=>{var n;this._listeners||(this._listeners=new L);const o=this._listeners.isEmpty();o&&this._options&&this._options.onFirstListenerAdd&&this._options.onFirstListenerAdd(this);const s=this._listeners.push(t?[e,t]:e);o&&this._options&&this._options.onFirstListenerDidAdd&&this._options.onFirstListenerDidAdd(this),this._options&&this._options.onListenerDidAdd&&this._options.onListenerDidAdd(this,e,t);const r=null===(n=this._leakageMon)||void 0===n?void 0:n.check(this._listeners.size);let a;return a={dispose:()=>{r&&r(),a.dispose=oe._noop,!this._disposed&&(s(),this._options&&this._options.onLastListenerRemove)&&(this._listeners&&!this._listeners.isEmpty()||this._options.onLastListenerRemove(this))}},i instanceof v?i.add(a):Array.isArray(i)&&i.push(a),a}),this._event}fire(e){var t,i;if(this._listeners){this._deliveryQueue||(this._deliveryQueue=new L);for(let t of this._listeners)this._deliveryQueue.push([t,e]);for(null===(t=this._perfMon)||void 0===t||t.start(this._deliveryQueue.size);this._deliveryQueue.size>0;){const[e,t]=this._deliveryQueue.shift();try{"function"==typeof e?e.call(void 0,t):e[0].call(e[1],t)}catch(e){n(e)}}null===(i=this._perfMon)||void 0===i||i.stop()}}dispose(){var e,t,i;null===(e=this._listeners)||void 0===e||e.clear(),null===(t=this._deliveryQueue)||void 0===t||t.clear(),null===(i=this._leakageMon)||void 0===i||i.dispose(),this._disposed=!0}}oe._noop=function(){};class se extends oe{constructor(e){super(e),this._isPaused=0,this._eventQueue=new L,this._mergeFn=null==e?void 0:e.merge}pause(){this._isPaused++}resume(){if(0!==this._isPaused&&0==--this._isPaused)if(this._mergeFn){const e=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(e))}else for(;!this._isPaused&&0!==this._eventQueue.size;)super.fire(this._eventQueue.shift())}fire(e){this._listeners&&(0!==this._isPaused?this._eventQueue.push(e):super.fire(e))}}class re{constructor(){this.buffers=[]}wrapEvent(e){return(t,i,n)=>e(e=>{const n=this.buffers[this.buffers.length-1];n?n.push(()=>t.call(i,e)):t.call(i,e)},void 0,n)}bufferEvents(e){const t=[];this.buffers.push(t);const i=e();return this.buffers.pop(),t.forEach(e=>e()),i}}class ae{constructor(){this.listening=!1,this.inputEvent=ie.None,this.inputEventListener=C.None,this.emitter=new oe({onFirstListenerDidAdd:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onLastListenerRemove:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(e){this.inputEvent=e,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=e(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}class le{constructor(){this._zoomLevel=0,this._lastZoomLevelChangeTime=0,this._onDidChangeZoomLevel=new oe,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event,this._zoomFactor=1}getZoomLevel(){return this._zoomLevel}getTimeSinceLastZoomLevelChanged(){return Date.now()-this._lastZoomLevelChangeTime}getZoomFactor(){return this._zoomFactor}getPixelRatio(){let e=document.createElement("canvas").getContext("2d");return(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1)}}function he(){return le.INSTANCE.getZoomLevel()}function ce(e){return le.INSTANCE.onDidChangeZoomLevel(e)}function de(){return le.INSTANCE.getPixelRatio()}le.INSTANCE=new le;const ue=navigator.userAgent,ge=ue.indexOf("Firefox")>=0,pe=ue.indexOf("AppleWebKit")>=0,me=ue.indexOf("Chrome")>=0,fe=!me&&ue.indexOf("Safari")>=0,_e=!me&&!fe&&pe,be=ue.indexOf("iPad")>=0||fe&&navigator.maxTouchPoints>0,ve=ue.indexOf("Edge/")>=0&&ue.indexOf("WebView/")>=0,Ce=ue.indexOf("Electron/")>=0,we=ue.indexOf("Android")>=0,ye=window.matchMedia&&window.matchMedia("(display-mode: standalone)").matches;function Se(e){return"string"==typeof e}function Le(e){return!("object"!=typeof e||null===e||Array.isArray(e)||e instanceof RegExp||e instanceof Date)}function De(e){return"number"==typeof e&&!isNaN(e)}function Ee(e){return!0===e||!1===e}function xe(e){return void 0===e}function ke(e){return xe(e)||null===e}function Ne(e,t){if(!e)throw new Error(t?`Unexpected type, expected '${t}'`:"Unexpected type")}function Ie(e){if(ke(e))throw new Error("Assertion Failed: argument is undefined or null");return e}function Te(e){return"function"==typeof e}function Ae(e,t){if(Se(t)){if(typeof e!==t)throw new Error(`argument does not match constraint: typeof ${t}`)}else if(Te(t)){try{if(e instanceof t)return}catch(e){}if(!ke(e)&&e.constructor===t)return;if(1===t.length&&!0===t.call(void 0,e))return;throw new Error("argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true")}}function Me(e){const t=[];for(const i of function i(e){let t=[],i=Object.getPrototypeOf(e);for(;Object.prototype!==i;)t=t.concat(Object.getOwnPropertyNames(i)),i=Object.getPrototypeOf(i);return t}(e))"function"==typeof e[i]&&t.push(i);return t}function Oe(e,t){const i=e=>(function(){const i=Array.prototype.slice.call(arguments,0);return t(e,i)});let n={};for(const t of e)n[t]=i(t);return n}function Re(e){return null===e?void 0:e}let Pe;const Fe=(Pe="undefined"!=typeof process?process:void 0!==G.vscode?{get platform(){return G.vscode.process.platform},get env(){return G.vscode.process.env},nextTick:e=>Y(e),cwd:()=>G.vscode.process.env.VSCODE_CWD||G.vscode.process.execPath.substr(0,G.vscode.process.execPath.lastIndexOf("win32"===G.vscode.process.platform?"\\":"/"))}:{get platform(){return z?"win32":H?"darwin":"linux"},nextTick:e=>Y(e),get env(){return Object.create(null)},cwd:()=>"/"}).cwd,Be=Pe.env,We=Pe.platform,Ve=65,ze=97,He=90,Ue=122,Ke=46,$e=47,je=92;class qe extends Error{constructor(e,t,i){let n;"string"==typeof t&&0===t.indexOf("not ")?(n="must not be",t=t.replace(/^not /,"")):n="must be";const o=-1!==e.indexOf(".")?"property":"argument";let s=`The "${e}" ${o} ${n} of type ${t}`;super(s+=`. Received type ${typeof i}`),this.code="ERR_INVALID_ARG_TYPE"}}function Ge(e,t){if("string"!=typeof e)throw new qe(t,"string",e)}function Ye(e){return e===$e||e===je}function Ze(e){return e===$e}function Xe(e){return e>=Ve&&e<=He||e>=ze&&e<=Ue}function Qe(e,t,i,n){let o="",s=0,r=-1,a=0,l=0;for(let h=0;h<=e.length;++h){if(h2){const e=o.lastIndexOf(i);-1===e?(o="",s=0):s=(o=o.slice(0,e)).length-1-o.lastIndexOf(i),r=h,a=0;continue}if(0!==o.length){o="",s=0,r=h,a=0;continue}}t&&(o+=o.length>0?`${i}..`:"..",s=2)}else o.length>0?o+=`${i}${e.slice(r+1,h)}`:o=e.slice(r+1,h),s=h-r-1;r=h,a=0}else l===Ke&&-1!==a?++a:a=-1}return o}function Je(e,t){if(null===t||"object"!=typeof t)throw new qe("pathObject","Object",t);const i=t.dir||t.root,n=t.base||`${t.name||""}${t.ext||""}`;return i?i===t.root?`${i}${n}`:`${i}${e}${n}`:n}const et={resolve(...e){let t="",i="",n=!1;for(let o=e.length-1;o>=-1;o--){let s;if(o>=0){if(Ge(s=e[o],"path"),0===s.length)continue}else 0===t.length?s=Fe():(void 0===(s=Be[`=${t}`]||Fe())||s.slice(0,2).toLowerCase()!==t.toLowerCase()&&s.charCodeAt(2)===je)&&(s=`${t}\\`);const r=s.length;let a=0,l="",h=!1;const c=s.charCodeAt(0);if(1===r)Ye(c)&&(a=1,h=!0);else if(Ye(c))if(h=!0,Ye(s.charCodeAt(1))){let e=2,t=e;for(;e2&&Ye(s.charCodeAt(2))&&(h=!0,a=3));if(l.length>0)if(t.length>0){if(l.toLowerCase()!==t.toLowerCase())continue}else t=l;if(n){if(t.length>0)break}else if(i=`${s.slice(a)}\\${i}`,n=h,h&&t.length>0)break}return i=Qe(i,!n,"\\",Ye),n?`${t}\\${i}`:`${t}${i}`||"."},normalize(e){Ge(e,"path");const t=e.length;if(0===t)return".";let i,n=0,o=!1;const s=e.charCodeAt(0);if(1===t)return Ze(s)?"\\":e;if(Ye(s))if(o=!0,Ye(e.charCodeAt(1))){let o=2,s=o;for(;o2&&Ye(e.charCodeAt(2))&&(o=!0,n=3));let r=n0&&Ye(e.charCodeAt(t-1))&&(r+="\\"),void 0===i?o?`\\${r}`:r:o?`${i}\\${r}`:`${i}${r}`},isAbsolute(e){Ge(e,"path");const t=e.length;if(0===t)return!1;const i=e.charCodeAt(0);return Ye(i)||t>2&&Xe(i)&&58===e.charCodeAt(1)&&Ye(e.charCodeAt(2))},join(...e){if(0===e.length)return".";let t,i;for(let n=0;n0&&(void 0===t?t=i=o:t+=`\\${o}`)}if(void 0===t)return".";let n=!0,o=0;if("string"==typeof i&&Ye(i.charCodeAt(0))){++o;const e=i.length;e>1&&Ye(i.charCodeAt(1))&&(++o,e>2&&(Ye(i.charCodeAt(2))?++o:n=!1))}if(n){for(;o=2&&(t=`\\${t.slice(o)}`)}return et.normalize(t)},relative(e,t){if(Ge(e,"from"),Ge(t,"to"),e===t)return"";const i=et.resolve(e),n=et.resolve(t);if(i===n)return"";if((e=i.toLowerCase())===(t=n.toLowerCase()))return"";let o=0;for(;oo&&e.charCodeAt(s-1)===je;)s--;const r=s-o;let a=0;for(;aa&&t.charCodeAt(l-1)===je;)l--;const h=l-a,c=rc){if(t.charCodeAt(a+u)===je)return n.slice(a+u+1);if(2===u)return n.slice(a+u)}r>c&&(e.charCodeAt(o+u)===je?d=u:2===u&&(d=3)),-1===d&&(d=0)}let g="";for(u=o+d+1;u<=s;++u)u!==s&&e.charCodeAt(u)!==je||(g+=0===g.length?"..":"\\..");return a+=d,g.length>0?`${g}${n.slice(a,l)}`:(n.charCodeAt(a)===je&&++a,n.slice(a,l))},toNamespacedPath(e){if("string"!=typeof e)return e;if(0===e.length)return"";const t=et.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===je){if(t.charCodeAt(1)===je){const e=t.charCodeAt(2);if(63!==e&&e!==Ke)return`\\\\?\\UNC\\${t.slice(2)}`}}else if(Xe(t.charCodeAt(0))&&58===t.charCodeAt(1)&&t.charCodeAt(2)===je)return`\\\\?\\${t}`;return e},dirname(e){Ge(e,"path");const t=e.length;if(0===t)return".";let i=-1,n=0;const o=e.charCodeAt(0);if(1===t)return Ye(o)?e:".";if(Ye(o)){if(i=n=1,Ye(e.charCodeAt(1))){let o=2,s=o;for(;o2&&Ye(e.charCodeAt(2))?3:2);let s=-1,r=!0;for(let i=t-1;i>=n;--i)if(Ye(e.charCodeAt(i))){if(!r){s=i;break}}else r=!1;if(-1===s){if(-1===i)return".";s=i}return e.slice(0,s)},basename(e,t){void 0!==t&&Ge(t,"ext"),Ge(e,"path");let i,n=0,o=-1,s=!0;if(e.length>=2&&Xe(e.charCodeAt(0))&&58===e.charCodeAt(1)&&(n=2),void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let r=t.length-1,a=-1;for(i=e.length-1;i>=n;--i){const l=e.charCodeAt(i);if(Ye(l)){if(!s){n=i+1;break}}else-1===a&&(s=!1,a=i+1),r>=0&&(l===t.charCodeAt(r)?-1==--r&&(o=i):(r=-1,o=a))}return n===o?o=a:-1===o&&(o=e.length),e.slice(n,o)}for(i=e.length-1;i>=n;--i)if(Ye(e.charCodeAt(i))){if(!s){n=i+1;break}}else-1===o&&(s=!1,o=i+1);return-1===o?"":e.slice(n,o)},extname(e){Ge(e,"path");let t=0,i=-1,n=0,o=-1,s=!0,r=0;e.length>=2&&58===e.charCodeAt(1)&&Xe(e.charCodeAt(0))&&(t=n=2);for(let a=e.length-1;a>=t;--a){const t=e.charCodeAt(a);if(Ye(t)){if(!s){n=a+1;break}}else-1===o&&(s=!1,o=a+1),t===Ke?-1===i?i=a:1!==r&&(r=1):-1!==i&&(r=-1)}return-1===i||-1===o||0===r||1===r&&i===o-1&&i===n+1?"":e.slice(i,o)},format:Je.bind(null,"\\"),parse(e){Ge(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const i=e.length;let n=0,o=e.charCodeAt(0);if(1===i)return Ye(o)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(Ye(o)){if(n=1,Ye(e.charCodeAt(1))){let t=2,o=t;for(;t0&&(t.root=e.slice(0,n));let s=-1,r=n,a=-1,l=!0,h=e.length-1,c=0;for(;h>=n;--h)if(Ye(o=e.charCodeAt(h))){if(!l){r=h+1;break}}else-1===a&&(l=!1,a=h+1),o===Ke?-1===s?s=h:1!==c&&(c=1):-1!==s&&(c=-1);return-1!==a&&(-1===s||0===c||1===c&&s===a-1&&s===r+1?t.base=t.name=e.slice(r,a):(t.name=e.slice(r,s),t.base=e.slice(r,a),t.ext=e.slice(s,a))),t.dir=r>0&&r!==n?e.slice(0,r-1):t.root,t},sep:"\\",delimiter:";",win32:null,posix:null},tt={resolve(...e){let t="",i=!1;for(let n=e.length-1;n>=-1&&!i;n--){const o=n>=0?e[n]:Fe();Ge(o,"path"),0!==o.length&&(t=`${o}/${t}`,i=o.charCodeAt(0)===$e)}return t=Qe(t,!i,"/",Ze),i?`/${t}`:t.length>0?t:"."},normalize(e){if(Ge(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===$e,i=e.charCodeAt(e.length-1)===$e;return 0===(e=Qe(e,!t,"/",Ze)).length?t?"/":i?"./":".":(i&&(e+="/"),t?`/${e}`:e)},isAbsolute:e=>(Ge(e,"path"),e.length>0&&e.charCodeAt(0)===$e),join(...e){if(0===e.length)return".";let t;for(let i=0;i0&&(void 0===t?t=n:t+=`/${n}`)}return void 0===t?".":tt.normalize(t)},relative(e,t){if(Ge(e,"from"),Ge(t,"to"),e===t)return"";if((e=tt.resolve(e))===(t=tt.resolve(t)))return"";const i=e.length,n=i-1,o=t.length-1,s=ns){if(t.charCodeAt(1+a)===$e)return t.slice(1+a+1);if(0===a)return t.slice(1+a)}else n>s&&(e.charCodeAt(1+a)===$e?r=a:0===a&&(r=0));let l="";for(a=1+r+1;a<=i;++a)a!==i&&e.charCodeAt(a)!==$e||(l+=0===l.length?"..":"/..");return`${l}${t.slice(1+r)}`},toNamespacedPath:e=>e,dirname(e){if(Ge(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===$e;let i=-1,n=!0;for(let t=e.length-1;t>=1;--t)if(e.charCodeAt(t)===$e){if(!n){i=t;break}}else n=!1;return-1===i?t?"/":".":t&&1===i?"//":e.slice(0,i)},basename(e,t){void 0!==t&&Ge(t,"ext"),Ge(e,"path");let i,n=0,o=-1,s=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let r=t.length-1,a=-1;for(i=e.length-1;i>=0;--i){const l=e.charCodeAt(i);if(l===$e){if(!s){n=i+1;break}}else-1===a&&(s=!1,a=i+1),r>=0&&(l===t.charCodeAt(r)?-1==--r&&(o=i):(r=-1,o=a))}return n===o?o=a:-1===o&&(o=e.length),e.slice(n,o)}for(i=e.length-1;i>=0;--i)if(e.charCodeAt(i)===$e){if(!s){n=i+1;break}}else-1===o&&(s=!1,o=i+1);return-1===o?"":e.slice(n,o)},extname(e){Ge(e,"path");let t=-1,i=0,n=-1,o=!0,s=0;for(let r=e.length-1;r>=0;--r){const a=e.charCodeAt(r);if(a!==$e)-1===n&&(o=!1,n=r+1),a===Ke?-1===t?t=r:1!==s&&(s=1):-1!==t&&(s=-1);else if(!o){i=r+1;break}}return-1===t||-1===n||0===s||1===s&&t===n-1&&t===i+1?"":e.slice(t,n)},format:Je.bind(null,"/"),parse(e){Ge(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const i=e.charCodeAt(0)===$e;let n;i?(t.root="/",n=1):n=0;let o=-1,s=0,r=-1,a=!0,l=e.length-1,h=0;for(;l>=n;--l){const t=e.charCodeAt(l);if(t!==$e)-1===r&&(a=!1,r=l+1),t===Ke?-1===o?o=l:1!==h&&(h=1):-1!==o&&(h=-1);else if(!a){s=l+1;break}}if(-1!==r){const n=0===s&&i?1:s;-1===o||0===h||1===h&&o===r-1&&o===s+1?t.base=t.name=e.slice(n,r):(t.name=e.slice(n,o),t.base=e.slice(n,r),t.ext=e.slice(o,r))}return s>0?t.dir=e.slice(0,s-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};tt.win32=et.win32=et,tt.posix=et.posix=tt;const it="win32"===We?et.normalize:tt.normalize,nt="win32"===We?et.resolve:tt.resolve,ot="win32"===We?et.relative:tt.relative,st="win32"===We?et.dirname:tt.dirname,rt="win32"===We?et.basename:tt.basename,at="win32"===We?et.extname:tt.extname,lt="win32"===We?et.sep:tt.sep,ht=/^\w[\w\d+.-]*$/,ct=/^\//,dt=/^\/\//,ut="",gt="/",pt=/^(([^:\/?#]+?):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class mt{constructor(e,t,i,n,o,s=!1){"object"==typeof e?(this.scheme=e.scheme||ut,this.authority=e.authority||ut,this.path=e.path||ut,this.query=e.query||ut,this.fragment=e.fragment||ut):(this.scheme=function r(e,t){return e||t?e:"file"}(e,s),this.authority=t||ut,this.path=function a(e,t){switch(e){case"https":case"http":case"file":t?t[0]!==gt&&(t=gt+t):t=gt}return t}(this.scheme,i||ut),this.query=n||ut,this.fragment=o||ut,function l(e,t){if(!e.scheme&&t)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${e.authority}", path: "${e.path}", query: "${e.query}", fragment: "${e.fragment}"}`);if(e.scheme&&!ht.test(e.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(e.path)if(e.authority){if(!ct.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(dt.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}(this,s))}static isUri(e){return e instanceof mt||!!e&&"string"==typeof e.authority&&"string"==typeof e.fragment&&"string"==typeof e.path&&"string"==typeof e.query&&"string"==typeof e.scheme&&"string"==typeof e.fsPath&&"function"==typeof e.with&&"function"==typeof e.toString}get fsPath(){return wt(this,!1)}with(e){if(!e)return this;let{scheme:t,authority:i,path:n,query:o,fragment:s}=e;return void 0===t?t=this.scheme:null===t&&(t=ut),void 0===i?i=this.authority:null===i&&(i=ut),void 0===n?n=this.path:null===n&&(n=ut),void 0===o?o=this.query:null===o&&(o=ut),void 0===s?s=this.fragment:null===s&&(s=ut),t===this.scheme&&i===this.authority&&n===this.path&&o===this.query&&s===this.fragment?this:new _t(t,i,n,o,s)}static parse(e,t=!1){const i=pt.exec(e);return i?new _t(i[2]||ut,Lt(i[4]||ut),Lt(i[5]||ut),Lt(i[7]||ut),Lt(i[9]||ut),t):new _t(ut,ut,ut,ut,ut)}static file(e){let t=ut;if(z&&(e=e.replace(/\\/g,gt)),e[0]===gt&&e[1]===gt){const i=e.indexOf(gt,2);-1===i?(t=e.substring(2),e=gt):(t=e.substring(2,i),e=e.substring(i)||gt)}return new _t("file",t,e,ut,ut)}static from(e){return new _t(e.scheme,e.authority,e.path,e.query,e.fragment)}static joinPath(e,...t){if(!e.path)throw new Error("[UriError]: cannot call joinPath on URI without path");let i;return i=z&&"file"===e.scheme?mt.file(et.join(wt(e,!0),...t)).path:tt.join(e.path,...t),e.with({path:i})}toString(e=!1){return yt(this,e)}toJSON(){return this}static revive(e){if(e){if(e instanceof mt)return e;{const t=new _t(e);return t._formatted=e.external,t._fsPath=e._sep===ft?e.fsPath:null,t}}return e}}const ft=z?1:void 0;class _t extends mt{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=wt(this,!1)),this._fsPath}toString(e=!1){return e?yt(this,!0):(this._formatted||(this._formatted=yt(this,!1)),this._formatted)}toJSON(){const e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=ft),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e}}const bt={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function vt(e,t){let i=void 0,n=-1;for(let o=0;o=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||t&&47===s)-1!==n&&(i+=encodeURIComponent(e.substring(n,o)),n=-1),void 0!==i&&(i+=e.charAt(o));else{void 0===i&&(i=e.substr(0,o));const t=bt[s];void 0!==t?(-1!==n&&(i+=encodeURIComponent(e.substring(n,o)),n=-1),i+=t):-1===n&&(n=o)}}return-1!==n&&(i+=encodeURIComponent(e.substring(n))),void 0!==i?i:e}function Ct(e){let t=void 0;for(let i=0;i1&&"file"===e.scheme?`//${e.authority}${e.path}`:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,z&&(i=i.replace(/\//g,"\\")),i}function yt(e,t){const i=t?Ct:vt;let n="",{scheme:o,authority:s,path:r,query:a,fragment:l}=e;if(o&&(n+=o,n+=":"),(s||"file"===o)&&(n+=gt,n+=gt),s){let e=s.indexOf("@");if(-1!==e){const t=s.substr(0,e);s=s.substr(e+1),-1===(e=t.indexOf(":"))?n+=i(t,!1):(n+=i(t.substr(0,e),!1),n+=":",n+=i(t.substr(e+1),!1)),n+="@"}-1===(e=(s=s.toLowerCase()).indexOf(":"))?n+=i(s,!1):(n+=i(s.substr(0,e),!1),n+=s.substr(e))}if(r){if(r.length>=3&&47===r.charCodeAt(0)&&58===r.charCodeAt(2)){const e=r.charCodeAt(1);e>=65&&e<=90&&(r=`/${String.fromCharCode(e+32)}:${r.substr(3)}`)}else if(r.length>=2&&58===r.charCodeAt(1)){const e=r.charCodeAt(0);e>=65&&e<=90&&(r=`${String.fromCharCode(e+32)}:${r.substr(2)}`)}n+=i(r,!0)}return a&&(n+="?",n+=i(a,!1)),l&&(n+="#",n+=t?l:vt(l,!1)),n}const St=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function Lt(e){return e.match(St)?e.replace(St,e=>(function e(t){try{return decodeURIComponent(t)}catch(i){return t.length>3?t.substr(0,3)+e(t.substr(3)):t}})(e)):e}var Dt;!function(e){e.serviceIds=new Map,e.DI_TARGET="$di$target",e.DI_DEPENDENCIES="$di$dependencies",e.getServiceDependencies=function t(i){return i[e.DI_DEPENDENCIES]||[]}}(Dt||(Dt={}));const Et=kt("instantiationService");function xt(e,t,i,n){t[Dt.DI_TARGET]===t?t[Dt.DI_DEPENDENCIES].push({id:e,index:i,optional:n}):(t[Dt.DI_DEPENDENCIES]=[{id:e,index:i,optional:n}],t[Dt.DI_TARGET]=t)}function kt(e){if(Dt.serviceIds.has(e))return Dt.serviceIds.get(e);const t=function(e,i,n){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");xt(t,e,n,!1)};return t.toString=()=>e,Dt.serviceIds.set(e,t),t}function Nt(e){return function(t,i,n){if(3!==arguments.length)throw new Error("@optional-decorator can only be used to decorate a parameter");xt(e,t,n,!0)}}const It=kt("codeEditorService");class Tt{constructor(e,t){this.lineNumber=e,this.column=t}with(e=this.lineNumber,t=this.column){return e===this.lineNumber&&t===this.column?this:new Tt(e,t)}delta(e=0,t=0){return this.with(this.lineNumber+e,this.column+t)}equals(e){return Tt.equals(this,e)}static equals(e,t){return!e&&!t||!!e&&!!t&&e.lineNumber===t.lineNumber&&e.column===t.column}isBefore(e){return Tt.isBefore(this,e)}static isBefore(e,t){return e.lineNumber=t.length?e:t[n]}))}function Kt(e){return e.replace(/[<>&]/g,(function(e){switch(e){case"<":return"<";case">":return">";case"&":return"&";default:return e}}))}function $t(e){return e.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g,"\\$&")}function jt(e,t){if(!e||!t)return e;const i=t.length;if(0===i||0===e.length)return e;let n=0;for(;e.indexOf(t,n)===n;)n+=i;return e.substring(n)}function qt(e,t,i={}){if(!e)throw new Error("Cannot create regex from empty string");t||(e=$t(e)),i.wholeWord&&(/\B/.test(e.charAt(0))||(e="\\b"+e),/\B/.test(e.charAt(e.length-1))||(e+="\\b"));let n="";return i.global&&(n+="g"),i.matchCase||(n+="i"),i.multiline&&(n+="m"),i.unicode&&(n+="u"),new RegExp(e,n)}function Gt(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")}function Yt(e){return e.split(/\r\n|\r|\n/)}function Zt(e){for(let t=0,i=e.length;t=0;i--){const t=e.charCodeAt(i);if(32!==t&&9!==t)return i}return-1}function Jt(e,t){return et?1:0}function ei(e,t,i=0,n=e.length,o=0,s=t.length){for(;is)return 1}const r=n-i,a=s-o;return ra?1:0}function ti(e,t){return ii(e,t,0,e.length,0,t.length)}function ii(e,t,i=0,n=e.length,o=0,s=t.length){for(;ia?1:0}function ni(e){return e>=97&&e<=122}function oi(e){return e>=65&&e<=90}function si(e){return ni(e)||oi(e)}function ri(e,t){return e.length===t.length&&ai(e,t)}function ai(e,t,i=e.length){for(let n=0;ne.length)&&ai(e,t,t.length)}function hi(e,t){let i,n=Math.min(e.length,t.length);for(i=0;i1){const n=e.charCodeAt(t-2);if(di(n))return gi(n,i)}return i}function fi(e,t){const i=Ti.getInstance(),n=t,o=e.length,s=pi(e,o,t);t+=s>=65536?2:1;let r=i.getGraphemeBreakType(s);for(;t=65536?2:1,r=s}return t-n}const _i=/(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u08BD\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE33\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDCFF]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD50-\uDFFF]|\uD83B[\uDC00-\uDEBB])/;function bi(e){return _i.test(e)}const vi=/(?:[\u231A\u231B\u23F0\u23F3\u2600-\u27BF\u2B50\u2B55]|\uD83C[\uDDE6-\uDDFF\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD00-\uDDFF\uDE70-\uDED6])/,Ci=/^[\t\n\r\x20-\x7E]*$/;function wi(e){return Ci.test(e)}const yi=/[\u2028\u2029]/;function Si(e){return yi.test(e)}function Li(e){return(e=+e)>=11904&&e<=55215||e>=63744&&e<=64255||e>=65281&&e<=65374}function Di(e){return e>=127462&&e<=127487||8986===e||8987===e||9200===e||9203===e||e>=9728&&e<=10175||11088===e||11093===e||e>=127744&&e<=128591||e>=128640&&e<=128764||e>=128992&&e<=129003||e>=129280&&e<=129535||e>=129648&&e<=129750}const Ei=String.fromCharCode(65279);function xi(e){return!!(e&&e.length>0&&65279===e.charCodeAt(0))}function ki(e){return(e%=52)<26?String.fromCharCode(97+e):String.fromCharCode(65+e-26)}function Ni(e){return Ti.getInstance().getGraphemeBreakType(e)}function Ii(e,t){return 0===e?5!==t&&7!==t:!(2===e&&3===t||4!==e&&2!==e&&3!==e&&4!==t&&2!==t&&3!==t&&(8===e&&(8===t||9===t||11===t||12===t)||!(11!==e&&9!==e||9!==t&&10!==t)||(12===e||10===e)&&10===t||5===t||13===t||7===t||1===e||13===e&&14===t||6===e&&6===t))}class Ti{constructor(){this._data=function e(){return JSON.parse("[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]")}()}static getInstance(){return Ti._INSTANCE||(Ti._INSTANCE=new Ti),Ti._INSTANCE}getGraphemeBreakType(e){if(e<32)return 10===e?3:13===e?2:4;if(e<127)return 0;const t=this._data,i=t.length/3;let n=1;for(;n<=i;)if(et[3*n+1]))return t[3*n+2];n=2*n+1}return 0}}Ti._INSTANCE=null;let Ai=q||"";const Mi=new Map;Mi.set("false",!1),Mi.set("true",!0),Mi.set("isMac",H),Mi.set("isLinux",U),Mi.set("isWindows",z),Mi.set("isWeb",$),Mi.set("isMacNative",H&&!$),Mi.set("isEdge",Ai.indexOf("Edg/")>=0),Mi.set("isFirefox",Ai.indexOf("Firefox")>=0),Mi.set("isChrome",Ai.indexOf("Chrome")>=0),Mi.set("isSafari",Ai.indexOf("Safari")>=0),Mi.set("isIPad",Ai.indexOf("iPad")>=0);const Oi=Object.prototype.hasOwnProperty;class Ri{static has(e){return Wi.create(e)}static equals(e,t){return Vi.create(e,t)}static regex(e,t){return Yi.create(e,t)}static not(e){return Ki.create(e)}static and(...e){return Xi.create(e)}static or(...e){return Qi.create(e)}static deserialize(e,t=!1){if(e)return this._deserializeOrExpression(e,t)}static _deserializeOrExpression(e,t){let i=e.split("||");return Qi.create(i.map(e=>this._deserializeAndExpression(e,t)))}static _deserializeAndExpression(e,t){let i=e.split("&&");return Xi.create(i.map(e=>this._deserializeOne(e,t)))}static _deserializeOne(e,t){if((e=e.trim()).indexOf("!=")>=0){let i=e.split("!=");return Ui.create(i[0].trim(),this._deserializeValue(i[1],t))}if(e.indexOf("==")>=0){let i=e.split("==");return Vi.create(i[0].trim(),this._deserializeValue(i[1],t))}if(e.indexOf("=~")>=0){let i=e.split("=~");return Yi.create(i[0].trim(),this._deserializeRegexValue(i[1],t))}if(e.indexOf(" in ")>=0){let t=e.split(" in ");return zi.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+>=[^<=>]+$/.test(e)){const t=e.split(">=");return ji.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+>[^<=>]+$/.test(e)){const t=e.split(">");return $i.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+<=[^<=>]+$/.test(e)){const t=e.split("<=");return Gi.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+<[^<=>]+$/.test(e)){const t=e.split("<");return qi.create(t[0].trim(),t[1].trim())}return/^\!\s*/.test(e)?Ki.create(e.substr(1).trim()):Wi.create(e)}static _deserializeValue(e,t){if("true"===(e=e.trim()))return!0;if("false"===e)return!1;let i=/^'([^']*)'$/.exec(e);return i?i[1].trim():e}static _deserializeRegexValue(e,t){if(zt(e)){if(t)throw new Error("missing regexp-value for =~-expression");return console.warn("missing regexp-value for =~-expression"),null}let i=e.indexOf("/"),n=e.lastIndexOf("/");if(i===n||i<0){if(t)throw new Error(`bad regexp-value '${e}', missing /-enclosure`);return console.warn(`bad regexp-value '${e}', missing /-enclosure`),null}let o=e.slice(i+1,n),s="i"===e[n+1]?"i":"";try{return new RegExp(o,s)}catch(i){if(t)throw new Error(`bad regexp-value '${e}', parse error: ${i}`);return console.warn(`bad regexp-value '${e}', parse error: ${i}`),null}}}function Pi(e,t){return e.cmp(t)}class Fi{constructor(){this.type=0}cmp(e){return this.type-e.type}equals(e){return e.type===this.type}evaluate(e){return!1}serialize(){return"false"}keys(){return[]}negate(){return Bi.INSTANCE}}Fi.INSTANCE=new Fi;class Bi{constructor(){this.type=1}cmp(e){return this.type-e.type}equals(e){return e.type===this.type}evaluate(e){return!0}serialize(){return"true"}keys(){return[]}negate(){return Fi.INSTANCE}}Bi.INSTANCE=new Bi;class Wi{constructor(e){this.key=e,this.type=2}static create(e){const t=Mi.get(e);return"boolean"==typeof t?t?Bi.INSTANCE:Fi.INSTANCE:new Wi(e)}cmp(e){return e.type!==this.type?this.type-e.type:tn(this.key,e.key)}equals(e){return e.type===this.type&&this.key===e.key}evaluate(e){return!!e.getValue(this.key)}serialize(){return this.key}keys(){return[this.key]}negate(){return Ki.create(this.key)}}class Vi{constructor(e,t){this.key=e,this.value=t,this.type=4}static create(e,t){if("boolean"==typeof t)return t?Wi.create(e):Ki.create(e);const i=Mi.get(e);return"boolean"==typeof i?t===(i?"true":"false")?Bi.INSTANCE:Fi.INSTANCE:new Vi(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:nn(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&this.key===e.key&&this.value===e.value}evaluate(e){return e.getValue(this.key)==this.value}serialize(){return`${this.key} == '${this.value}'`}keys(){return[this.key]}negate(){return Ui.create(this.key,this.value)}}class zi{constructor(e,t){this.key=e,this.valueKey=t,this.type=10}static create(e,t){return new zi(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:nn(this.key,this.valueKey,e.key,e.valueKey)}equals(e){return e.type===this.type&&this.key===e.key&&this.valueKey===e.valueKey}evaluate(e){const t=e.getValue(this.valueKey),i=e.getValue(this.key);return Array.isArray(t)?t.indexOf(i)>=0:"string"==typeof i&&"object"==typeof t&&null!==t&&Oi.call(t,i)}serialize(){return`${this.key} in '${this.valueKey}'`}keys(){return[this.key,this.valueKey]}negate(){return Hi.create(this)}}class Hi{constructor(e){this._actual=e,this.type=11}static create(e){return new Hi(e)}cmp(e){return e.type!==this.type?this.type-e.type:this._actual.cmp(e._actual)}equals(e){return e.type===this.type&&this._actual.equals(e._actual)}evaluate(e){return!this._actual.evaluate(e)}serialize(){throw new Error("Method not implemented.")}keys(){return this._actual.keys()}negate(){return this._actual}}class Ui{constructor(e,t){this.key=e,this.value=t,this.type=5}static create(e,t){if("boolean"==typeof t)return t?Ki.create(e):Wi.create(e);const i=Mi.get(e);return"boolean"==typeof i?t===(i?"true":"false")?Fi.INSTANCE:Bi.INSTANCE:new Ui(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:nn(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&this.key===e.key&&this.value===e.value}evaluate(e){return e.getValue(this.key)!=this.value}serialize(){return`${this.key} != '${this.value}'`}keys(){return[this.key]}negate(){return Vi.create(this.key,this.value)}}class Ki{constructor(e){this.key=e,this.type=3}static create(e){const t=Mi.get(e);return"boolean"==typeof t?t?Fi.INSTANCE:Bi.INSTANCE:new Ki(e)}cmp(e){return e.type!==this.type?this.type-e.type:tn(this.key,e.key)}equals(e){return e.type===this.type&&this.key===e.key}evaluate(e){return!e.getValue(this.key)}serialize(){return`!${this.key}`}keys(){return[this.key]}negate(){return Wi.create(this.key)}}class $i{constructor(e,t){this.key=e,this.value=t,this.type=12}static create(e,t){return new $i(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:nn(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&this.key===e.key&&this.value===e.value}evaluate(e){return parseFloat(e.getValue(this.key))>parseFloat(this.value)}serialize(){return`${this.key} > ${this.value}`}keys(){return[this.key]}negate(){return Gi.create(this.key,this.value)}}class ji{constructor(e,t){this.key=e,this.value=t,this.type=13}static create(e,t){return new ji(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:nn(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&this.key===e.key&&this.value===e.value}evaluate(e){return parseFloat(e.getValue(this.key))>=parseFloat(this.value)}serialize(){return`${this.key} >= ${this.value}`}keys(){return[this.key]}negate(){return qi.create(this.key,this.value)}}class qi{constructor(e,t){this.key=e,this.value=t,this.type=14}static create(e,t){return new qi(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:nn(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&this.key===e.key&&this.value===e.value}evaluate(e){return parseFloat(e.getValue(this.key))e.key)return 1;const t=this.regexp?this.regexp.source:"",i=e.regexp?e.regexp.source:"";return ti?1:0}equals(e){if(e.type===this.type){const t=this.regexp?this.regexp.source:"",i=e.regexp?e.regexp.source:"";return this.key===e.key&&t===i}return!1}evaluate(e){let t=e.getValue(this.key);return!!this.regexp&&this.regexp.test(t)}serialize(){return`${this.key} =~ ${this.regexp?`/${this.regexp.source}/${this.regexp.ignoreCase?"i":""}`:"/invalid/"}`}keys(){return[this.key]}negate(){return Zi.create(this)}}class Zi{constructor(e){this._actual=e,this.type=8}static create(e){return new Zi(e)}cmp(e){return e.type!==this.type?this.type-e.type:this._actual.cmp(e._actual)}equals(e){return e.type===this.type&&this._actual.equals(e._actual)}evaluate(e){return!this._actual.evaluate(e)}serialize(){throw new Error("Method not implemented.")}keys(){return this._actual.keys()}negate(){return this._actual}}class Xi{constructor(e){this.expr=e,this.type=6}static create(e){return Xi._normalizeArr(e)}cmp(e){if(e.type!==this.type)return this.type-e.type;if(this.expr.lengthe.expr.length)return 1;for(let t=0,i=this.expr.length;t1;){const e=t[t.length-1];if(9!==e.type)break;t.pop();const i=t.pop(),n=Qi.create(e.expr.map(e=>Xi.create([e,i])));n&&(t.push(n),t.sort(Pi))}return 1===t.length?t[0]:new Xi(t)}}serialize(){return this.expr.map(e=>e.serialize()).join(" && ")}keys(){const e=[];for(let t of this.expr)e.push(...t.keys());return e}negate(){let e=[];for(let t of this.expr)e.push(t.negate());return Qi.create(e)}}class Qi{constructor(e){this.expr=e,this.type=9}static create(e){const t=Qi._normalizeArr(e);if(0!==t.length)return 1===t.length?t[0]:new Qi(t)}cmp(e){if(e.type!==this.type)return this.type-e.type;if(this.expr.lengthe.expr.length)return 1;for(let t=0,i=this.expr.length;te.serialize()).join(" || ")}keys(){const e=[];for(let t of this.expr)e.push(...t.keys());return e}negate(){let e=[];for(let t of this.expr)e.push(t.negate());const t=e=>9===e.type?e.expr:[e];for(;e.length>1;){const i=e.shift(),n=e.shift(),o=[];for(const e of t(i))for(const i of t(n))o.push(Ri.and(e,i));e.unshift(Ri.or(...o))}return e[0]}}class Ji extends Wi{constructor(e,t,i){super(e),this.key=e,this._defaultValue=t,"object"==typeof i?Ji._info.push(Object.assign(Object.assign({},i),{key:e})):!0!==i&&Ji._info.push({key:e,description:i,type:null!=t?typeof t:void 0})}static all(){return Ji._info.values()}bindTo(e){return e.createKey(this.key,this._defaultValue)}getValue(e){return e.getContextKeyValue(this.key)}toNegated(){return Ri.not(this.key)}isEqualTo(e){return Ri.equals(this.key,e)}}Ji._info=[];const en=kt("contextKeyService");function tn(e,t){return et?1:0}function nn(e,t,i,n){return ei?1:tn?1:0}const on=kt("commandService"),sn=new class{constructor(){this._commands=new Map,this._onDidRegisterCommand=new oe,this.onDidRegisterCommand=this._onDidRegisterCommand.event}registerCommand(e,t){if(!e)throw new Error("invalid command");if("string"==typeof e){if(!t)throw new Error("invalid command");return this.registerCommand({id:e,handler:t})}if(e.description){const t=[];for(let i of e.description.args)t.push(i.constraint);const i=e.handler;e.handler=function(e,...n){return function o(e,t){const i=Math.min(e.length,t.length);for(let n=0;n{o();const e=this._commands.get(i);(null==e?void 0:e.isEmpty())&&this._commands.delete(i)});return this._onDidRegisterCommand.fire(i),s}registerCommandAlias(e,t){return sn.registerCommand(e,(e,...i)=>e.get(on).executeCommand(t,...i))}getCommand(e){const t=this._commands.get(e);if(t&&!t.isEmpty())return c.first(t)}getCommands(){const e=new Map;for(const t of this._commands.keys()){const i=this.getCommand(t);i&&e.set(t,i)}return e}};function rn(e,t){if(!e)throw new Error(t?`Assertion failed (${t})`:"Assertion Failed")}const an=new class{constructor(){this.data=new Map}add(e,t){rn(Se(e)),rn(Le(t)),rn(!this.data.has(e),"There is already an extension with this id"),this.data.set(e,t)}as(e){return this.data.get(e)||null}};var ln;!function(e){e.DARK="dark",e.LIGHT="light",e.HIGH_CONTRAST="hc"}(ln||(ln={}));const hn=new class{constructor(){this._icons=new Map,this._onDidRegister=new oe}add(e){const t=this._icons.get(e.id);t?e.description?t.description=e.description:console.error(`Duplicate registration of codicon ${e.id}`):(this._icons.set(e.id,e),this._onDidRegister.fire(e))}get(e){return this._icons.get(e)}get all(){return this._icons.values()}get onDidRegister(){return this._onDidRegister.event}},cn=hn;function dn(e,t){return new un(e,t)}class un{constructor(e,t,i){this.id=e,this.definition=t,this.description=i,hn.add(this)}get classNames(){return"codicon codicon-"+this.id}get classNamesArray(){return["codicon","codicon-"+this.id]}get cssSelector(){return".codicon.codicon-"+this.id}}var gn;!function(e){e.iconNameSegment="[A-Za-z0-9]+",e.iconNameExpression="[A-Za-z0-9\\-]+",e.iconModifierExpression="~[A-Za-z]+";const t=new RegExp(`^(${e.iconNameExpression})(${e.iconModifierExpression})?$`);function i(e){if(e instanceof un)return["codicon","codicon-"+e.id];const n=t.exec(e.id);if(!n)return i(un.error);let[,o,s]=n;const r=["codicon","codicon-"+o];return s&&r.push("codicon-modifier-"+s.substr(1)),r}e.asClassNameArray=i,e.asClassName=function n(e){return i(e).join(" ")},e.asCSSSelector=function o(e){return"."+i(e).join(".")}}(gn||(gn={})),function(e){e.add=new e("add",{fontCharacter:"\\ea60"}),e.plus=new e("plus",{fontCharacter:"\\ea60"}),e.gistNew=new e("gist-new",{fontCharacter:"\\ea60"}),e.repoCreate=new e("repo-create",{fontCharacter:"\\ea60"}),e.lightbulb=new e("lightbulb",{fontCharacter:"\\ea61"}),e.lightBulb=new e("light-bulb",{fontCharacter:"\\ea61"}),e.repo=new e("repo",{fontCharacter:"\\ea62"}),e.repoDelete=new e("repo-delete",{fontCharacter:"\\ea62"}),e.gistFork=new e("gist-fork",{fontCharacter:"\\ea63"}),e.repoForked=new e("repo-forked",{fontCharacter:"\\ea63"}),e.gitPullRequest=new e("git-pull-request",{fontCharacter:"\\ea64"}),e.gitPullRequestAbandoned=new e("git-pull-request-abandoned",{fontCharacter:"\\ea64"}),e.recordKeys=new e("record-keys",{fontCharacter:"\\ea65"}),e.keyboard=new e("keyboard",{fontCharacter:"\\ea65"}),e.tag=new e("tag",{fontCharacter:"\\ea66"}),e.tagAdd=new e("tag-add",{fontCharacter:"\\ea66"}),e.tagRemove=new e("tag-remove",{fontCharacter:"\\ea66"}),e.person=new e("person",{fontCharacter:"\\ea67"}),e.personAdd=new e("person-add",{fontCharacter:"\\ea67"}),e.personFollow=new e("person-follow",{fontCharacter:"\\ea67"}),e.personOutline=new e("person-outline",{fontCharacter:"\\ea67"}),e.personFilled=new e("person-filled",{fontCharacter:"\\ea67"}),e.gitBranch=new e("git-branch",{fontCharacter:"\\ea68"}),e.gitBranchCreate=new e("git-branch-create",{fontCharacter:"\\ea68"}),e.gitBranchDelete=new e("git-branch-delete",{fontCharacter:"\\ea68"}),e.sourceControl=new e("source-control",{fontCharacter:"\\ea68"}),e.mirror=new e("mirror",{fontCharacter:"\\ea69"}),e.mirrorPublic=new e("mirror-public",{fontCharacter:"\\ea69"}),e.star=new e("star",{fontCharacter:"\\ea6a"}),e.starAdd=new e("star-add",{fontCharacter:"\\ea6a"}),e.starDelete=new e("star-delete",{fontCharacter:"\\ea6a"}),e.starEmpty=new e("star-empty",{fontCharacter:"\\ea6a"}),e.comment=new e("comment",{fontCharacter:"\\ea6b"}),e.commentAdd=new e("comment-add",{fontCharacter:"\\ea6b"}),e.alert=new e("alert",{fontCharacter:"\\ea6c"}),e.warning=new e("warning",{fontCharacter:"\\ea6c"}),e.search=new e("search",{fontCharacter:"\\ea6d"}),e.searchSave=new e("search-save",{fontCharacter:"\\ea6d"}),e.logOut=new e("log-out",{fontCharacter:"\\ea6e"}),e.signOut=new e("sign-out",{fontCharacter:"\\ea6e"}),e.logIn=new e("log-in",{fontCharacter:"\\ea6f"}),e.signIn=new e("sign-in",{fontCharacter:"\\ea6f"}),e.eye=new e("eye",{fontCharacter:"\\ea70"}),e.eyeUnwatch=new e("eye-unwatch",{fontCharacter:"\\ea70"}),e.eyeWatch=new e("eye-watch",{fontCharacter:"\\ea70"}),e.circleFilled=new e("circle-filled",{fontCharacter:"\\ea71"}),e.primitiveDot=new e("primitive-dot",{fontCharacter:"\\ea71"}),e.closeDirty=new e("close-dirty",{fontCharacter:"\\ea71"}),e.debugBreakpoint=new e("debug-breakpoint",{fontCharacter:"\\ea71"}),e.debugBreakpointDisabled=new e("debug-breakpoint-disabled",{fontCharacter:"\\ea71"}),e.debugHint=new e("debug-hint",{fontCharacter:"\\ea71"}),e.primitiveSquare=new e("primitive-square",{fontCharacter:"\\ea72"}),e.edit=new e("edit",{fontCharacter:"\\ea73"}),e.pencil=new e("pencil",{fontCharacter:"\\ea73"}),e.info=new e("info",{fontCharacter:"\\ea74"}),e.issueOpened=new e("issue-opened",{fontCharacter:"\\ea74"}),e.gistPrivate=new e("gist-private",{fontCharacter:"\\ea75"}),e.gitForkPrivate=new e("git-fork-private",{fontCharacter:"\\ea75"}),e.lock=new e("lock",{fontCharacter:"\\ea75"}),e.mirrorPrivate=new e("mirror-private",{fontCharacter:"\\ea75"}),e.close=new e("close",{fontCharacter:"\\ea76"}),e.removeClose=new e("remove-close",{fontCharacter:"\\ea76"}),e.x=new e("x",{fontCharacter:"\\ea76"}),e.repoSync=new e("repo-sync",{fontCharacter:"\\ea77"}),e.sync=new e("sync",{fontCharacter:"\\ea77"}),e.clone=new e("clone",{fontCharacter:"\\ea78"}),e.desktopDownload=new e("desktop-download",{fontCharacter:"\\ea78"}),e.beaker=new e("beaker",{fontCharacter:"\\ea79"}),e.microscope=new e("microscope",{fontCharacter:"\\ea79"}),e.vm=new e("vm",{fontCharacter:"\\ea7a"}),e.deviceDesktop=new e("device-desktop",{fontCharacter:"\\ea7a"}),e.file=new e("file",{fontCharacter:"\\ea7b"}),e.fileText=new e("file-text",{fontCharacter:"\\ea7b"}),e.more=new e("more",{fontCharacter:"\\ea7c"}),e.ellipsis=new e("ellipsis",{fontCharacter:"\\ea7c"}),e.kebabHorizontal=new e("kebab-horizontal",{fontCharacter:"\\ea7c"}),e.mailReply=new e("mail-reply",{fontCharacter:"\\ea7d"}),e.reply=new e("reply",{fontCharacter:"\\ea7d"}),e.organization=new e("organization",{fontCharacter:"\\ea7e"}),e.organizationFilled=new e("organization-filled",{fontCharacter:"\\ea7e"}),e.organizationOutline=new e("organization-outline",{fontCharacter:"\\ea7e"}),e.newFile=new e("new-file",{fontCharacter:"\\ea7f"}),e.fileAdd=new e("file-add",{fontCharacter:"\\ea7f"}),e.newFolder=new e("new-folder",{fontCharacter:"\\ea80"}),e.fileDirectoryCreate=new e("file-directory-create",{fontCharacter:"\\ea80"}),e.trash=new e("trash",{fontCharacter:"\\ea81"}),e.trashcan=new e("trashcan",{fontCharacter:"\\ea81"}),e.history=new e("history",{fontCharacter:"\\ea82"}),e.clock=new e("clock",{fontCharacter:"\\ea82"}),e.folder=new e("folder",{fontCharacter:"\\ea83"}),e.fileDirectory=new e("file-directory",{fontCharacter:"\\ea83"}),e.symbolFolder=new e("symbol-folder",{fontCharacter:"\\ea83"}),e.logoGithub=new e("logo-github",{fontCharacter:"\\ea84"}),e.markGithub=new e("mark-github",{fontCharacter:"\\ea84"}),e.github=new e("github",{fontCharacter:"\\ea84"}),e.terminal=new e("terminal",{fontCharacter:"\\ea85"}),e.console=new e("console",{fontCharacter:"\\ea85"}),e.repl=new e("repl",{fontCharacter:"\\ea85"}),e.zap=new e("zap",{fontCharacter:"\\ea86"}),e.symbolEvent=new e("symbol-event",{fontCharacter:"\\ea86"}),e.error=new e("error",{fontCharacter:"\\ea87"}),e.stop=new e("stop",{fontCharacter:"\\ea87"}),e.variable=new e("variable",{fontCharacter:"\\ea88"}),e.symbolVariable=new e("symbol-variable",{fontCharacter:"\\ea88"}),e.array=new e("array",{fontCharacter:"\\ea8a"}),e.symbolArray=new e("symbol-array",{fontCharacter:"\\ea8a"}),e.symbolModule=new e("symbol-module",{fontCharacter:"\\ea8b"}),e.symbolPackage=new e("symbol-package",{fontCharacter:"\\ea8b"}),e.symbolNamespace=new e("symbol-namespace",{fontCharacter:"\\ea8b"}),e.symbolObject=new e("symbol-object",{fontCharacter:"\\ea8b"}),e.symbolMethod=new e("symbol-method",{fontCharacter:"\\ea8c"}),e.symbolFunction=new e("symbol-function",{fontCharacter:"\\ea8c"}),e.symbolConstructor=new e("symbol-constructor",{fontCharacter:"\\ea8c"}),e.symbolBoolean=new e("symbol-boolean",{fontCharacter:"\\ea8f"}),e.symbolNull=new e("symbol-null",{fontCharacter:"\\ea8f"}),e.symbolNumeric=new e("symbol-numeric",{fontCharacter:"\\ea90"}),e.symbolNumber=new e("symbol-number",{fontCharacter:"\\ea90"}),e.symbolStructure=new e("symbol-structure",{fontCharacter:"\\ea91"}),e.symbolStruct=new e("symbol-struct",{fontCharacter:"\\ea91"}),e.symbolParameter=new e("symbol-parameter",{fontCharacter:"\\ea92"}),e.symbolTypeParameter=new e("symbol-type-parameter",{fontCharacter:"\\ea92"}),e.symbolKey=new e("symbol-key",{fontCharacter:"\\ea93"}),e.symbolText=new e("symbol-text",{fontCharacter:"\\ea93"}),e.symbolReference=new e("symbol-reference",{fontCharacter:"\\ea94"}),e.goToFile=new e("go-to-file",{fontCharacter:"\\ea94"}),e.symbolEnum=new e("symbol-enum",{fontCharacter:"\\ea95"}),e.symbolValue=new e("symbol-value",{fontCharacter:"\\ea95"}),e.symbolRuler=new e("symbol-ruler",{fontCharacter:"\\ea96"}),e.symbolUnit=new e("symbol-unit",{fontCharacter:"\\ea96"}),e.activateBreakpoints=new e("activate-breakpoints",{fontCharacter:"\\ea97"}),e.archive=new e("archive",{fontCharacter:"\\ea98"}),e.arrowBoth=new e("arrow-both",{fontCharacter:"\\ea99"}),e.arrowDown=new e("arrow-down",{fontCharacter:"\\ea9a"}),e.arrowLeft=new e("arrow-left",{fontCharacter:"\\ea9b"}),e.arrowRight=new e("arrow-right",{fontCharacter:"\\ea9c"}),e.arrowSmallDown=new e("arrow-small-down",{fontCharacter:"\\ea9d"}),e.arrowSmallLeft=new e("arrow-small-left",{fontCharacter:"\\ea9e"}),e.arrowSmallRight=new e("arrow-small-right",{fontCharacter:"\\ea9f"}),e.arrowSmallUp=new e("arrow-small-up",{fontCharacter:"\\eaa0"}),e.arrowUp=new e("arrow-up",{fontCharacter:"\\eaa1"}),e.bell=new e("bell",{fontCharacter:"\\eaa2"}),e.bold=new e("bold",{fontCharacter:"\\eaa3"}),e.book=new e("book",{fontCharacter:"\\eaa4"}),e.bookmark=new e("bookmark",{fontCharacter:"\\eaa5"}),e.debugBreakpointConditionalUnverified=new e("debug-breakpoint-conditional-unverified",{fontCharacter:"\\eaa6"}),e.debugBreakpointConditional=new e("debug-breakpoint-conditional",{fontCharacter:"\\eaa7"}),e.debugBreakpointConditionalDisabled=new e("debug-breakpoint-conditional-disabled",{fontCharacter:"\\eaa7"}),e.debugBreakpointDataUnverified=new e("debug-breakpoint-data-unverified",{fontCharacter:"\\eaa8"}),e.debugBreakpointData=new e("debug-breakpoint-data",{fontCharacter:"\\eaa9"}),e.debugBreakpointDataDisabled=new e("debug-breakpoint-data-disabled",{fontCharacter:"\\eaa9"}),e.debugBreakpointLogUnverified=new e("debug-breakpoint-log-unverified",{fontCharacter:"\\eaaa"}),e.debugBreakpointLog=new e("debug-breakpoint-log",{fontCharacter:"\\eaab"}),e.debugBreakpointLogDisabled=new e("debug-breakpoint-log-disabled",{fontCharacter:"\\eaab"}),e.briefcase=new e("briefcase",{fontCharacter:"\\eaac"}),e.broadcast=new e("broadcast",{fontCharacter:"\\eaad"}),e.browser=new e("browser",{fontCharacter:"\\eaae"}),e.bug=new e("bug",{fontCharacter:"\\eaaf"}),e.calendar=new e("calendar",{fontCharacter:"\\eab0"}),e.caseSensitive=new e("case-sensitive",{fontCharacter:"\\eab1"}),e.check=new e("check",{fontCharacter:"\\eab2"}),e.checklist=new e("checklist",{fontCharacter:"\\eab3"}),e.chevronDown=new e("chevron-down",{fontCharacter:"\\eab4"}),e.chevronLeft=new e("chevron-left",{fontCharacter:"\\eab5"}),e.chevronRight=new e("chevron-right",{fontCharacter:"\\eab6"}),e.chevronUp=new e("chevron-up",{fontCharacter:"\\eab7"}),e.chromeClose=new e("chrome-close",{fontCharacter:"\\eab8"}),e.chromeMaximize=new e("chrome-maximize",{fontCharacter:"\\eab9"}),e.chromeMinimize=new e("chrome-minimize",{fontCharacter:"\\eaba"}),e.chromeRestore=new e("chrome-restore",{fontCharacter:"\\eabb"}),e.circleOutline=new e("circle-outline",{fontCharacter:"\\eabc"}),e.debugBreakpointUnverified=new e("debug-breakpoint-unverified",{fontCharacter:"\\eabc"}),e.circleSlash=new e("circle-slash",{fontCharacter:"\\eabd"}),e.circuitBoard=new e("circuit-board",{fontCharacter:"\\eabe"}),e.clearAll=new e("clear-all",{fontCharacter:"\\eabf"}),e.clippy=new e("clippy",{fontCharacter:"\\eac0"}),e.closeAll=new e("close-all",{fontCharacter:"\\eac1"}),e.cloudDownload=new e("cloud-download",{fontCharacter:"\\eac2"}),e.cloudUpload=new e("cloud-upload",{fontCharacter:"\\eac3"}),e.code=new e("code",{fontCharacter:"\\eac4"}),e.collapseAll=new e("collapse-all",{fontCharacter:"\\eac5"}),e.colorMode=new e("color-mode",{fontCharacter:"\\eac6"}),e.commentDiscussion=new e("comment-discussion",{fontCharacter:"\\eac7"}),e.compareChanges=new e("compare-changes",{fontCharacter:"\\eafd"}),e.creditCard=new e("credit-card",{fontCharacter:"\\eac9"}),e.dash=new e("dash",{fontCharacter:"\\eacc"}),e.dashboard=new e("dashboard",{fontCharacter:"\\eacd"}),e.database=new e("database",{fontCharacter:"\\eace"}),e.debugContinue=new e("debug-continue",{fontCharacter:"\\eacf"}),e.debugDisconnect=new e("debug-disconnect",{fontCharacter:"\\ead0"}),e.debugPause=new e("debug-pause",{fontCharacter:"\\ead1"}),e.debugRestart=new e("debug-restart",{fontCharacter:"\\ead2"}),e.debugStart=new e("debug-start",{fontCharacter:"\\ead3"}),e.debugStepInto=new e("debug-step-into",{fontCharacter:"\\ead4"}),e.debugStepOut=new e("debug-step-out",{fontCharacter:"\\ead5"}),e.debugStepOver=new e("debug-step-over",{fontCharacter:"\\ead6"}),e.debugStop=new e("debug-stop",{fontCharacter:"\\ead7"}),e.debug=new e("debug",{fontCharacter:"\\ead8"}),e.deviceCameraVideo=new e("device-camera-video",{fontCharacter:"\\ead9"}),e.deviceCamera=new e("device-camera",{fontCharacter:"\\eada"}),e.deviceMobile=new e("device-mobile",{fontCharacter:"\\eadb"}),e.diffAdded=new e("diff-added",{fontCharacter:"\\eadc"}),e.diffIgnored=new e("diff-ignored",{fontCharacter:"\\eadd"}),e.diffModified=new e("diff-modified",{fontCharacter:"\\eade"}),e.diffRemoved=new e("diff-removed",{fontCharacter:"\\eadf"}),e.diffRenamed=new e("diff-renamed",{fontCharacter:"\\eae0"}),e.diff=new e("diff",{fontCharacter:"\\eae1"}),e.discard=new e("discard",{fontCharacter:"\\eae2"}),e.editorLayout=new e("editor-layout",{fontCharacter:"\\eae3"}),e.emptyWindow=new e("empty-window",{fontCharacter:"\\eae4"}),e.exclude=new e("exclude",{fontCharacter:"\\eae5"}),e.extensions=new e("extensions",{fontCharacter:"\\eae6"}),e.eyeClosed=new e("eye-closed",{fontCharacter:"\\eae7"}),e.fileBinary=new e("file-binary",{fontCharacter:"\\eae8"}),e.fileCode=new e("file-code",{fontCharacter:"\\eae9"}),e.fileMedia=new e("file-media",{fontCharacter:"\\eaea"}),e.filePdf=new e("file-pdf",{fontCharacter:"\\eaeb"}),e.fileSubmodule=new e("file-submodule",{fontCharacter:"\\eaec"}),e.fileSymlinkDirectory=new e("file-symlink-directory",{fontCharacter:"\\eaed"}),e.fileSymlinkFile=new e("file-symlink-file",{fontCharacter:"\\eaee"}),e.fileZip=new e("file-zip",{fontCharacter:"\\eaef"}),e.files=new e("files",{fontCharacter:"\\eaf0"}),e.filter=new e("filter",{fontCharacter:"\\eaf1"}),e.flame=new e("flame",{fontCharacter:"\\eaf2"}),e.foldDown=new e("fold-down",{fontCharacter:"\\eaf3"}),e.foldUp=new e("fold-up",{fontCharacter:"\\eaf4"}),e.fold=new e("fold",{fontCharacter:"\\eaf5"}),e.folderActive=new e("folder-active",{fontCharacter:"\\eaf6"}),e.folderOpened=new e("folder-opened",{fontCharacter:"\\eaf7"}),e.gear=new e("gear",{fontCharacter:"\\eaf8"}),e.gift=new e("gift",{fontCharacter:"\\eaf9"}),e.gistSecret=new e("gist-secret",{fontCharacter:"\\eafa"}),e.gist=new e("gist",{fontCharacter:"\\eafb"}),e.gitCommit=new e("git-commit",{fontCharacter:"\\eafc"}),e.gitCompare=new e("git-compare",{fontCharacter:"\\eafd"}),e.gitMerge=new e("git-merge",{fontCharacter:"\\eafe"}),e.githubAction=new e("github-action",{fontCharacter:"\\eaff"}),e.githubAlt=new e("github-alt",{fontCharacter:"\\eb00"}),e.globe=new e("globe",{fontCharacter:"\\eb01"}),e.grabber=new e("grabber",{fontCharacter:"\\eb02"}),e.graph=new e("graph",{fontCharacter:"\\eb03"}),e.gripper=new e("gripper",{fontCharacter:"\\eb04"}),e.heart=new e("heart",{fontCharacter:"\\eb05"}),e.home=new e("home",{fontCharacter:"\\eb06"}),e.horizontalRule=new e("horizontal-rule",{fontCharacter:"\\eb07"}),e.hubot=new e("hubot",{fontCharacter:"\\eb08"}),e.inbox=new e("inbox",{fontCharacter:"\\eb09"}),e.issueClosed=new e("issue-closed",{fontCharacter:"\\eb0a"}),e.issueReopened=new e("issue-reopened",{fontCharacter:"\\eb0b"}),e.issues=new e("issues",{fontCharacter:"\\eb0c"}),e.italic=new e("italic",{fontCharacter:"\\eb0d"}),e.jersey=new e("jersey",{fontCharacter:"\\eb0e"}),e.json=new e("json",{fontCharacter:"\\eb0f"}),e.kebabVertical=new e("kebab-vertical",{fontCharacter:"\\eb10"}),e.key=new e("key",{fontCharacter:"\\eb11"}),e.law=new e("law",{fontCharacter:"\\eb12"}),e.lightbulbAutofix=new e("lightbulb-autofix",{fontCharacter:"\\eb13"}),e.linkExternal=new e("link-external",{fontCharacter:"\\eb14"}),e.link=new e("link",{fontCharacter:"\\eb15"}),e.listOrdered=new e("list-ordered",{fontCharacter:"\\eb16"}),e.listUnordered=new e("list-unordered",{fontCharacter:"\\eb17"}),e.liveShare=new e("live-share",{fontCharacter:"\\eb18"}),e.loading=new e("loading",{fontCharacter:"\\eb19"}),e.location=new e("location",{fontCharacter:"\\eb1a"}),e.mailRead=new e("mail-read",{fontCharacter:"\\eb1b"}),e.mail=new e("mail",{fontCharacter:"\\eb1c"}),e.markdown=new e("markdown",{fontCharacter:"\\eb1d"}),e.megaphone=new e("megaphone",{fontCharacter:"\\eb1e"}),e.mention=new e("mention",{fontCharacter:"\\eb1f"}),e.milestone=new e("milestone",{fontCharacter:"\\eb20"}),e.mortarBoard=new e("mortar-board",{fontCharacter:"\\eb21"}),e.move=new e("move",{fontCharacter:"\\eb22"}),e.multipleWindows=new e("multiple-windows",{fontCharacter:"\\eb23"}),e.mute=new e("mute",{fontCharacter:"\\eb24"}),e.noNewline=new e("no-newline",{fontCharacter:"\\eb25"}),e.note=new e("note",{fontCharacter:"\\eb26"}),e.octoface=new e("octoface",{fontCharacter:"\\eb27"}),e.openPreview=new e("open-preview",{fontCharacter:"\\eb28"}),e.package_=new e("package",{fontCharacter:"\\eb29"}),e.paintcan=new e("paintcan",{fontCharacter:"\\eb2a"}),e.pin=new e("pin",{fontCharacter:"\\eb2b"}),e.play=new e("play",{fontCharacter:"\\eb2c"}),e.run=new e("run",{fontCharacter:"\\eb2c"}),e.plug=new e("plug",{fontCharacter:"\\eb2d"}),e.preserveCase=new e("preserve-case",{fontCharacter:"\\eb2e"}),e.preview=new e("preview",{fontCharacter:"\\eb2f"}),e.project=new e("project",{fontCharacter:"\\eb30"}),e.pulse=new e("pulse",{fontCharacter:"\\eb31"}),e.question=new e("question",{fontCharacter:"\\eb32"}),e.quote=new e("quote",{fontCharacter:"\\eb33"}),e.radioTower=new e("radio-tower",{fontCharacter:"\\eb34"}),e.reactions=new e("reactions",{fontCharacter:"\\eb35"}),e.references=new e("references",{fontCharacter:"\\eb36"}),e.refresh=new e("refresh",{fontCharacter:"\\eb37"}),e.regex=new e("regex",{fontCharacter:"\\eb38"}),e.remoteExplorer=new e("remote-explorer",{fontCharacter:"\\eb39"}),e.remote=new e("remote",{fontCharacter:"\\eb3a"}),e.remove=new e("remove",{fontCharacter:"\\eb3b"}),e.replaceAll=new e("replace-all",{fontCharacter:"\\eb3c"}),e.replace=new e("replace",{fontCharacter:"\\eb3d"}),e.repoClone=new e("repo-clone",{fontCharacter:"\\eb3e"}),e.repoForcePush=new e("repo-force-push",{fontCharacter:"\\eb3f"}),e.repoPull=new e("repo-pull",{fontCharacter:"\\eb40"}),e.repoPush=new e("repo-push",{fontCharacter:"\\eb41"}),e.report=new e("report",{fontCharacter:"\\eb42"}),e.requestChanges=new e("request-changes",{fontCharacter:"\\eb43"}),e.rocket=new e("rocket",{fontCharacter:"\\eb44"}),e.rootFolderOpened=new e("root-folder-opened",{fontCharacter:"\\eb45"}),e.rootFolder=new e("root-folder",{fontCharacter:"\\eb46"}),e.rss=new e("rss",{fontCharacter:"\\eb47"}),e.ruby=new e("ruby",{fontCharacter:"\\eb48"}),e.saveAll=new e("save-all",{fontCharacter:"\\eb49"}),e.saveAs=new e("save-as",{fontCharacter:"\\eb4a"}),e.save=new e("save",{fontCharacter:"\\eb4b"}),e.screenFull=new e("screen-full",{fontCharacter:"\\eb4c"}),e.screenNormal=new e("screen-normal",{fontCharacter:"\\eb4d"}),e.searchStop=new e("search-stop",{fontCharacter:"\\eb4e"}),e.server=new e("server",{fontCharacter:"\\eb50"}),e.settingsGear=new e("settings-gear",{fontCharacter:"\\eb51"}),e.settings=new e("settings",{fontCharacter:"\\eb52"}),e.shield=new e("shield",{fontCharacter:"\\eb53"}),e.smiley=new e("smiley",{fontCharacter:"\\eb54"}),e.sortPrecedence=new e("sort-precedence",{fontCharacter:"\\eb55"}),e.splitHorizontal=new e("split-horizontal",{fontCharacter:"\\eb56"}),e.splitVertical=new e("split-vertical",{fontCharacter:"\\eb57"}),e.squirrel=new e("squirrel",{fontCharacter:"\\eb58"}),e.starFull=new e("star-full",{fontCharacter:"\\eb59"}),e.starHalf=new e("star-half",{fontCharacter:"\\eb5a"}),e.symbolClass=new e("symbol-class",{fontCharacter:"\\eb5b"}),e.symbolColor=new e("symbol-color",{fontCharacter:"\\eb5c"}),e.symbolConstant=new e("symbol-constant",{fontCharacter:"\\eb5d"}),e.symbolEnumMember=new e("symbol-enum-member",{fontCharacter:"\\eb5e"}),e.symbolField=new e("symbol-field",{fontCharacter:"\\eb5f"}),e.symbolFile=new e("symbol-file",{fontCharacter:"\\eb60"}),e.symbolInterface=new e("symbol-interface",{fontCharacter:"\\eb61"}),e.symbolKeyword=new e("symbol-keyword",{fontCharacter:"\\eb62"}),e.symbolMisc=new e("symbol-misc",{fontCharacter:"\\eb63"}),e.symbolOperator=new e("symbol-operator",{fontCharacter:"\\eb64"}),e.symbolProperty=new e("symbol-property",{fontCharacter:"\\eb65"}),e.wrench=new e("wrench",{fontCharacter:"\\eb65"}),e.wrenchSubaction=new e("wrench-subaction",{fontCharacter:"\\eb65"}),e.symbolSnippet=new e("symbol-snippet",{fontCharacter:"\\eb66"}),e.tasklist=new e("tasklist",{fontCharacter:"\\eb67"}),e.telescope=new e("telescope",{fontCharacter:"\\eb68"}),e.textSize=new e("text-size",{fontCharacter:"\\eb69"}),e.threeBars=new e("three-bars",{fontCharacter:"\\eb6a"}),e.thumbsdown=new e("thumbsdown",{fontCharacter:"\\eb6b"}),e.thumbsup=new e("thumbsup",{fontCharacter:"\\eb6c"}),e.tools=new e("tools",{fontCharacter:"\\eb6d"}),e.triangleDown=new e("triangle-down",{fontCharacter:"\\eb6e"}),e.triangleLeft=new e("triangle-left",{fontCharacter:"\\eb6f"}),e.triangleRight=new e("triangle-right",{fontCharacter:"\\eb70"}),e.triangleUp=new e("triangle-up",{fontCharacter:"\\eb71"}),e.twitter=new e("twitter",{fontCharacter:"\\eb72"}),e.unfold=new e("unfold",{fontCharacter:"\\eb73"}),e.unlock=new e("unlock",{fontCharacter:"\\eb74"}),e.unmute=new e("unmute",{fontCharacter:"\\eb75"}),e.unverified=new e("unverified",{fontCharacter:"\\eb76"}),e.verified=new e("verified",{fontCharacter:"\\eb77"}),e.versions=new e("versions",{fontCharacter:"\\eb78"}),e.vmActive=new e("vm-active",{fontCharacter:"\\eb79"}),e.vmOutline=new e("vm-outline",{fontCharacter:"\\eb7a"}),e.vmRunning=new e("vm-running",{fontCharacter:"\\eb7b"}),e.watch=new e("watch",{fontCharacter:"\\eb7c"}),e.whitespace=new e("whitespace",{fontCharacter:"\\eb7d"}),e.wholeWord=new e("whole-word",{fontCharacter:"\\eb7e"}),e.window=new e("window",{fontCharacter:"\\eb7f"}),e.wordWrap=new e("word-wrap",{fontCharacter:"\\eb80"}),e.zoomIn=new e("zoom-in",{fontCharacter:"\\eb81"}),e.zoomOut=new e("zoom-out",{fontCharacter:"\\eb82"}),e.listFilter=new e("list-filter",{fontCharacter:"\\eb83"}),e.listFlat=new e("list-flat",{fontCharacter:"\\eb84"}),e.listSelection=new e("list-selection",{fontCharacter:"\\eb85"}),e.selection=new e("selection",{fontCharacter:"\\eb85"}),e.listTree=new e("list-tree",{fontCharacter:"\\eb86"}),e.debugBreakpointFunctionUnverified=new e("debug-breakpoint-function-unverified",{fontCharacter:"\\eb87"}),e.debugBreakpointFunction=new e("debug-breakpoint-function",{fontCharacter:"\\eb88"}),e.debugBreakpointFunctionDisabled=new e("debug-breakpoint-function-disabled",{fontCharacter:"\\eb88"}),e.debugStackframeActive=new e("debug-stackframe-active",{fontCharacter:"\\eb89"}),e.debugStackframeDot=new e("debug-stackframe-dot",{fontCharacter:"\\eb8a"}),e.debugStackframe=new e("debug-stackframe",{fontCharacter:"\\eb8b"}),e.debugStackframeFocused=new e("debug-stackframe-focused",{fontCharacter:"\\eb8b"}),e.debugBreakpointUnsupported=new e("debug-breakpoint-unsupported",{fontCharacter:"\\eb8c"}),e.symbolString=new e("symbol-string",{fontCharacter:"\\eb8d"}),e.debugReverseContinue=new e("debug-reverse-continue",{fontCharacter:"\\eb8e"}),e.debugStepBack=new e("debug-step-back",{fontCharacter:"\\eb8f"}),e.debugRestartFrame=new e("debug-restart-frame",{fontCharacter:"\\eb90"}),e.callIncoming=new e("call-incoming",{fontCharacter:"\\eb92"}),e.callOutgoing=new e("call-outgoing",{fontCharacter:"\\eb93"}),e.menu=new e("menu",{fontCharacter:"\\eb94"}),e.expandAll=new e("expand-all",{fontCharacter:"\\eb95"}),e.feedback=new e("feedback",{fontCharacter:"\\eb96"}),e.groupByRefType=new e("group-by-ref-type",{fontCharacter:"\\eb97"}),e.ungroupByRefType=new e("ungroup-by-ref-type",{fontCharacter:"\\eb98"}),e.account=new e("account",{fontCharacter:"\\eb99"}),e.bellDot=new e("bell-dot",{fontCharacter:"\\eb9a"}),e.debugConsole=new e("debug-console",{fontCharacter:"\\eb9b"}),e.library=new e("library",{fontCharacter:"\\eb9c"}),e.output=new e("output",{fontCharacter:"\\eb9d"}),e.runAll=new e("run-all",{fontCharacter:"\\eb9e"}),e.syncIgnored=new e("sync-ignored",{fontCharacter:"\\eb9f"}),e.pinned=new e("pinned",{fontCharacter:"\\eba0"}),e.githubInverted=new e("github-inverted",{fontCharacter:"\\eba1"}),e.debugAlt=new e("debug-alt",{fontCharacter:"\\eb91"}),e.serverProcess=new e("server-process",{fontCharacter:"\\eba2"}),e.serverEnvironment=new e("server-environment",{fontCharacter:"\\eba3"}),e.pass=new e("pass",{fontCharacter:"\\eba4"}),e.stopCircle=new e("stop-circle",{fontCharacter:"\\eba5"}),e.playCircle=new e("play-circle",{fontCharacter:"\\eba6"}),e.record=new e("record",{fontCharacter:"\\eba7"}),e.debugAltSmall=new e("debug-alt-small",{fontCharacter:"\\eba8"}),e.vmConnect=new e("vm-connect",{fontCharacter:"\\eba9"}),e.cloud=new e("cloud",{fontCharacter:"\\ebaa"}),e.merge=new e("merge",{fontCharacter:"\\ebab"}),e.exportIcon=new e("export",{fontCharacter:"\\ebac"}),e.graphLeft=new e("graph-left",{fontCharacter:"\\ebad"}),e.magnet=new e("magnet",{fontCharacter:"\\ebae"}),e.notebook=new e("notebook",{fontCharacter:"\\ebaf"}),e.redo=new e("redo",{fontCharacter:"\\ebb0"}),e.checkAll=new e("check-all",{fontCharacter:"\\ebb1"}),e.pinnedDirty=new e("pinned-dirty",{fontCharacter:"\\ebb2"}),e.passFilled=new e("pass-filled",{fontCharacter:"\\ebb3"}),e.circleLargeFilled=new e("circle-large-filled",{fontCharacter:"\\ebb4"}),e.circleLargeOutline=new e("circle-large-outline",{fontCharacter:"\\ebb5"}),e.combine=new e("combine",{fontCharacter:"\\ebb6"}),e.gather=new e("gather",{fontCharacter:"\\ebb6"}),e.table=new e("table",{fontCharacter:"\\ebb7"}),e.variableGroup=new e("variable-group",{fontCharacter:"\\ebb8"}),e.typeHierarchy=new e("type-hierarchy",{fontCharacter:"\\ebb9"}),e.typeHierarchySub=new e("type-hierarchy-sub",{fontCharacter:"\\ebba"}),e.typeHierarchySuper=new e("type-hierarchy-super",{fontCharacter:"\\ebbb"}),e.gitPullRequestCreate=new e("git-pull-request-create",{fontCharacter:"\\ebbc"}),e.runAbove=new e("run-above",{fontCharacter:"\\ebbd"}),e.runBelow=new e("run-below",{fontCharacter:"\\ebbe"}),e.notebookTemplate=new e("notebook-template",{fontCharacter:"\\ebbf"}),e.debugRerun=new e("debug-rerun",{fontCharacter:"\\ebc0"}),e.dropDownButton=new e("drop-down-button",e.chevronDown.definition)}(un||(un={}));const pn=kt("themeService");var mn,fn;function _n(e){return{id:e}}function bn(e){switch(e){case ln.DARK:return"vs-dark";case ln.HIGH_CONTRAST:return"hc-black";default:return"vs"}}!function(e){e.isThemeColor=function t(e){return e&&"object"==typeof e&&"string"==typeof e.id}}(mn||(mn={})),function(e){e.isThemeIcon=function t(e){return e&&"object"==typeof e&&"string"==typeof e.id&&(void 0===e.color||mn.isThemeColor(e.color))};const i=new RegExp(`^\\$\\((${gn.iconNameExpression}(?:${gn.iconModifierExpression})?)\\)$`);e.fromString=function n(e){const t=i.exec(e);if(!t)return;let[,n]=t;return{id:n}},e.modify=function o(e,t){let i=e.id;const n=i.lastIndexOf("~");return-1!==n&&(i=i.substring(0,n)),t&&(i=`${i}~${t}`),{id:i}},e.isEqual=function s(e,t){var i,n;return e.id===t.id&&(null===(i=e.color)||void 0===i?void 0:i.id)===(null===(n=t.color)||void 0===n?void 0:n.id)},e.asClassNameArray=gn.asClassNameArray,e.asClassName=gn.asClassName,e.asCSSSelector=gn.asCSSSelector}(fn||(fn={}));let vn=new class{constructor(){this.themingParticipants=[],this.themingParticipants=[],this.onThemingParticipantAddedEmitter=new oe}onColorThemeChange(e){return this.themingParticipants.push(e),this.onThemingParticipantAddedEmitter.fire(e),b(()=>{const t=this.themingParticipants.indexOf(e);this.themingParticipants.splice(t,1)})}getThemingParticipants(){return this.themingParticipants}};function Cn(e){return vn.onColorThemeChange(e)}an.add("base.contributions.theming",vn);class wn extends C{constructor(e){super(),this.themeService=e,this.theme=e.getColorTheme(),this._register(this.themeService.onDidColorThemeChange(e=>this.onThemeChange(e)))}onThemeChange(e){this.theme=e,this.updateStyles()}updateStyles(){}}var yn=function(e,t){return function(i,n){t(i,n,e)}};function Sn(e){return void 0!==e.command}class Ln{constructor(e){this.id=Ln._idPool++,this._debugName=e}}Ln._idPool=0,Ln.CommandPalette=new Ln("CommandPalette"),Ln.EditorContext=new Ln("EditorContext"),Ln.EditorContextPeek=new Ln("EditorContextPeek"),Ln.MenubarEditMenu=new Ln("MenubarEditMenu"),Ln.MenubarGoMenu=new Ln("MenubarGoMenu"),Ln.MenubarSelectionMenu=new Ln("MenubarSelectionMenu");const Dn=kt("menuService"),En=new class{constructor(){this._commands=new Map,this._menuItems=new Map,this._onDidChangeMenu=new oe,this.onDidChangeMenu=this._onDidChangeMenu.event,this._commandPaletteChangeEvent={has:e=>e===Ln.CommandPalette}}addCommand(e){return this.addCommands(c.single(e))}addCommands(e){for(const t of e)this._commands.set(t.id,t);return this._onDidChangeMenu.fire(this._commandPaletteChangeEvent),b(()=>{let t=!1;for(const i of e)t=this._commands.delete(i.id)||t;t&&this._onDidChangeMenu.fire(this._commandPaletteChangeEvent)})}getCommand(e){return this._commands.get(e)}getCommands(){const e=new Map;return this._commands.forEach((t,i)=>e.set(i,t)),e}appendMenuItem(e,t){return this.appendMenuItems(c.single({id:e,item:t}))}appendMenuItems(e){const t=new Set,i=new L;for(const{id:n,item:o}of e){let e=this._menuItems.get(n);e||(e=new L,this._menuItems.set(n,e)),i.push(e.push(o)),t.add(n)}return this._onDidChangeMenu.fire(t),b(()=>{if(i.size>0){for(let e of i)e();this._onDidChangeMenu.fire(t),i.clear()}})}getMenuItems(e){let t;return t=this._menuItems.has(e)?[...this._menuItems.get(e)]:[],e===Ln.CommandPalette&&this._appendImplicitItems(t),t}_appendImplicitItems(e){const t=new Set;for(const i of e)Sn(i)&&(t.add(i.command.id),i.alt&&t.add(i.alt.id));this._commands.forEach((i,n)=>{t.has(n)||e.push({command:i})})}};class xn extends Wt{constructor(e,t,i,n){super(`submenuitem.${e.submenu.id}`,"string"==typeof e.title?e.title:e.title.value,[],"submenu"),this.item=e,this._menuService=t,this._contextKeyService=i,this._options=n}get actions(){const e=[],t=this._menuService.createMenu(this.item.submenu,this._contextKeyService),i=t.getActions(this._options);t.dispose();for(const[,t]of i)t.length>0&&(e.push(...t),e.push(new Bt));return e.length&&e.pop(),e}}let kn=class e{constructor(t,i,n,o,s){var r;if(this._commandService=s,this.id=t.id,this.label="string"==typeof t.title?t.title:t.title.value,this.tooltip=null!==(r=t.tooltip)&&void 0!==r?r:"",this.enabled=!t.precondition||o.contextMatchesRules(t.precondition),this.checked=!1,t.toggled){const e=t.toggled.condition?t.toggled:{condition:t.toggled};this.checked=o.contextMatchesRules(e.condition),this.checked&&e.tooltip&&(this.tooltip="string"==typeof e.tooltip?e.tooltip:e.tooltip.value)}this.item=t,this.alt=i?new e(i,void 0,n,o,s):void 0,this._options=n,fn.isThemeIcon(t.icon)&&(this.class=gn.asClassName(t.icon))}dispose(){}run(...e){var t,i;let n=[];return(null===(t=this._options)||void 0===t?void 0:t.arg)&&(n=[...n,this._options.arg]),(null===(i=this._options)||void 0===i?void 0:i.shouldForwardArgs)&&(n=[...n,...e]),this._commandService.executeCommand(this.id,...n)}};kn=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([yn(3,en),yn(4,on)],kn);class Nn{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}}const In=new Nn,Tn=new Nn,An=new Nn;var Mn;function On(e,t){return(e|(65535&t)<<16>>>0)>>>0}function Rn(e,t){if(0===e)return null;const i=(65535&e)>>>0,n=(4294901760&e)>>>16;return new Bn(0!==n?[Pn(i,t),Pn(n,t)]:[Pn(i,t)])}function Pn(e,t){const i=!!(2048&e),n=!!(256&e);return new Fn(2===t?n:i,!!(1024&e),!!(512&e),2===t?i:n,255&e)}!function(){function e(e,t,i=t,n=i){In.define(e,t),Tn.define(e,i),An.define(e,n)}e(0,"unknown"),e(1,"Backspace"),e(2,"Tab"),e(3,"Enter"),e(4,"Shift"),e(5,"Ctrl"),e(6,"Alt"),e(7,"PauseBreak"),e(8,"CapsLock"),e(9,"Escape"),e(10,"Space"),e(11,"PageUp"),e(12,"PageDown"),e(13,"End"),e(14,"Home"),e(15,"LeftArrow","Left"),e(16,"UpArrow","Up"),e(17,"RightArrow","Right"),e(18,"DownArrow","Down"),e(19,"Insert"),e(20,"Delete"),e(21,"0"),e(22,"1"),e(23,"2"),e(24,"3"),e(25,"4"),e(26,"5"),e(27,"6"),e(28,"7"),e(29,"8"),e(30,"9"),e(31,"A"),e(32,"B"),e(33,"C"),e(34,"D"),e(35,"E"),e(36,"F"),e(37,"G"),e(38,"H"),e(39,"I"),e(40,"J"),e(41,"K"),e(42,"L"),e(43,"M"),e(44,"N"),e(45,"O"),e(46,"P"),e(47,"Q"),e(48,"R"),e(49,"S"),e(50,"T"),e(51,"U"),e(52,"V"),e(53,"W"),e(54,"X"),e(55,"Y"),e(56,"Z"),e(57,"Meta"),e(58,"ContextMenu"),e(59,"F1"),e(60,"F2"),e(61,"F3"),e(62,"F4"),e(63,"F5"),e(64,"F6"),e(65,"F7"),e(66,"F8"),e(67,"F9"),e(68,"F10"),e(69,"F11"),e(70,"F12"),e(71,"F13"),e(72,"F14"),e(73,"F15"),e(74,"F16"),e(75,"F17"),e(76,"F18"),e(77,"F19"),e(78,"NumLock"),e(79,"ScrollLock"),e(80,";",";","OEM_1"),e(81,"=","=","OEM_PLUS"),e(82,",",",","OEM_COMMA"),e(83,"-","-","OEM_MINUS"),e(84,".",".","OEM_PERIOD"),e(85,"/","/","OEM_2"),e(86,"`","`","OEM_3"),e(110,"ABNT_C1"),e(111,"ABNT_C2"),e(87,"[","[","OEM_4"),e(88,"\\","\\","OEM_5"),e(89,"]","]","OEM_6"),e(90,"'","'","OEM_7"),e(91,"OEM_8"),e(92,"OEM_102"),e(93,"NumPad0"),e(94,"NumPad1"),e(95,"NumPad2"),e(96,"NumPad3"),e(97,"NumPad4"),e(98,"NumPad5"),e(99,"NumPad6"),e(100,"NumPad7"),e(101,"NumPad8"),e(102,"NumPad9"),e(103,"NumPad_Multiply"),e(104,"NumPad_Add"),e(105,"NumPad_Separator"),e(106,"NumPad_Subtract"),e(107,"NumPad_Decimal"),e(108,"NumPad_Divide")}(),function(e){e.toString=function t(e){return In.keyCodeToStr(e)},e.fromString=function i(e){return In.strToKeyCode(e)},e.toUserSettingsUS=function n(e){return Tn.keyCodeToStr(e)},e.toUserSettingsGeneral=function o(e){return An.keyCodeToStr(e)},e.fromUserSettings=function s(e){return Tn.strToKeyCode(e)||An.strToKeyCode(e)}}(Mn||(Mn={}));class Fn{constructor(e,t,i,n,o){this.ctrlKey=e,this.shiftKey=t,this.altKey=i,this.metaKey=n,this.keyCode=o}equals(e){return this.ctrlKey===e.ctrlKey&&this.shiftKey===e.shiftKey&&this.altKey===e.altKey&&this.metaKey===e.metaKey&&this.keyCode===e.keyCode}isModifierKey(){return 0===this.keyCode||5===this.keyCode||57===this.keyCode||6===this.keyCode||4===this.keyCode}toChord(){return new Bn([this])}isDuplicateModifierCase(){return this.ctrlKey&&5===this.keyCode||this.shiftKey&&4===this.keyCode||this.altKey&&6===this.keyCode||this.metaKey&&57===this.keyCode}}class Bn{constructor(e){if(0===e.length)throw h("parts");this.parts=e}}class Wn{constructor(e,t,i,n,o,s){this.ctrlKey=e,this.shiftKey=t,this.altKey=i,this.metaKey=n,this.keyLabel=o,this.keyAriaLabel=s}}class Vn{}class zn{constructor(){this._coreKeybindings=[],this._extensionKeybindings=[],this._cachedMergedKeybindings=null}static bindToCurrentPlatform(e){if(1===Z){if(e&&e.win)return e.win}else if(2===Z){if(e&&e.mac)return e.mac}else if(e&&e.linux)return e.linux;return e}registerKeybindingRule(e){const t=zn.bindToCurrentPlatform(e);if(t&&t.primary){const i=Rn(t.primary,Z);i&&this._registerDefaultKeybinding(i,e.id,e.args,e.weight,0,e.when)}if(t&&Array.isArray(t.secondary))for(let i=0,n=t.secondary.length;i=21&&e<=30||e>=31&&e<=56||80===e||81===e||82===e||83===e||84===e||85===e||86===e||110===e||111===e||87===e||88===e||89===e||90===e||91===e||92===e}_assertNoCtrlAlt(e,t){e.ctrlKey&&e.altKey&&!e.metaKey&&zn._mightProduceChar(e.keyCode)&&console.warn("Ctrl+Alt+ keybindings should not be used by default under Windows. Offender: ",e," for ",t)}_registerDefaultKeybinding(e,t,i,n,o,s){1===Z&&this._assertNoCtrlAlt(e.parts[0],t),this._coreKeybindings.push({keybinding:e,command:t,commandArgs:i,when:s,weight1:n,weight2:o,extensionId:null,isBuiltinExtension:!1}),this._cachedMergedKeybindings=null}getDefaultKeybindings(){return this._cachedMergedKeybindings||(this._cachedMergedKeybindings=[].concat(this._coreKeybindings).concat(this._extensionKeybindings),this._cachedMergedKeybindings.sort(Un)),this._cachedMergedKeybindings.slice(0)}}const Hn=new zn;function Un(e,t){return e.weight1!==t.weight1?e.weight1-t.weight1:e.commandt.command?1:e.weight2-t.weight2}an.add("platform.keybindingsRegistry",Hn);const Kn=kt("telemetryService");class $n{constructor(e){this.id=e.id,this.precondition=e.precondition,this._kbOpts=e.kbOpts,this._menuOpts=e.menuOpts,this._description=e.description}register(){if(Array.isArray(this._menuOpts)?this._menuOpts.forEach(this._registerMenuItem,this):this._menuOpts&&this._registerMenuItem(this._menuOpts),this._kbOpts){let e=this._kbOpts.kbExpr;this.precondition&&(e=e?Ri.and(e,this.precondition):this.precondition),Hn.registerCommandAndKeybindingRule({id:this.id,handler:(e,t)=>this.runCommand(e,t),weight:this._kbOpts.weight,args:this._kbOpts.args,when:e,primary:this._kbOpts.primary,secondary:this._kbOpts.secondary,win:this._kbOpts.win,linux:this._kbOpts.linux,mac:this._kbOpts.mac,description:this._description})}else sn.registerCommand({id:this.id,handler:(e,t)=>this.runCommand(e,t),description:this._description})}_registerMenuItem(e){En.appendMenuItem(e.menuId,{group:e.group,command:{id:this.id,title:e.title,icon:e.icon,precondition:this.precondition},when:e.when,order:e.order})}}class jn extends $n{constructor(){super(...arguments),this._implementations=[]}addImplementation(e,t){return this._implementations.push([e,t]),this._implementations.sort((e,t)=>t[0]-e[0]),{dispose:()=>{for(let e=0;e{if(e.get(en).contextMatchesRules(Re(this.precondition)))return this.runEditorCommand(e,n,t)})}}class Yn extends Gn{constructor(e){super(Yn.convertOptions(e)),this.label=e.label,this.alias=e.alias}static convertOptions(e){let t;function i(t){return t.menuId||(t.menuId=Ln.EditorContext),t.title||(t.title=e.label),t.when=Ri.and(e.precondition,t.when),t}return t=Array.isArray(e.menuOpts)?e.menuOpts:e.menuOpts?[e.menuOpts]:[],Array.isArray(e.contextMenuOpts)?t.push(...e.contextMenuOpts.map(i)):e.contextMenuOpts&&t.push(i(e.contextMenuOpts)),e.menuOpts=t,e}runEditorCommand(e,t,i){return this.reportTelemetry(e,t),this.run(e,t,i||{})}reportTelemetry(e,t){e.get(Kn).publicLog2("editorActionInvoked",{name:this.label,id:this.id})}}function Zn(e,t){sn.registerCommand(e,(function(e,...i){const[n,o]=i;Ne(mt.isUri(n)),Ne(Tt.isIPosition(o));const s=e.get(At).getModel(n);if(s){const e=Tt.lift(o);return t(s,e,...i.slice(2))}return e.get(Ot).createModelReference(n).then(e=>new Promise((n,s)=>{try{n(t(e.object.textEditorModel,Tt.lift(o),i.slice(2)))}catch(e){s(e)}}).finally(()=>{e.dispose()}))}))}function Xn(e){return to.INSTANCE.registerEditorCommand(e),e}function Qn(e){const t=new e;return to.INSTANCE.registerEditorAction(t),t}function Jn(e,t){to.INSTANCE.registerEditorContribution(e,t)}var eo;!function(e){e.getEditorCommand=function t(e){return to.INSTANCE.getEditorCommand(e)},e.getEditorActions=function i(){return to.INSTANCE.getEditorActions()},e.getEditorContributions=function n(){return to.INSTANCE.getEditorContributions()},e.getSomeEditorContributions=function o(e){return to.INSTANCE.getEditorContributions().filter(t=>e.indexOf(t.id)>=0)},e.getDiffEditorContributions=function s(){return to.INSTANCE.getDiffEditorContributions()}}(eo||(eo={}));class to{constructor(){this.editorContributions=[],this.diffEditorContributions=[],this.editorActions=[],this.editorCommands=Object.create(null)}registerEditorContribution(e,t){this.editorContributions.push({id:e,ctor:t})}getEditorContributions(){return this.editorContributions.slice(0)}getDiffEditorContributions(){return this.diffEditorContributions.slice(0)}registerEditorAction(e){e.register(),this.editorActions.push(e)}getEditorActions(){return this.editorActions.slice(0)}registerEditorCommand(e){e.register(),this.editorCommands[e.id]=e}getEditorCommand(e){return this.editorCommands[e]||null}}function io(e){return e.register(),e}to.INSTANCE=new to,an.add("editor.contributions",to.INSTANCE);const no=io(new jn({id:"undo",precondition:void 0,kbOpts:{weight:0,primary:2104},menuOpts:[{menuId:Ln.MenubarEditMenu,group:"1_do",title:t(0,"&&Undo"),order:1},{menuId:Ln.CommandPalette,group:"",title:t(0,"Undo"),order:1}]}));io(new qn(no,{id:"default:undo",precondition:void 0}));const oo=io(new jn({id:"redo",precondition:void 0,kbOpts:{weight:0,primary:2103,secondary:[3128],mac:{primary:3128}},menuOpts:[{menuId:Ln.MenubarEditMenu,group:"1_do",title:t(0,"&&Redo"),order:2},{menuId:Ln.CommandPalette,group:"",title:t(0,"Redo"),order:1}]}));io(new qn(oo,{id:"default:redo",precondition:void 0}));const so=io(new jn({id:"editor.action.selectAll",precondition:void 0,kbOpts:{weight:0,kbExpr:null,primary:2079},menuOpts:[{menuId:Ln.MenubarSelectionMenu,group:"1_basic",title:t(0,"&&Select All"),order:1},{menuId:Ln.CommandPalette,group:"",title:t(0,"Select All"),order:1}]}));class ro{constructor(e,t,i,n){e>i||e===i&&t>n?(this.startLineNumber=i,this.startColumn=n,this.endLineNumber=e,this.endColumn=t):(this.startLineNumber=e,this.startColumn=t,this.endLineNumber=i,this.endColumn=n)}isEmpty(){return ro.isEmpty(this)}static isEmpty(e){return e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn}containsPosition(e){return ro.containsPosition(this,e)}static containsPosition(e,t){return!(t.lineNumbere.endLineNumber||t.lineNumber===e.startLineNumber&&t.columne.endColumn)}containsRange(e){return ro.containsRange(this,e)}static containsRange(e,t){return!(t.startLineNumbere.endLineNumber||t.endLineNumber>e.endLineNumber||t.startLineNumber===e.startLineNumber&&t.startColumne.endColumn)}strictContainsRange(e){return ro.strictContainsRange(this,e)}static strictContainsRange(e,t){return!(t.startLineNumbere.endLineNumber||t.endLineNumber>e.endLineNumber||t.startLineNumber===e.startLineNumber&&t.startColumn<=e.startColumn||t.endLineNumber===e.endLineNumber&&t.endColumn>=e.endColumn)}plusRange(e){return ro.plusRange(this,e)}static plusRange(e,t){let i,n,o,s;return t.startLineNumbere.endLineNumber?(o=t.endLineNumber,s=t.endColumn):t.endLineNumber===e.endLineNumber?(o=t.endLineNumber,s=Math.max(t.endColumn,e.endColumn)):(o=e.endLineNumber,s=e.endColumn),new ro(i,n,o,s)}intersectRanges(e){return ro.intersectRanges(this,e)}static intersectRanges(e,t){let i=e.startLineNumber,n=e.startColumn,o=e.endLineNumber,s=e.endColumn,r=t.startLineNumber,a=t.startColumn,l=t.endLineNumber,h=t.endColumn;return il?(o=l,s=h):o===l&&(s=Math.min(s,h)),i>o?null:i===o&&n>s?null:new ro(i,n,o,s)}equalsRange(e){return ro.equalsRange(this,e)}static equalsRange(e,t){return!!e&&!!t&&e.startLineNumber===t.startLineNumber&&e.startColumn===t.startColumn&&e.endLineNumber===t.endLineNumber&&e.endColumn===t.endColumn}getEndPosition(){return ro.getEndPosition(this)}static getEndPosition(e){return new Tt(e.endLineNumber,e.endColumn)}getStartPosition(){return ro.getStartPosition(this)}static getStartPosition(e){return new Tt(e.startLineNumber,e.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(e,t){return new ro(this.startLineNumber,this.startColumn,e,t)}setStartPosition(e,t){return new ro(e,t,this.endLineNumber,this.endColumn)}collapseToStart(){return ro.collapseToStart(this)}static collapseToStart(e){return new ro(e.startLineNumber,e.startColumn,e.startLineNumber,e.startColumn)}static fromPositions(e,t=e){return new ro(e.lineNumber,e.column,t.lineNumber,t.column)}static lift(e){return e?new ro(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn):null}static isIRange(e){return e&&"number"==typeof e.startLineNumber&&"number"==typeof e.startColumn&&"number"==typeof e.endLineNumber&&"number"==typeof e.endColumn}static areIntersectingOrTouching(e,t){return!(e.endLineNumbere.startLineNumber}}class ao extends ro{constructor(e,t,i,n){super(e,t,i,n),this.selectionStartLineNumber=e,this.selectionStartColumn=t,this.positionLineNumber=i,this.positionColumn=n}toString(){return"["+this.selectionStartLineNumber+","+this.selectionStartColumn+" -> "+this.positionLineNumber+","+this.positionColumn+"]"}equalsSelection(e){return ao.selectionsEqual(this,e)}static selectionsEqual(e,t){return e.selectionStartLineNumber===t.selectionStartLineNumber&&e.selectionStartColumn===t.selectionStartColumn&&e.positionLineNumber===t.positionLineNumber&&e.positionColumn===t.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(e,t){return 0===this.getDirection()?new ao(this.startLineNumber,this.startColumn,e,t):new ao(e,t,this.startLineNumber,this.startColumn)}getPosition(){return new Tt(this.positionLineNumber,this.positionColumn)}setStartPosition(e,t){return 0===this.getDirection()?new ao(e,t,this.endLineNumber,this.endColumn):new ao(this.endLineNumber,this.endColumn,e,t)}static fromPositions(e,t=e){return new ao(e.lineNumber,e.column,t.lineNumber,t.column)}static liftSelection(e){return new ao(e.selectionStartLineNumber,e.selectionStartColumn,e.positionLineNumber,e.positionColumn)}static selectionsArrEqual(e,t){if(e&&!t||!e&&t)return!1;if(!e&&!t)return!0;if(e.length!==t.length)return!1;for(let i=0,n=e.length;i/?")e.indexOf(i)>=0||(t+="\\"+i);return t+="\\s]+)",new RegExp(t,"g")}();function co(e){let t=lo;if(e&&e instanceof RegExp)if(e.global)t=e;else{let i="g";e.ignoreCase&&(i+="i"),e.multiline&&(i+="m"),e.unicode&&(i+="u"),t=new RegExp(e.source,i)}return t.lastIndex=0,t}const uo={maxLen:1e3,windowSize:15,timeBudget:150};function go(e,t,i,n,o=uo){if(i.length>o.maxLen){let s=e-o.maxLen/2;return s<0?s=0:n+=s,go(e,t,i=i.substring(s,e+o.maxLen/2),n,o)}const s=Date.now(),r=e-1-n;let a=-1,l=null;for(let e=1;!(Date.now()-s>=o.timeBudget);e++){const n=r-o.windowSize*e;t.lastIndex=Math.max(0,n);const s=po(t,i,r,a);if(!s&&l)break;if(l=s,n<=0)break;a=n}if(l){let e={word:l[0],startColumn:n+1+l.index,endColumn:n+1+l.index+l[0].length};return t.lastIndex=0,e}return null}function po(e,t,i,n){let o;for(;o=e.exec(t);){const t=o.index||0;if(t<=i&&e.lastIndex>=i)return o;if(n>0&&t>n)return null}return null}const mo=8;class fo{constructor(e){this._values=e}hasChanged(e){return this._values[e]}}class _o{constructor(){this._values=[]}_read(e){return this._values[e]}get(e){return this._values[e]}_write(e,t){this._values[e]=t}}class bo{constructor(){this.stableMinimapLayoutInput=null,this.stableFitMaxMinimapScale=0,this.stableFitRemainingWidth=0}}class vo{constructor(e,t,i,n){this.id=e,this.name=t,this.defaultValue=i,this.schema=n}compute(e,t,i){return i}}class Co{constructor(e,t=null){this.schema=void 0,this.id=e,this.name="_never_",this.defaultValue=void 0,this.deps=t}validate(e){return this.defaultValue}}class wo{constructor(e,t,i,n){this.id=e,this.name=t,this.defaultValue=i,this.schema=n}validate(e){return void 0===e?this.defaultValue:e}compute(e,t,i){return i}}function yo(e,t){return void 0===e?t:"false"!==e&&Boolean(e)}class So extends wo{constructor(e,t,i,n){void 0!==n&&(n.type="boolean",n.default=i),super(e,t,i,n)}validate(e){return yo(e,this.defaultValue)}}class Lo extends wo{constructor(e,t,i,n,o,s){void 0!==s&&(s.type="integer",s.default=i,s.minimum=n,s.maximum=o),super(e,t,i,s),this.minimum=n,this.maximum=o}static clampedInt(e,t,i,n){if(void 0===e)return t;let o=parseInt(e,10);return isNaN(o)?t:(o=Math.max(i,o),0|(o=Math.min(n,o)))}validate(e){return Lo.clampedInt(e,this.defaultValue,this.minimum,this.maximum)}}class Do extends wo{constructor(e,t,i,n,o){void 0!==o&&(o.type="number",o.default=i),super(e,t,i,o),this.validationFn=n}static clamp(e,t,i){return ei?i:e}static float(e,t){if("number"==typeof e)return e;if(void 0===e)return t;const i=parseFloat(e);return isNaN(i)?t:i}validate(e){return this.validationFn(Do.float(e,this.defaultValue))}}class Eo extends wo{static string(e,t){return"string"!=typeof e?t:e}constructor(e,t,i,n){void 0!==n&&(n.type="string",n.default=i),super(e,t,i,n)}validate(e){return Eo.string(e,this.defaultValue)}}function xo(e,t,i){return"string"!=typeof e?t:-1===i.indexOf(e)?t:e}class ko extends wo{constructor(e,t,i,n,o){void 0!==o&&(o.type="string",o.enum=n,o.default=i),super(e,t,i,o),this._allowedValues=n}validate(e){return xo(e,this.defaultValue,this._allowedValues)}}class No extends vo{constructor(e,t,i,n,o,s,r){void 0!==r&&(r.type="string",r.enum=o,r.default=n),super(e,t,i,r),this._allowedValues=o,this._convert=s}validate(e){return"string"!=typeof e?this.defaultValue:-1===this._allowedValues.indexOf(e)?this.defaultValue:this._convert(e)}}var Io;!function(e){e[e.Line=1]="Line",e[e.Block=2]="Block",e[e.Underline=3]="Underline",e[e.LineThin=4]="LineThin",e[e.BlockOutline=5]="BlockOutline",e[e.UnderlineThin=6]="UnderlineThin"}(Io||(Io={}));class To extends vo{constructor(){super(39,"fontLigatures",To.OFF,{anyOf:[{type:"boolean",description:t(0,"Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.")},{type:"string",description:t(0,"Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.")}],description:t(0,"Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property."),default:!1})}validate(e){return void 0===e?this.defaultValue:"string"==typeof e?"false"===e?To.OFF:"true"===e?To.ON:e:Boolean(e)?To.ON:To.OFF}}To.OFF='"liga" off, "calt" off',To.ON='"liga" on, "calt" on';class Ao extends vo{constructor(){super(41,"fontWeight",Po.fontWeight,{anyOf:[{type:"number",minimum:Ao.MINIMUM_VALUE,maximum:Ao.MAXIMUM_VALUE,errorMessage:t(0,'Only "normal" and "bold" keywords or numbers between 1 and 1000 are allowed.')},{type:"string",pattern:"^(normal|bold|1000|[1-9][0-9]{0,2})$"},{enum:Ao.SUGGESTION_VALUES}],default:Po.fontWeight,description:t(0,'Controls the font weight. Accepts "normal" and "bold" keywords or numbers between 1 and 1000.')})}validate(e){return"normal"===e||"bold"===e?e:String(Lo.clampedInt(e,Po.fontWeight,Ao.MINIMUM_VALUE,Ao.MAXIMUM_VALUE))}}Ao.SUGGESTION_VALUES=["normal","bold","100","200","300","400","500","600","700","800","900"],Ao.MINIMUM_VALUE=1,Ao.MAXIMUM_VALUE=1e3;class Mo extends Co{constructor(){super(129,[44,53,33,60,90,55,56,92,116,119,120,121,2])}compute(e,t,i){return Mo.computeLayout(t,{memory:e.memory,outerWidth:e.outerWidth,outerHeight:e.outerHeight,isDominatedByLongLines:e.isDominatedByLongLines,lineHeight:e.fontInfo.lineHeight,viewLineCount:e.viewLineCount,lineNumbersDigitCount:e.lineNumbersDigitCount,typicalHalfwidthCharacterWidth:e.fontInfo.typicalHalfwidthCharacterWidth,maxDigitWidth:e.fontInfo.maxDigitWidth,pixelRatio:e.pixelRatio})}static computeContainedMinimapLineCount(e){const t=e.height/e.lineHeight,i=e.scrollBeyondLastLine?t-1:0,n=(e.viewLineCount+i)/(e.pixelRatio*e.height);return{typicalViewportLineCount:t,extraLinesBeyondLastLine:i,desiredRatio:n,minimapLineCount:Math.floor(e.viewLineCount/n)}}static _computeMinimapLayout(e,t){const i=e.outerWidth,n=e.outerHeight,o=e.pixelRatio;if(!e.minimap.enabled)return{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:Math.floor(o*n),minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:n};const s=t.stableMinimapLayoutInput,r=s&&e.outerHeight===s.outerHeight&&e.lineHeight===s.lineHeight&&e.typicalHalfwidthCharacterWidth===s.typicalHalfwidthCharacterWidth&&e.pixelRatio===s.pixelRatio&&e.scrollBeyondLastLine===s.scrollBeyondLastLine&&e.minimap.enabled===s.minimap.enabled&&e.minimap.side===s.minimap.side&&e.minimap.size===s.minimap.size&&e.minimap.showSlider===s.minimap.showSlider&&e.minimap.renderCharacters===s.minimap.renderCharacters&&e.minimap.maxColumn===s.minimap.maxColumn&&e.minimap.scale===s.minimap.scale&&e.verticalScrollbarWidth===s.verticalScrollbarWidth&&e.isViewportWrapping===s.isViewportWrapping,a=e.lineHeight,l=e.typicalHalfwidthCharacterWidth,h=e.scrollBeyondLastLine,c=e.minimap.renderCharacters;let d=o>=2?Math.round(2*e.minimap.scale):e.minimap.scale;const u=e.minimap.maxColumn,g=e.minimap.size,p=e.minimap.side,m=e.verticalScrollbarWidth,f=e.viewLineCount,_=e.remainingWidth,b=e.isViewportWrapping,v=c?2:3;let C=Math.floor(o*n);const w=C/o;let y=!1,S=!1,L=v*d,D=d/o,E=1;if("fill"===g||"fit"===g){const{typicalViewportLineCount:i,extraLinesBeyondLastLine:s,desiredRatio:l,minimapLineCount:c}=Mo.computeContainedMinimapLineCount({viewLineCount:f,scrollBeyondLastLine:h,height:n,lineHeight:a,pixelRatio:o});if(f/c>1)y=!0,S=!0,L=1,D=(d=1)/o;else{let n=!1,h=d+1;if("fit"===g){const i=Math.ceil((f+s)*L);b&&r&&_<=t.stableFitRemainingWidth?(n=!0,h=t.stableFitMaxMinimapScale):(n=i>C,b&&n?(t.stableMinimapLayoutInput=e,t.stableFitRemainingWidth=_):(t.stableMinimapLayoutInput=null,t.stableFitRemainingWidth=0))}if("fill"===g||n){y=!0;const e=d;L=Math.min(a*o,Math.max(1,Math.floor(1/l))),(d=Math.min(h,Math.max(1,Math.floor(L/v))))>e&&(E=Math.min(2,d/e)),D=d/o/E,C=Math.ceil(Math.max(i,f+s)*L),b&&n&&(t.stableFitMaxMinimapScale=d)}}}const x=Math.floor(u*D),k=Math.min(x,Math.max(0,Math.floor((_-m-2)*D/(l+D)))+mo);let N=Math.floor(o*k);const I=N/o;return{renderMinimap:c?1:2,minimapLeft:"left"===p?0:i-k-m,minimapWidth:k,minimapHeightIsEditorHeight:y,minimapIsSampling:S,minimapScale:d,minimapLineHeight:L,minimapCanvasInnerWidth:N=Math.floor(N*E),minimapCanvasInnerHeight:C,minimapCanvasOuterWidth:I,minimapCanvasOuterHeight:w}}static computeLayout(e,t){const i=0|t.outerWidth,n=0|t.outerHeight,o=0|t.lineHeight,s=0|t.lineNumbersDigitCount,r=t.typicalHalfwidthCharacterWidth,a=t.maxDigitWidth,l=t.pixelRatio,h=t.viewLineCount,c=e.get(121),d="inherit"===c?e.get(120):c,u="inherit"===d?e.get(116):d,g=e.get(119),p=e.get(2),m=t.isDominatedByLongLines,f=e.get(44),_=0!==e.get(55).renderType,b=e.get(56),v=e.get(92),C=e.get(60),w=e.get(90),y=w.verticalScrollbarSize,S=w.verticalHasArrows,L=w.arrowSize,D=w.horizontalScrollbarSize,E=e.get(53),x=e.get(33);let k;if("string"==typeof E&&/^\d+(\.\d+)?ch$/.test(E)){const e=parseFloat(E.substr(0,E.length-2));k=Lo.clampedInt(e*r,0,0,1e3)}else k=Lo.clampedInt(E,0,0,1e3);x&&(k+=16);let N=0;if(_){const e=Math.max(s,b);N=Math.round(e*a)}let I=0;f&&(I=o);let T=0,A=T+I,M=A+N,O=M+k;const R=i-I-N-k;let P=!1,F=!1,B=-1;2!==p&&("inherit"===d&&m?(P=!0,F=!0):"on"===u||"bounded"===u?F=!0:"wordWrapColumn"===u&&(B=g));const W=Mo._computeMinimapLayout({outerWidth:i,outerHeight:n,lineHeight:o,typicalHalfwidthCharacterWidth:r,pixelRatio:l,scrollBeyondLastLine:v,minimap:C,verticalScrollbarWidth:y,viewLineCount:h,remainingWidth:R,isViewportWrapping:F},t.memory||new bo);0!==W.renderMinimap&&0===W.minimapLeft&&(T+=W.minimapWidth,A+=W.minimapWidth,M+=W.minimapWidth,O+=W.minimapWidth);const V=R-W.minimapWidth,z=Math.max(1,Math.floor((V-y-2)/r)),H=S?L:0;return F&&(B=Math.max(1,z),"bounded"===u&&(B=Math.min(B,g))),{width:i,height:n,glyphMarginLeft:T,glyphMarginWidth:I,lineNumbersLeft:A,lineNumbersWidth:N,decorationsLeft:M,decorationsWidth:k,contentLeft:O,contentWidth:V,minimap:W,viewportColumn:z,isWordWrapMinified:P,isViewportWrapping:F,wrappingColumn:B,verticalScrollbarWidth:y,horizontalScrollbarHeight:D,overviewRuler:{top:H,width:y,height:n-2*H,right:0}}}}function Oo(e){const t=e.get(85);return"editable"===t?e.get(77):"on"!==t}function Ro(e,t){if("string"!=typeof e)return t;switch(e){case"hidden":return 2;case"visible":return 3;default:return 1}}const Po={fontFamily:H?"Menlo, Monaco, 'Courier New', monospace":U?"'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback'":"Consolas, 'Courier New', monospace",fontWeight:"normal",fontSize:H?12:14,lineHeight:0,letterSpacing:0},Fo=[];function Bo(e){return Fo[e.id]=e,e}const Wo={acceptSuggestionOnCommitCharacter:Bo(new So(0,"acceptSuggestionOnCommitCharacter",!0,{markdownDescription:t(0,"Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.")})),acceptSuggestionOnEnter:Bo(new ko(1,"acceptSuggestionOnEnter","on",["on","smart","off"],{markdownEnumDescriptions:["",t(0,"Only accept a suggestion with `Enter` when it makes a textual change."),""],markdownDescription:t(0,"Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.")})),accessibilitySupport:Bo(new class extends vo{constructor(){super(2,"accessibilitySupport",0,{type:"string",enum:["auto","on","off"],enumDescriptions:[t(0,"The editor will use platform APIs to detect when a Screen Reader is attached."),t(0,"The editor will be permanently optimized for usage with a Screen Reader. Word wrapping will be disabled."),t(0,"The editor will never be optimized for usage with a Screen Reader.")],default:"auto",description:t(0,"Controls whether the editor should run in a mode where it is optimized for screen readers. Setting to on will disable word wrapping.")})}validate(e){switch(e){case"auto":return 0;case"off":return 1;case"on":return 2}return this.defaultValue}compute(e,t,i){return 0===i?e.accessibilitySupport:i}}),accessibilityPageSize:Bo(new Lo(3,"accessibilityPageSize",10,1,1073741824,{description:t(0,"Controls the number of lines in the editor that can be read out by a screen reader. Warning: this has a performance implication for numbers larger than the default.")})),ariaLabel:Bo(new Eo(4,"ariaLabel",t(0,"Editor content"))),autoClosingBrackets:Bo(new ko(5,"autoClosingBrackets","languageDefined",["always","languageDefined","beforeWhitespace","never"],{enumDescriptions:["",t(0,"Use language configurations to determine when to autoclose brackets."),t(0,"Autoclose brackets only when the cursor is to the left of whitespace."),""],description:t(0,"Controls whether the editor should automatically close brackets after the user adds an opening bracket.")})),autoClosingOvertype:Bo(new ko(6,"autoClosingOvertype","auto",["always","auto","never"],{enumDescriptions:["",t(0,"Type over closing quotes or brackets only if they were automatically inserted."),""],description:t(0,"Controls whether the editor should type over closing quotes or brackets.")})),autoClosingQuotes:Bo(new ko(7,"autoClosingQuotes","languageDefined",["always","languageDefined","beforeWhitespace","never"],{enumDescriptions:["",t(0,"Use language configurations to determine when to autoclose quotes."),t(0,"Autoclose quotes only when the cursor is to the left of whitespace."),""],description:t(0,"Controls whether the editor should automatically close quotes after the user adds an opening quote.")})),autoIndent:Bo(new No(8,"autoIndent",4,"full",["none","keep","brackets","advanced","full"],(function Vo(e){switch(e){case"none":return 0;case"keep":return 1;case"brackets":return 2;case"advanced":return 3;case"full":return 4}}),{enumDescriptions:[t(0,"The editor will not insert indentation automatically."),t(0,"The editor will keep the current line's indentation."),t(0,"The editor will keep the current line's indentation and honor language defined brackets."),t(0,"The editor will keep the current line's indentation, honor language defined brackets and invoke special onEnterRules defined by languages."),t(0,"The editor will keep the current line's indentation, honor language defined brackets, invoke special onEnterRules defined by languages, and honor indentationRules defined by languages.")],description:t(0,"Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines.")})),automaticLayout:Bo(new So(9,"automaticLayout",!1)),autoSurround:Bo(new ko(10,"autoSurround","languageDefined",["languageDefined","quotes","brackets","never"],{enumDescriptions:[t(0,"Use language configurations to determine when to automatically surround selections."),t(0,"Surround with quotes but not brackets."),t(0,"Surround with brackets but not quotes."),""],description:t(0,"Controls whether the editor should automatically surround selections when typing quotes or brackets.")})),stickyTabStops:Bo(new So(104,"stickyTabStops",!1,{description:t(0,"Emulate selection behaviour of tab characters when using spaces for indentation. Selection will stick to tab stops.")})),codeLens:Bo(new So(11,"codeLens",!0,{description:t(0,"Controls whether the editor shows CodeLens.")})),codeLensFontFamily:Bo(new Eo(12,"codeLensFontFamily","",{description:t(0,"Controls the font family for CodeLens.")})),codeLensFontSize:Bo(new Lo(13,"codeLensFontSize",0,0,100,{type:"number",default:0,minimum:0,maximum:100,description:t(0,"Controls the font size in pixels for CodeLens. When set to `0`, the 90% of `#editor.fontSize#` is used.")})),colorDecorators:Bo(new So(14,"colorDecorators",!0,{description:t(0,"Controls whether the editor should render the inline color decorators and color picker.")})),columnSelection:Bo(new So(15,"columnSelection",!1,{description:t(0,"Enable that the selection with the mouse and keys is doing column selection.")})),comments:Bo(new class extends vo{constructor(){const e={insertSpace:!0,ignoreEmptyLines:!0};super(16,"comments",e,{"editor.comments.insertSpace":{type:"boolean",default:e.insertSpace,description:t(0,"Controls whether a space character is inserted when commenting.")},"editor.comments.ignoreEmptyLines":{type:"boolean",default:e.ignoreEmptyLines,description:t(0,"Controls if empty lines should be ignored with toggle, add or remove actions for line comments.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{insertSpace:yo(t.insertSpace,this.defaultValue.insertSpace),ignoreEmptyLines:yo(t.ignoreEmptyLines,this.defaultValue.ignoreEmptyLines)}}}),contextmenu:Bo(new So(17,"contextmenu",!0)),copyWithSyntaxHighlighting:Bo(new So(18,"copyWithSyntaxHighlighting",!0,{description:t(0,"Controls whether syntax highlighting should be copied into the clipboard.")})),cursorBlinking:Bo(new No(19,"cursorBlinking",1,"blink",["blink","smooth","phase","expand","solid"],(function zo(e){switch(e){case"blink":return 1;case"smooth":return 2;case"phase":return 3;case"expand":return 4;case"solid":return 5}}),{description:t(0,"Control the cursor animation style.")})),cursorSmoothCaretAnimation:Bo(new So(20,"cursorSmoothCaretAnimation",!1,{description:t(0,"Controls whether the smooth caret animation should be enabled.")})),cursorStyle:Bo(new No(21,"cursorStyle",Io.Line,"line",["line","block","underline","line-thin","block-outline","underline-thin"],(function Ho(e){switch(e){case"line":return Io.Line;case"block":return Io.Block;case"underline":return Io.Underline;case"line-thin":return Io.LineThin;case"block-outline":return Io.BlockOutline;case"underline-thin":return Io.UnderlineThin}}),{description:t(0,"Controls the cursor style.")})),cursorSurroundingLines:Bo(new Lo(22,"cursorSurroundingLines",0,0,1073741824,{description:t(0,"Controls the minimal number of visible leading and trailing lines surrounding the cursor. Known as 'scrollOff' or 'scrollOffset' in some other editors.")})),cursorSurroundingLinesStyle:Bo(new ko(23,"cursorSurroundingLinesStyle","default",["default","all"],{enumDescriptions:[t(0,"`cursorSurroundingLines` is enforced only when triggered via the keyboard or API."),t(0,"`cursorSurroundingLines` is enforced always.")],description:t(0,"Controls when `cursorSurroundingLines` should be enforced.")})),cursorWidth:Bo(new Lo(24,"cursorWidth",0,0,1073741824,{markdownDescription:t(0,"Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.")})),disableLayerHinting:Bo(new So(25,"disableLayerHinting",!1)),disableMonospaceOptimizations:Bo(new So(26,"disableMonospaceOptimizations",!1)),dragAndDrop:Bo(new So(27,"dragAndDrop",!0,{description:t(0,"Controls whether the editor should allow moving selections via drag and drop.")})),emptySelectionClipboard:Bo(new class extends So{constructor(){super(28,"emptySelectionClipboard",!0,{description:t(0,"Controls whether copying without a selection copies the current line.")})}compute(e,t,i){return i&&e.emptySelectionClipboard}}),extraEditorClassName:Bo(new Eo(29,"extraEditorClassName","")),fastScrollSensitivity:Bo(new Do(30,"fastScrollSensitivity",5,e=>e<=0?5:e,{markdownDescription:t(0,"Scrolling speed multiplier when pressing `Alt`.")})),find:Bo(new class extends vo{constructor(){const e={cursorMoveOnType:!0,seedSearchStringFromSelection:!0,autoFindInSelection:"never",globalFindClipboard:!1,addExtraSpaceOnTop:!0,loop:!0};super(31,"find",e,{"editor.find.cursorMoveOnType":{type:"boolean",default:e.cursorMoveOnType,description:t(0,"Controls whether the cursor should jump to find matches while typing.")},"editor.find.seedSearchStringFromSelection":{type:"boolean",default:e.seedSearchStringFromSelection,description:t(0,"Controls whether the search string in the Find Widget is seeded from the editor selection.")},"editor.find.autoFindInSelection":{type:"string",enum:["never","always","multiline"],default:e.autoFindInSelection,enumDescriptions:[t(0,"Never turn on Find in selection automatically (default)"),t(0,"Always turn on Find in selection automatically"),t(0,"Turn on Find in selection automatically when multiple lines of content are selected.")],description:t(0,"Controls the condition for turning on find in selection automatically.")},"editor.find.globalFindClipboard":{type:"boolean",default:e.globalFindClipboard,description:t(0,"Controls whether the Find Widget should read or modify the shared find clipboard on macOS."),included:H},"editor.find.addExtraSpaceOnTop":{type:"boolean",default:e.addExtraSpaceOnTop,description:t(0,"Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.")},"editor.find.loop":{type:"boolean",default:e.loop,description:t(0,"Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{cursorMoveOnType:yo(t.cursorMoveOnType,this.defaultValue.cursorMoveOnType),seedSearchStringFromSelection:yo(t.seedSearchStringFromSelection,this.defaultValue.seedSearchStringFromSelection),autoFindInSelection:"boolean"==typeof e.autoFindInSelection?e.autoFindInSelection?"always":"never":xo(t.autoFindInSelection,this.defaultValue.autoFindInSelection,["never","always","multiline"]),globalFindClipboard:yo(t.globalFindClipboard,this.defaultValue.globalFindClipboard),addExtraSpaceOnTop:yo(t.addExtraSpaceOnTop,this.defaultValue.addExtraSpaceOnTop),loop:yo(t.loop,this.defaultValue.loop)}}}),fixedOverflowWidgets:Bo(new So(32,"fixedOverflowWidgets",!1)),folding:Bo(new So(33,"folding",!0,{description:t(0,"Controls whether the editor has code folding enabled.")})),foldingStrategy:Bo(new ko(34,"foldingStrategy","auto",["auto","indentation"],{enumDescriptions:[t(0,"Use a language-specific folding strategy if available, else the indentation-based one."),t(0,"Use the indentation-based folding strategy.")],description:t(0,"Controls the strategy for computing folding ranges.")})),foldingHighlight:Bo(new So(35,"foldingHighlight",!0,{description:t(0,"Controls whether the editor should highlight folded ranges.")})),unfoldOnClickAfterEndOfLine:Bo(new So(36,"unfoldOnClickAfterEndOfLine",!1,{description:t(0,"Controls whether clicking on the empty content after a folded line will unfold the line.")})),fontFamily:Bo(new Eo(37,"fontFamily",Po.fontFamily,{description:t(0,"Controls the font family.")})),fontInfo:Bo(new class extends Co{constructor(){super(38)}compute(e,t,i){return e.fontInfo}}),fontLigatures2:Bo(new To),fontSize:Bo(new class extends wo{constructor(){super(40,"fontSize",Po.fontSize,{type:"number",minimum:6,maximum:100,default:Po.fontSize,description:t(0,"Controls the font size in pixels.")})}validate(e){let t=Do.float(e,this.defaultValue);return 0===t?Po.fontSize:Do.clamp(t,6,100)}compute(e,t,i){return e.fontInfo.fontSize}}),fontWeight:Bo(new Ao),formatOnPaste:Bo(new So(42,"formatOnPaste",!1,{description:t(0,"Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.")})),formatOnType:Bo(new So(43,"formatOnType",!1,{description:t(0,"Controls whether the editor should automatically format the line after typing.")})),glyphMargin:Bo(new So(44,"glyphMargin",!0,{description:t(0,"Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.")})),gotoLocation:Bo(new class extends vo{constructor(){const e={multiple:"peek",multipleDefinitions:"peek",multipleTypeDefinitions:"peek",multipleDeclarations:"peek",multipleImplementations:"peek",multipleReferences:"peek",alternativeDefinitionCommand:"editor.action.goToReferences",alternativeTypeDefinitionCommand:"editor.action.goToReferences",alternativeDeclarationCommand:"editor.action.goToReferences",alternativeImplementationCommand:"",alternativeReferenceCommand:""},i={type:"string",enum:["peek","gotoAndPeek","goto"],default:e.multiple,enumDescriptions:[t(0,"Show peek view of the results (default)"),t(0,"Go to the primary result and show a peek view"),t(0,"Go to the primary result and enable peek-less navigation to others")]};super(45,"gotoLocation",e,{"editor.gotoLocation.multiple":{deprecationMessage:t(0,"This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.")},"editor.gotoLocation.multipleDefinitions":Object.assign({description:t(0,"Controls the behavior the 'Go to Definition'-command when multiple target locations exist.")},i),"editor.gotoLocation.multipleTypeDefinitions":Object.assign({description:t(0,"Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.")},i),"editor.gotoLocation.multipleDeclarations":Object.assign({description:t(0,"Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.")},i),"editor.gotoLocation.multipleImplementations":Object.assign({description:t(0,"Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.")},i),"editor.gotoLocation.multipleReferences":Object.assign({description:t(0,"Controls the behavior the 'Go to References'-command when multiple target locations exist.")},i),"editor.gotoLocation.alternativeDefinitionCommand":{type:"string",default:e.alternativeDefinitionCommand,description:t(0,"Alternative command id that is being executed when the result of 'Go to Definition' is the current location.")},"editor.gotoLocation.alternativeTypeDefinitionCommand":{type:"string",default:e.alternativeTypeDefinitionCommand,description:t(0,"Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.")},"editor.gotoLocation.alternativeDeclarationCommand":{type:"string",default:e.alternativeDeclarationCommand,description:t(0,"Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.")},"editor.gotoLocation.alternativeImplementationCommand":{type:"string",default:e.alternativeImplementationCommand,description:t(0,"Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.")},"editor.gotoLocation.alternativeReferenceCommand":{type:"string",default:e.alternativeReferenceCommand,description:t(0,"Alternative command id that is being executed when the result of 'Go to Reference' is the current location.")}})}validate(e){var t,i,n,o,s;if(!e||"object"!=typeof e)return this.defaultValue;const r=e;return{multiple:xo(r.multiple,this.defaultValue.multiple,["peek","gotoAndPeek","goto"]),multipleDefinitions:null!==(t=r.multipleDefinitions)&&void 0!==t?t:xo(r.multipleDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleTypeDefinitions:null!==(i=r.multipleTypeDefinitions)&&void 0!==i?i:xo(r.multipleTypeDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleDeclarations:null!==(n=r.multipleDeclarations)&&void 0!==n?n:xo(r.multipleDeclarations,"peek",["peek","gotoAndPeek","goto"]),multipleImplementations:null!==(o=r.multipleImplementations)&&void 0!==o?o:xo(r.multipleImplementations,"peek",["peek","gotoAndPeek","goto"]),multipleReferences:null!==(s=r.multipleReferences)&&void 0!==s?s:xo(r.multipleReferences,"peek",["peek","gotoAndPeek","goto"]),alternativeDefinitionCommand:Eo.string(r.alternativeDefinitionCommand,this.defaultValue.alternativeDefinitionCommand),alternativeTypeDefinitionCommand:Eo.string(r.alternativeTypeDefinitionCommand,this.defaultValue.alternativeTypeDefinitionCommand),alternativeDeclarationCommand:Eo.string(r.alternativeDeclarationCommand,this.defaultValue.alternativeDeclarationCommand),alternativeImplementationCommand:Eo.string(r.alternativeImplementationCommand,this.defaultValue.alternativeImplementationCommand),alternativeReferenceCommand:Eo.string(r.alternativeReferenceCommand,this.defaultValue.alternativeReferenceCommand)}}}),hideCursorInOverviewRuler:Bo(new So(46,"hideCursorInOverviewRuler",!1,{description:t(0,"Controls whether the cursor should be hidden in the overview ruler.")})),highlightActiveIndentGuide:Bo(new So(47,"highlightActiveIndentGuide",!0,{description:t(0,"Controls whether the editor should highlight the active indent guide.")})),hover:Bo(new class extends vo{constructor(){const e={enabled:!0,delay:300,sticky:!0};super(48,"hover",e,{"editor.hover.enabled":{type:"boolean",default:e.enabled,description:t(0,"Controls whether the hover is shown.")},"editor.hover.delay":{type:"number",default:e.delay,description:t(0,"Controls the delay in milliseconds after which the hover is shown.")},"editor.hover.sticky":{type:"boolean",default:e.sticky,description:t(0,"Controls whether the hover should remain visible when mouse is moved over it.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:yo(t.enabled,this.defaultValue.enabled),delay:Lo.clampedInt(t.delay,this.defaultValue.delay,0,1e4),sticky:yo(t.sticky,this.defaultValue.sticky)}}}),inDiffEditor:Bo(new So(49,"inDiffEditor",!1)),jumpOutOfAutoCloseOnTab:Bo(new So(50,"jumpOutOfAutoClosedOnTab",!1)),letterSpacing:Bo(new Do(51,"letterSpacing",Po.letterSpacing,e=>Do.clamp(e,-5,20),{description:t(0,"Controls the letter spacing in pixels.")})),lightbulb:Bo(new class extends vo{constructor(){const e={enabled:!0};super(52,"lightbulb",e,{"editor.lightbulb.enabled":{type:"boolean",default:e.enabled,description:t(0,"Enables the code action lightbulb in the editor.")}})}validate(e){return e&&"object"==typeof e?{enabled:yo(e.enabled,this.defaultValue.enabled)}:this.defaultValue}}),lineDecorationsWidth:Bo(new wo(53,"lineDecorationsWidth",10)),lineHeight:Bo(new class extends Lo{constructor(){super(54,"lineHeight",Po.lineHeight,0,150,{description:t(0,"Controls the line height. Use 0 to compute the line height from the font size.")})}compute(e,t,i){return e.fontInfo.lineHeight}}),lineNumbers:Bo(new class extends vo{constructor(){super(55,"lineNumbers",{renderType:1,renderFn:null},{type:"string",enum:["off","on","relative","interval"],enumDescriptions:[t(0,"Line numbers are not rendered."),t(0,"Line numbers are rendered as absolute number."),t(0,"Line numbers are rendered as distance in lines to cursor position."),t(0,"Line numbers are rendered every 10 lines.")],default:"on",description:t(0,"Controls the display of line numbers.")})}validate(e){let t=this.defaultValue.renderType,i=this.defaultValue.renderFn;return void 0!==e&&("function"==typeof e?(t=4,i=e):t="interval"===e?3:"relative"===e?2:"on"===e?1:0),{renderType:t,renderFn:i}}}),lineNumbersMinChars:Bo(new Lo(56,"lineNumbersMinChars",5,1,300)),linkedEditing:Bo(new So(57,"linkedEditing",!1,{description:t(0,"Controls whether the editor has linked editing enabled. Depending on the language, related symbols, e.g. HTML tags, are updated while editing.")})),links:Bo(new So(58,"links",!0,{description:t(0,"Controls whether the editor should detect links and make them clickable.")})),matchBrackets:Bo(new ko(59,"matchBrackets","always",["always","near","never"],{description:t(0,"Highlight matching brackets.")})),minimap:Bo(new class extends vo{constructor(){const e={enabled:!0,size:"proportional",side:"right",showSlider:"mouseover",renderCharacters:!0,maxColumn:120,scale:1};super(60,"minimap",e,{"editor.minimap.enabled":{type:"boolean",default:e.enabled,description:t(0,"Controls whether the minimap is shown.")},"editor.minimap.size":{type:"string",enum:["proportional","fill","fit"],enumDescriptions:[t(0,"The minimap has the same size as the editor contents (and might scroll)."),t(0,"The minimap will stretch or shrink as necessary to fill the height of the editor (no scrolling)."),t(0,"The minimap will shrink as necessary to never be larger than the editor (no scrolling).")],default:e.size,description:t(0,"Controls the size of the minimap.")},"editor.minimap.side":{type:"string",enum:["left","right"],default:e.side,description:t(0,"Controls the side where to render the minimap.")},"editor.minimap.showSlider":{type:"string",enum:["always","mouseover"],default:e.showSlider,description:t(0,"Controls when the minimap slider is shown.")},"editor.minimap.scale":{type:"number",default:e.scale,minimum:1,maximum:3,enum:[1,2,3],description:t(0,"Scale of content drawn in the minimap: 1, 2 or 3.")},"editor.minimap.renderCharacters":{type:"boolean",default:e.renderCharacters,description:t(0,"Render the actual characters on a line as opposed to color blocks.")},"editor.minimap.maxColumn":{type:"number",default:e.maxColumn,description:t(0,"Limit the width of the minimap to render at most a certain number of columns.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:yo(t.enabled,this.defaultValue.enabled),size:xo(t.size,this.defaultValue.size,["proportional","fill","fit"]),side:xo(t.side,this.defaultValue.side,["right","left"]),showSlider:xo(t.showSlider,this.defaultValue.showSlider,["always","mouseover"]),renderCharacters:yo(t.renderCharacters,this.defaultValue.renderCharacters),scale:Lo.clampedInt(t.scale,1,1,3),maxColumn:Lo.clampedInt(t.maxColumn,this.defaultValue.maxColumn,1,1e4)}}}),mouseStyle:Bo(new ko(61,"mouseStyle","text",["text","default","copy"])),mouseWheelScrollSensitivity:Bo(new Do(62,"mouseWheelScrollSensitivity",1,e=>0===e?1:e,{markdownDescription:t(0,"A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.")})),mouseWheelZoom:Bo(new So(63,"mouseWheelZoom",!1,{markdownDescription:t(0,"Zoom the font of the editor when using mouse wheel and holding `Ctrl`.")})),multiCursorMergeOverlapping:Bo(new So(64,"multiCursorMergeOverlapping",!0,{description:t(0,"Merge multiple cursors when they are overlapping.")})),multiCursorModifier:Bo(new No(65,"multiCursorModifier","altKey","alt",["ctrlCmd","alt"],(function Uo(e){return"ctrlCmd"===e?H?"metaKey":"ctrlKey":"altKey"}),{markdownEnumDescriptions:[t(0,"Maps to `Control` on Windows and Linux and to `Command` on macOS."),t(0,"Maps to `Alt` on Windows and Linux and to `Option` on macOS.")],markdownDescription:t(0,"The modifier to be used to add multiple cursors with the mouse. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier. [Read more](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).")})),multiCursorPaste:Bo(new ko(66,"multiCursorPaste","spread",["spread","full"],{markdownEnumDescriptions:[t(0,"Each cursor pastes a single line of the text."),t(0,"Each cursor pastes the full text.")],markdownDescription:t(0,"Controls pasting when the line count of the pasted text matches the cursor count.")})),occurrencesHighlight:Bo(new So(67,"occurrencesHighlight",!0,{description:t(0,"Controls whether the editor should highlight semantic symbol occurrences.")})),overtypeAllowed:Bo(new So(68,"overtypeAllowed",!1,{description:t(0,"Controls whether overtype is allowed not only for autoclosing symbols of language.")})),overviewRulerBorder:Bo(new So(69,"overviewRulerBorder",!0,{description:t(0,"Controls whether a border should be drawn around the overview ruler.")})),overviewRulerLanes:Bo(new Lo(70,"overviewRulerLanes",3,0,3)),padding:Bo(new class extends vo{constructor(){super(71,"padding",{top:0,bottom:0},{"editor.padding.top":{type:"number",default:0,minimum:0,maximum:1e3,description:t(0,"Controls the amount of space between the top edge of the editor and the first line.")},"editor.padding.bottom":{type:"number",default:0,minimum:0,maximum:1e3,description:t(0,"Controls the amount of space between the bottom edge of the editor and the last line.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{top:Lo.clampedInt(t.top,0,0,1e3),bottom:Lo.clampedInt(t.bottom,0,0,1e3)}}}),parameterHints:Bo(new class extends vo{constructor(){const e={enabled:!0,cycle:!1,verbose:!1};super(72,"parameterHints",e,{"editor.parameterHints.enabled":{type:"boolean",default:e.enabled,description:t(0,"Enables a pop-up that shows parameter documentation and type information as you type.")},"editor.parameterHints.cycle":{type:"boolean",default:e.cycle,description:t(0,"Controls whether the parameter hints menu cycles or closes when reaching the end of the list.")},"editor.parameterHints.verbose":{type:"boolean",default:e.verbose,description:t(0,"Show pending message for parameter hints and explicit no parameter hints message.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:yo(t.enabled,this.defaultValue.enabled),cycle:yo(t.cycle,this.defaultValue.cycle),verbose:yo(t.verbose,this.defaultValue.verbose)}}}),peekWidgetDefaultFocus:Bo(new ko(73,"peekWidgetDefaultFocus","tree",["tree","editor"],{enumDescriptions:[t(0,"Focus the tree when opening peek"),t(0,"Focus the editor when opening peek")],description:t(0,"Controls whether to focus the inline editor or the tree in the peek widget.")})),definitionLinkOpensInPeek:Bo(new So(74,"definitionLinkOpensInPeek",!1,{description:t(0,"Controls whether the Go to Definition mouse gesture always opens the peek widget.")})),quickSuggestions:Bo(new class extends vo{constructor(){const e={other:!0,comments:!1,strings:!1};super(75,"quickSuggestions",e,{anyOf:[{type:"boolean"},{type:"object",properties:{strings:{type:"boolean",default:e.strings,description:t(0,"Enable quick suggestions inside strings.")},comments:{type:"boolean",default:e.comments,description:t(0,"Enable quick suggestions inside comments.")},other:{type:"boolean",default:e.other,description:t(0,"Enable quick suggestions outside of strings and comments.")}}}],default:e,description:t(0,"Controls whether suggestions should automatically show up while typing.")}),this.defaultValue=e}validate(e){if("boolean"==typeof e)return e;if(e&&"object"==typeof e){const t=e,i={other:yo(t.other,this.defaultValue.other),comments:yo(t.comments,this.defaultValue.comments),strings:yo(t.strings,this.defaultValue.strings)};return!!(i.other&&i.comments&&i.strings)||!!(i.other||i.comments||i.strings)&&i}return this.defaultValue}}),quickSuggestionsDelay:Bo(new Lo(76,"quickSuggestionsDelay",10,0,1073741824,{description:t(0,"Controls the delay in milliseconds after which quick suggestions will show up.")})),readOnly:Bo(new So(77,"readOnly",!1)),renameOnType:Bo(new So(78,"renameOnType",!1,{description:t(0,"Controls whether the editor auto renames on type."),markdownDeprecationMessage:t(0,"Deprecated, use `editor.linkedEditing` instead.")})),renderControlCharacters:Bo(new So(79,"renderControlCharacters",!1,{description:t(0,"Controls whether the editor should render control characters.")})),renderIndentGuides:Bo(new So(80,"renderIndentGuides",!0,{description:t(0,"Controls whether the editor should render indent guides.")})),renderFinalNewline:Bo(new So(81,"renderFinalNewline",!0,{description:t(0,"Render last line number when the file ends with a newline.")})),renderLineHighlight:Bo(new ko(82,"renderLineHighlight","line",["none","gutter","line","all"],{enumDescriptions:["","","",t(0,"Highlights both the gutter and the current line.")],description:t(0,"Controls how the editor should render the current line highlight.")})),renderLineHighlightOnlyWhenFocus:Bo(new So(83,"renderLineHighlightOnlyWhenFocus",!1,{description:t(0,"Controls if the editor should render the current line highlight only when the editor is focused")})),renderMarkerMessagesFirst:Bo(new So(84,"renderMarkerMessagesFirst",!1,{description:t(0,"Controls if messages from markers should always be on top of hover list.")})),renderValidationDecorations:Bo(new ko(85,"renderValidationDecorations","editable",["editable","on","off"])),renderWhitespace:Bo(new ko(86,"renderWhitespace","selection",["none","boundary","selection","trailing","all"],{enumDescriptions:["",t(0,"Render whitespace characters except for single spaces between words."),t(0,"Render whitespace characters only on selected text."),t(0,"Render only trailing whitespace characters"),""],description:t(0,"Controls how the editor should render whitespace characters.")})),revealHorizontalRightPadding:Bo(new Lo(87,"revealHorizontalRightPadding",30,0,1e3)),roundedSelection:Bo(new So(88,"roundedSelection",!0,{description:t(0,"Controls whether selections should have rounded corners.")})),rulers:Bo(new class extends vo{constructor(){const e=[],i={type:"number",description:t(0,"Number of monospace characters at which this editor ruler will render.")};super(89,"rulers",e,{type:"array",items:{anyOf:[i,{type:["object"],properties:{column:i,color:{type:"string",description:t(0,"Color of this editor ruler."),format:"color-hex"}}}]},default:e,description:t(0,"Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.")})}validate(e){if(Array.isArray(e)){let t=[];for(let i of e)if("number"==typeof i)t.push({column:Lo.clampedInt(i,0,0,1e4),color:null});else if(i&&"object"==typeof i){const e=i;t.push({column:Lo.clampedInt(e.column,0,0,1e4),color:e.color})}return t.sort((e,t)=>e.column-t.column),t}return this.defaultValue}}),scrollbar:Bo(new class extends vo{constructor(){super(90,"scrollbar",{vertical:1,horizontal:1,arrowSize:11,useShadows:!0,verticalHasArrows:!1,horizontalHasArrows:!1,horizontalScrollbarSize:12,horizontalSliderSize:12,verticalScrollbarSize:14,verticalSliderSize:14,handleMouseWheel:!0,alwaysConsumeMouseWheel:!0,scrollByPage:!1})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e,i=Lo.clampedInt(t.horizontalScrollbarSize,this.defaultValue.horizontalScrollbarSize,0,1e3),n=Lo.clampedInt(t.verticalScrollbarSize,this.defaultValue.verticalScrollbarSize,0,1e3);return{arrowSize:Lo.clampedInt(t.arrowSize,this.defaultValue.arrowSize,0,1e3),vertical:Ro(t.vertical,this.defaultValue.vertical),horizontal:Ro(t.horizontal,this.defaultValue.horizontal),useShadows:yo(t.useShadows,this.defaultValue.useShadows),verticalHasArrows:yo(t.verticalHasArrows,this.defaultValue.verticalHasArrows),horizontalHasArrows:yo(t.horizontalHasArrows,this.defaultValue.horizontalHasArrows),handleMouseWheel:yo(t.handleMouseWheel,this.defaultValue.handleMouseWheel),alwaysConsumeMouseWheel:yo(t.alwaysConsumeMouseWheel,this.defaultValue.alwaysConsumeMouseWheel),horizontalScrollbarSize:i,horizontalSliderSize:Lo.clampedInt(t.horizontalSliderSize,i,0,1e3),verticalScrollbarSize:n,verticalSliderSize:Lo.clampedInt(t.verticalSliderSize,n,0,1e3),scrollByPage:yo(t.scrollByPage,this.defaultValue.scrollByPage)}}}),scrollBeyondLastColumn:Bo(new Lo(91,"scrollBeyondLastColumn",5,0,1073741824,{description:t(0,"Controls the number of extra characters beyond which the editor will scroll horizontally.")})),scrollBeyondLastLine:Bo(new So(92,"scrollBeyondLastLine",!0,{description:t(0,"Controls whether the editor will scroll beyond the last line.")})),scrollPredominantAxis:Bo(new So(93,"scrollPredominantAxis",!0,{description:t(0,"Scroll only along the predominant axis when scrolling both vertically and horizontally at the same time. Prevents horizontal drift when scrolling vertically on a trackpad.")})),selectionClipboard:Bo(new So(94,"selectionClipboard",!0,{description:t(0,"Controls whether the Linux primary clipboard should be supported."),included:U})),selectionHighlight:Bo(new So(95,"selectionHighlight",!0,{description:t(0,"Controls whether the editor should highlight matches similar to the selection.")})),selectOnLineNumbers:Bo(new So(96,"selectOnLineNumbers",!0)),showFoldingControls:Bo(new ko(97,"showFoldingControls","mouseover",["always","mouseover"],{enumDescriptions:[t(0,"Always show the folding controls."),t(0,"Only show the folding controls when the mouse is over the gutter.")],description:t(0,"Controls when the folding controls on the gutter are shown.")})),showHoverDefinition:Bo(new So(98,"showHoverDefinition",!1,{description:t(0,"Show definition on hover with Ctrl/Cmd button.")})),showMultipleSignaturesAsList:Bo(new So(99,"showMultipleSignaturesAsList",!1,{description:t(0,"Show overloaded signatures as a single list.")})),showUnused:Bo(new So(100,"showUnused",!0,{description:t(0,"Controls fading out of unused code.")})),showDeprecated:Bo(new So(124,"showDeprecated",!0,{description:t(0,"Controls strikethrough deprecated variables.")})),inlineHints:Bo(new class extends vo{constructor(){const e={enabled:!0,fontSize:0,fontFamily:Po.fontFamily};super(125,"inlineHints",e,{"editor.inlineHints.enabled":{type:"boolean",default:e.enabled,description:t(0,"Enables the inline hints in the editor.")},"editor.inlineHints.fontSize":{type:"number",default:e.fontSize,description:t(0,"Controls font size of inline hints in the editor. When set to `0`, the 90% of `#editor.fontSize#` is used.")},"editor.inlineHints.fontFamily":{type:"string",default:e.fontFamily,description:t(0,"Controls font family of inline hints in the editor.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:yo(t.enabled,this.defaultValue.enabled),fontSize:Lo.clampedInt(t.fontSize,this.defaultValue.fontSize,0,100),fontFamily:Eo.string(t.fontFamily,this.defaultValue.fontFamily)}}}),snippetSuggestions:Bo(new ko(101,"snippetSuggestions","inline",["top","bottom","inline","none"],{enumDescriptions:[t(0,"Show snippet suggestions on top of other suggestions."),t(0,"Show snippet suggestions below other suggestions."),t(0,"Show snippets suggestions with other suggestions."),t(0,"Do not show snippet suggestions.")],description:t(0,"Controls whether snippets are shown with other suggestions and how they are sorted.")})),smartSelect:Bo(new class extends vo{constructor(){super(102,"smartSelect",{selectLeadingAndTrailingWhitespace:!0},{"editor.smartSelect.selectLeadingAndTrailingWhitespace":{description:t(0,"Whether leading and trailing whitespace should always be selected."),default:!0,type:"boolean"}})}validate(e){return e&&"object"==typeof e?{selectLeadingAndTrailingWhitespace:yo(e.selectLeadingAndTrailingWhitespace,this.defaultValue.selectLeadingAndTrailingWhitespace)}:this.defaultValue}}),smoothScrolling:Bo(new So(103,"smoothScrolling",!1,{description:t(0,"Controls whether the editor will scroll using an animation.")})),stopRenderingLineAfter:Bo(new Lo(105,"stopRenderingLineAfter",1e4,-1,1073741824)),suggest:Bo(new class extends vo{constructor(){const e={insertMode:"insert",filterGraceful:!0,snippetsPreventQuickSuggestions:!0,localityBonus:!1,shareSuggestSelections:!1,showIcons:!0,showStatusBar:!1,showInlineDetails:!0,showMethods:!0,showFunctions:!0,showConstructors:!0,showFields:!0,showVariables:!0,showClasses:!0,showStructs:!0,showInterfaces:!0,showModules:!0,showProperties:!0,showEvents:!0,showOperators:!0,showUnits:!0,showValues:!0,showConstants:!0,showEnums:!0,showEnumMembers:!0,showKeywords:!0,showWords:!0,showColors:!0,showFiles:!0,showReferences:!0,showFolders:!0,showTypeParameters:!0,showSnippets:!0,showUsers:!0,showIssues:!0};super(106,"suggest",e,{"editor.suggest.insertMode":{type:"string",enum:["insert","replace"],enumDescriptions:[t(0,"Insert suggestion without overwriting text right of the cursor."),t(0,"Insert suggestion and overwrite text right of the cursor.")],default:e.insertMode,description:t(0,"Controls whether words are overwritten when accepting completions. Note that this depends on extensions opting into this feature.")},"editor.suggest.filterGraceful":{type:"boolean",default:e.filterGraceful,description:t(0,"Controls whether filtering and sorting suggestions accounts for small typos.")},"editor.suggest.localityBonus":{type:"boolean",default:e.localityBonus,description:t(0,"Controls whether sorting favours words that appear close to the cursor.")},"editor.suggest.shareSuggestSelections":{type:"boolean",default:e.shareSuggestSelections,markdownDescription:t(0,"Controls whether remembered suggestion selections are shared between multiple workspaces and windows (needs `#editor.suggestSelection#`).")},"editor.suggest.snippetsPreventQuickSuggestions":{type:"boolean",default:e.snippetsPreventQuickSuggestions,description:t(0,"Controls whether an active snippet prevents quick suggestions.")},"editor.suggest.showIcons":{type:"boolean",default:e.showIcons,description:t(0,"Controls whether to show or hide icons in suggestions.")},"editor.suggest.showStatusBar":{type:"boolean",default:e.showStatusBar,description:t(0,"Controls the visibility of the status bar at the bottom of the suggest widget.")},"editor.suggest.showInlineDetails":{type:"boolean",default:e.showInlineDetails,description:t(0,"Controls whether suggest details show inline with the label or only in the details widget")},"editor.suggest.maxVisibleSuggestions":{type:"number",deprecationMessage:t(0,"This setting is deprecated. The suggest widget can now be resized.")},"editor.suggest.filteredTypes":{type:"object",deprecationMessage:t(0,"This setting is deprecated, please use separate settings like 'editor.suggest.showKeywords' or 'editor.suggest.showSnippets' instead.")},"editor.suggest.showMethods":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `method`-suggestions.")},"editor.suggest.showFunctions":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `function`-suggestions.")},"editor.suggest.showConstructors":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `constructor`-suggestions.")},"editor.suggest.showFields":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `field`-suggestions.")},"editor.suggest.showVariables":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `variable`-suggestions.")},"editor.suggest.showClasses":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `class`-suggestions.")},"editor.suggest.showStructs":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `struct`-suggestions.")},"editor.suggest.showInterfaces":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `interface`-suggestions.")},"editor.suggest.showModules":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `module`-suggestions.")},"editor.suggest.showProperties":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `property`-suggestions.")},"editor.suggest.showEvents":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `event`-suggestions.")},"editor.suggest.showOperators":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `operator`-suggestions.")},"editor.suggest.showUnits":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `unit`-suggestions.")},"editor.suggest.showValues":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `value`-suggestions.")},"editor.suggest.showConstants":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `constant`-suggestions.")},"editor.suggest.showEnums":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `enum`-suggestions.")},"editor.suggest.showEnumMembers":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `enumMember`-suggestions.")},"editor.suggest.showKeywords":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `keyword`-suggestions.")},"editor.suggest.showWords":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `text`-suggestions.")},"editor.suggest.showColors":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `color`-suggestions.")},"editor.suggest.showFiles":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `file`-suggestions.")},"editor.suggest.showReferences":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `reference`-suggestions.")},"editor.suggest.showCustomcolors":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `customcolor`-suggestions.")},"editor.suggest.showFolders":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `folder`-suggestions.")},"editor.suggest.showTypeParameters":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `typeParameter`-suggestions.")},"editor.suggest.showSnippets":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `snippet`-suggestions.")},"editor.suggest.showUsers":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `user`-suggestions.")},"editor.suggest.showIssues":{type:"boolean",default:!0,markdownDescription:t(0,"When enabled IntelliSense shows `issues`-suggestions.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{insertMode:xo(t.insertMode,this.defaultValue.insertMode,["insert","replace"]),filterGraceful:yo(t.filterGraceful,this.defaultValue.filterGraceful),snippetsPreventQuickSuggestions:yo(t.snippetsPreventQuickSuggestions,this.defaultValue.filterGraceful),localityBonus:yo(t.localityBonus,this.defaultValue.localityBonus),shareSuggestSelections:yo(t.shareSuggestSelections,this.defaultValue.shareSuggestSelections),showIcons:yo(t.showIcons,this.defaultValue.showIcons),showStatusBar:yo(t.showStatusBar,this.defaultValue.showStatusBar),showInlineDetails:yo(t.showInlineDetails,this.defaultValue.showInlineDetails),showMethods:yo(t.showMethods,this.defaultValue.showMethods),showFunctions:yo(t.showFunctions,this.defaultValue.showFunctions),showConstructors:yo(t.showConstructors,this.defaultValue.showConstructors),showFields:yo(t.showFields,this.defaultValue.showFields),showVariables:yo(t.showVariables,this.defaultValue.showVariables),showClasses:yo(t.showClasses,this.defaultValue.showClasses),showStructs:yo(t.showStructs,this.defaultValue.showStructs),showInterfaces:yo(t.showInterfaces,this.defaultValue.showInterfaces),showModules:yo(t.showModules,this.defaultValue.showModules),showProperties:yo(t.showProperties,this.defaultValue.showProperties),showEvents:yo(t.showEvents,this.defaultValue.showEvents),showOperators:yo(t.showOperators,this.defaultValue.showOperators),showUnits:yo(t.showUnits,this.defaultValue.showUnits),showValues:yo(t.showValues,this.defaultValue.showValues),showConstants:yo(t.showConstants,this.defaultValue.showConstants),showEnums:yo(t.showEnums,this.defaultValue.showEnums),showEnumMembers:yo(t.showEnumMembers,this.defaultValue.showEnumMembers),showKeywords:yo(t.showKeywords,this.defaultValue.showKeywords),showWords:yo(t.showWords,this.defaultValue.showWords),showColors:yo(t.showColors,this.defaultValue.showColors),showFiles:yo(t.showFiles,this.defaultValue.showFiles),showReferences:yo(t.showReferences,this.defaultValue.showReferences),showFolders:yo(t.showFolders,this.defaultValue.showFolders),showTypeParameters:yo(t.showTypeParameters,this.defaultValue.showTypeParameters),showSnippets:yo(t.showSnippets,this.defaultValue.showSnippets),showUsers:yo(t.showUsers,this.defaultValue.showUsers),showIssues:yo(t.showIssues,this.defaultValue.showIssues)}}}),suggestFontSize:Bo(new Lo(107,"suggestFontSize",0,0,1e3,{markdownDescription:t(0,"Font size for the suggest widget. When set to `0`, the value of `#editor.fontSize#` is used.")})),suggestLineHeight:Bo(new Lo(108,"suggestLineHeight",0,0,1e3,{markdownDescription:t(0,"Line height for the suggest widget. When set to `0`, the value of `#editor.lineHeight#` is used. The minimum value is 8.")})),suggestOnTriggerCharacters:Bo(new So(109,"suggestOnTriggerCharacters",!0,{description:t(0,"Controls whether suggestions should automatically show up when typing trigger characters.")})),suggestSelection:Bo(new ko(110,"suggestSelection","recentlyUsed",["first","recentlyUsed","recentlyUsedByPrefix"],{markdownEnumDescriptions:[t(0,"Always select the first suggestion."),t(0,"Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently."),t(0,"Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`.")],description:t(0,"Controls how suggestions are pre-selected when showing the suggest list.")})),tabCompletion:Bo(new ko(111,"tabCompletion","off",["on","off","onlySnippets"],{enumDescriptions:[t(0,"Tab complete will insert the best matching suggestion when pressing tab."),t(0,"Disable tab completions."),t(0,"Tab complete snippets when their prefix match. Works best when 'quickSuggestions' aren't enabled.")],description:t(0,"Enables tab completions.")})),tabIndex:Bo(new Lo(112,"tabIndex",0,-1,1073741824)),unusualLineTerminators:Bo(new ko(113,"unusualLineTerminators","prompt",["auto","off","prompt"],{enumDescriptions:[t(0,"Unusual line terminators are automatically removed."),t(0,"Unusual line terminators are ignored."),t(0,"Unusual line terminators prompt to be removed.")],description:t(0,"Remove unusual line terminators that might cause problems.")})),useTabStops:Bo(new So(114,"useTabStops",!0,{description:t(0,"Inserting and deleting whitespace follows tab stops.")})),wordSeparators:Bo(new Eo(115,"wordSeparators","`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?",{description:t(0,"Characters that will be used as word separators when doing word related navigations or operations.")})),wordWrap:Bo(new ko(116,"wordWrap","off",["off","on","wordWrapColumn","bounded"],{markdownEnumDescriptions:[t(0,"Lines will never wrap."),t(0,"Lines will wrap at the viewport width."),t(0,"Lines will wrap at `#editor.wordWrapColumn#`."),t(0,"Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`.")],description:t(0,"Controls how lines should wrap.")})),wordWrapBreakAfterCharacters:Bo(new Eo(117,"wordWrapBreakAfterCharacters"," \t})]?|/&.,;¢°′″‰℃、。。、¢,.:;?!%・・ゝゞヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻ァィゥェォャュョッー”〉》」』】〕)]}」")),wordWrapBreakBeforeCharacters:Bo(new Eo(118,"wordWrapBreakBeforeCharacters","([{‘“〈《「『【〔([{「£¥$£¥++")),wordWrapColumn:Bo(new Lo(119,"wordWrapColumn",80,1,1073741824,{markdownDescription:t(0,"Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.")})),wordWrapOverride1:Bo(new ko(120,"wordWrapOverride1","inherit",["off","on","inherit"])),wordWrapOverride2:Bo(new ko(121,"wordWrapOverride2","inherit",["off","on","inherit"])),wrappingIndent:Bo(new No(122,"wrappingIndent",1,"same",["none","same","indent","deepIndent"],(function Ko(e){switch(e){case"none":return 0;case"same":return 1;case"indent":return 2;case"deepIndent":return 3}}),{enumDescriptions:[t(0,"No indentation. Wrapped lines begin at column 1."),t(0,"Wrapped lines get the same indentation as the parent."),t(0,"Wrapped lines get +1 indentation toward the parent."),t(0,"Wrapped lines get +2 indentation toward the parent.")],description:t(0,"Controls the indentation of wrapped lines.")})),wrappingStrategy:Bo(new ko(123,"wrappingStrategy","simple",["simple","advanced"],{enumDescriptions:[t(0,"Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width."),t(0,"Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.")],description:t(0,"Controls the algorithm that computes wrapping points.")})),editorClassName:Bo(new class extends Co{constructor(){super(126,[61,29])}compute(e,t,i){const n=["monaco-editor"];return t.get(29)&&n.push(t.get(29)),e.extraEditorClassName&&n.push(e.extraEditorClassName),"default"===t.get(61)?n.push("mouse-default"):"copy"===t.get(61)&&n.push("mouse-copy"),t.get(100)&&n.push("showUnused"),t.get(124)&&n.push("showDeprecated"),n.join(" ")}}),pixelRatio:Bo(new class extends Co{constructor(){super(127)}compute(e,t,i){return e.pixelRatio}}),tabFocusMode:Bo(new class extends Co{constructor(){super(128,[77])}compute(e,t,i){return!!t.get(77)||e.tabFocusMode}}),layoutInfo:Bo(new Mo),wrappingInfo:Bo(new class extends Co{constructor(){super(130,[129])}compute(e,t,i){const n=t.get(129);return{isDominatedByLongLines:e.isDominatedByLongLines,isWordWrapMinified:n.isWordWrapMinified,isViewportWrapping:n.isViewportWrapping,wrappingColumn:n.wrappingColumn}}}),contentWidgetTopPadding:Bo(new Lo(131,"contentWidgetTopPadding",22,0,999))};var $o,jo;!function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"}($o||($o={})),function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"}(jo||(jo={}));class qo{constructor(e){this.tabSize=Math.max(1,0|e.tabSize),this.indentSize=0|e.tabSize,this.insertSpaces=Boolean(e.insertSpaces),this.defaultEOL=0|e.defaultEOL,this.trimAutoWhitespace=Boolean(e.trimAutoWhitespace)}equals(e){return this.tabSize===e.tabSize&&this.indentSize===e.indentSize&&this.insertSpaces===e.insertSpaces&&this.defaultEOL===e.defaultEOL&&this.trimAutoWhitespace===e.trimAutoWhitespace}createChangeEvent(e){return{tabSize:this.tabSize!==e.tabSize,indentSize:this.indentSize!==e.indentSize,insertSpaces:this.insertSpaces!==e.insertSpaces,trimAutoWhitespace:this.trimAutoWhitespace!==e.trimAutoWhitespace}}}class Go{constructor(e,t){this.range=e,this.matches=t}}class Yo{constructor(e,t,i,n,o,s){this.identifier=e,this.range=t,this.text=i,this.forceMoveMarkers=n,this.isAutoWhitespaceEdit=o,this._isTracked=s}}class Zo{constructor(e,t,i){this.reverseEdits=e,this.changes=t,this.trimAutoWhitespaceLineNumbers=i}}const Xo="undefined"!=typeof Buffer,Qo="undefined"!=typeof TextDecoder;let Jo,es;class ts{constructor(e){this.buffer=e,this.byteLength=this.buffer.byteLength}static wrap(e){return Xo&&!Buffer.isBuffer(e)&&(e=Buffer.from(e.buffer,e.byteOffset,e.byteLength)),new ts(e)}toString(){return Xo?this.buffer.toString():Qo?(Jo||(Jo=new TextDecoder),Jo.decode(this.buffer)):function e(t){const i=t.byteLength,n=[];let o=0;for(;o=240&&o+3>>0|(63&t[o++])<<12>>>0|(63&t[o++])<<6>>>0|(63&t[o++])<<0>>>0:e>=224&&o+2>>0|(63&t[o++])<<6>>>0|(63&t[o++])<<0>>>0:e>=192&&o+1>>0|(63&t[o++])<<0>>>0:t[o++])>=0&&s<=55295||s>=57344&&s<=65535)n.push(String.fromCharCode(s));else if(s>=65536&&s<=1114111){const e=s-65536,t=56320+((1023&e)>>>0);n.push(String.fromCharCode(55296+((1047552&e)>>>10))),n.push(String.fromCharCode(t))}else n.push(String.fromCharCode(65533))}return n.join("")}(this.buffer)}}function is(e,t){return e[t+0]<<0>>>0|e[t+1]<<8>>>0}function ns(e,t,i){e[i+0]=255&t,e[i+1]=255&(t>>>=8)}function os(e,t){return e[t]*Math.pow(2,24)+e[t+1]*Math.pow(2,16)+e[t+2]*Math.pow(2,8)+e[t+3]}function ss(e,t,i){e[i+3]=t,e[i+2]=t>>>=8,e[i+1]=t>>>=8,e[i]=t>>>=8}function rs(e,t){return e[t]}function as(e,t,i){e[i]=t}function ls(){return es||(es=new TextDecoder(J()?"UTF-16LE":"UTF-16BE")),es}const hs="undefined"!=typeof TextDecoder;let cs,ds;hs?(cs=e=>new ps(e),ds=function us(e,t,i){const n=new Uint16Array(e.buffer,t,i);return ls().decode(n)}):(cs=e=>new ms,ds=function gs(e,t,i){let n=[],o=0;for(let s=0;s=this._capacity)return this._flushBuffer(),void(this._completedStrings[this._completedStrings.length]=e);for(let i=0;i=65&&e<=90||e>=97&&e<=122}(e.charCodeAt(0))&&58===e.charCodeAt(1)}var Cs;!function(e){e.inMemory="inmemory",e.vscode="vscode",e.internal="private",e.walkThrough="walkThrough",e.walkThroughSnippet="walkThroughSnippet",e.http="http",e.https="https",e.file="file",e.mailto="mailto",e.untitled="untitled",e.data="data",e.command="command",e.vscodeRemote="vscode-remote",e.vscodeRemoteResource="vscode-remote-resource",e.userData="vscode-userdata",e.vscodeCustomEditor="vscode-custom-editor",e.vscodeNotebook="vscode-notebook",e.vscodeNotebookCell="vscode-notebook-cell",e.vscodeNotebookCellMetadata="vscode-notebook-cell-metadata",e.vscodeSettings="vscode-settings",e.vscodeWorkspaceTrust="vscode-workspace-trust",e.webviewPanel="webview-panel",e.vscodeWebview="vscode-webview",e.vscodeWebviewResource="vscode-webview-resource",e.extension="extension",e.vscodeFileResource="vscode-file"}(Cs||(Cs={}));const ws=new class{constructor(){this._hosts=Object.create(null),this._ports=Object.create(null),this._connectionTokens=Object.create(null),this._preferredWebSchema="http",this._delegate=null}setPreferredWebSchema(e){this._preferredWebSchema=e}rewrite(e){if(this._delegate)return this._delegate(e);const t=e.authority;let i=this._hosts[t];i&&-1!==i.indexOf(":")&&(i=`[${i}]`);const n=this._ports[t],o=this._connectionTokens[t];let s=`path=${encodeURIComponent(e.path)}`;return"string"==typeof o&&(s+=`&tkn=${encodeURIComponent(o)}`),mt.from({scheme:$?this._preferredWebSchema:Cs.vscodeRemoteResource,authority:`${i}:${n}`,path:"/vscode-remote-resource",query:s})}},ys=new class{constructor(){this.FALLBACK_AUTHORITY="vscode-app"}asBrowserUri(e,t,i){const n=this.toUri(e,t);return n.scheme===Cs.vscodeRemote?ws.rewrite(n):K&&(i||V)&&n.scheme===Cs.file?n.with({scheme:Cs.vscodeFileResource,authority:n.authority||this.FALLBACK_AUTHORITY,query:null,fragment:null}):n}toUri(e,t){return mt.isUri(e)?e:mt.parse(t.toUrl(e))}};function Ss(e){return wt(e,!0)}const Ls=new class{constructor(e){this._ignorePathCasing=e}compare(e,t,i=!1){return e===t?0:Jt(this.getComparisonKey(e,i),this.getComparisonKey(t,i))}isEqual(e,t,i=!1){return e===t||!(!e||!t)&&this.getComparisonKey(e,i)===this.getComparisonKey(t,i)}getComparisonKey(e,t=!1){return e.with({path:this._ignorePathCasing(e)?e.path.toLowerCase():void 0,fragment:t?null:void 0}).toString()}joinPath(e,...t){return mt.joinPath(e,...t)}basenameOrAuthority(e){return xs(e)||e.authority}basename(e){return tt.basename(e.path)}dirname(e){if(0===e.path.length)return e;let t;return e.scheme===Cs.file?t=mt.file(st(Ss(e))).path:(t=tt.dirname(e.path),e.authority&&t.length&&47!==t.charCodeAt(0)&&(console.error(`dirname("${e.toString})) resulted in a relative path`),t="/")),e.with({path:t})}normalizePath(e){if(!e.path.length)return e;let t;return t=e.scheme===Cs.file?mt.file(it(Ss(e))).path:tt.normalize(e.path),e.with({path:t})}resolvePath(e,t){if(e.scheme===Cs.file){const i=mt.file(nt(Ss(e),t));return e.with({authority:i.authority,path:i.path})}return-1===t.indexOf("/")&&(t=function i(e){return e.replace(/[\\\/]/g,tt.sep)}(t),/^[a-zA-Z]:(\/|$)/.test(t)&&(t="/"+t)),e.with({path:tt.resolve(e.path,t)})}}(()=>!1),Ds=Ls.isEqual.bind(Ls),Es=Ls.basenameOrAuthority.bind(Ls),xs=Ls.basename.bind(Ls),ks=Ls.dirname.bind(Ls),Ns=Ls.joinPath.bind(Ls),Is=Ls.normalizePath.bind(Ls),Ts=Ls.resolvePath.bind(Ls);var As;function Ms(e){return e.toString()}!function(e){e.META_DATA_LABEL="label",e.META_DATA_DESCRIPTION="description",e.META_DATA_SIZE="size",e.META_DATA_MIME="mime",e.parseMetaData=function t(i){const n=new Map;i.path.substring(i.path.indexOf(";")+1,i.path.lastIndexOf(";")).split(";").forEach(e=>{const[t,i]=e.split(":");t&&i&&n.set(t,i)});const o=i.path.substring(0,i.path.indexOf(";"));return o&&n.set(e.META_DATA_MIME,o),n}}(As||(As={}));class Os{constructor(e,t,i,n,o,s,r){this.beforeVersionId=e,this.afterVersionId=t,this.beforeEOL=i,this.afterEOL=n,this.beforeCursorState=o,this.afterCursorState=s,this.changes=r}static create(e,t){const i=e.getAlternativeVersionId(),n=Fs(e);return new Os(i,i,n,n,t,t,[])}append(e,t,i,n,o){t.length>0&&(this.changes=function s(e,t){return null===e||0===e.length?t:new bs(e,t).compress()}(this.changes,t)),this.afterEOL=i,this.afterVersionId=n,this.afterCursorState=o}static _writeSelectionsSize(e){return 4+16*(e?e.length:0)}static _writeSelections(e,t,i){if(ss(e,t?t.length:0,i),i+=4,t)for(const n of t)ss(e,n.selectionStartLineNumber,i),ss(e,n.selectionStartColumn,i+=4),ss(e,n.positionLineNumber,i+=4),ss(e,n.positionColumn,i+=4),i+=4;return i}static _readSelections(e,t,i){const n=os(e,t);t+=4;for(let o=0;oe.toString()).join(", ")}matchesResource(e){return(mt.isUri(this.model)?this.model:this.model.uri).toString()===e.toString()}setModel(e){this.model=e}canAppend(e){return this.model===e&&this._data instanceof Os}append(e,t,i,n,o){this._data instanceof Os&&this._data.append(e,t,i,n,o)}close(){this._data instanceof Os&&(this._data=this._data.serialize())}open(){this._data instanceof Os||(this._data=Os.deserialize(this._data))}undo(){if(mt.isUri(this.model))throw new Error("Invalid SingleModelEditStackElement");this._data instanceof Os&&(this._data=this._data.serialize());const e=Os.deserialize(this._data);this.model._applyUndo(e.changes,e.beforeEOL,e.beforeVersionId,e.beforeCursorState)}redo(){if(mt.isUri(this.model))throw new Error("Invalid SingleModelEditStackElement");this._data instanceof Os&&(this._data=this._data.serialize());const e=Os.deserialize(this._data);this.model._applyRedo(e.changes,e.afterEOL,e.afterVersionId,e.afterCursorState)}heapSize(){return this._data instanceof Os&&(this._data=this._data.serialize()),this._data.byteLength+168}}class Ps{constructor(e,t){this.type=1,this.label=e,this._isOpen=!0,this._editStackElementsArr=t.slice(0),this._editStackElementsMap=new Map;for(const e of this._editStackElementsArr){const t=Ms(e.resource);this._editStackElementsMap.set(t,e)}this._delegate=null}get resources(){return this._editStackElementsArr.map(e=>e.resource)}prepareUndoRedo(){if(this._delegate)return this._delegate.prepareUndoRedo(this)}matchesResource(e){const t=Ms(e);return this._editStackElementsMap.has(t)}setModel(e){const t=Ms(mt.isUri(e)?e:e.uri);this._editStackElementsMap.has(t)&&this._editStackElementsMap.get(t).setModel(e)}canAppend(e){if(!this._isOpen)return!1;const t=Ms(e.uri);return!!this._editStackElementsMap.has(t)&&this._editStackElementsMap.get(t).canAppend(e)}append(e,t,i,n,o){const s=Ms(e.uri);this._editStackElementsMap.get(s).append(e,t,i,n,o)}close(){this._isOpen=!1}open(){}undo(){this._isOpen=!1;for(const e of this._editStackElementsArr)e.undo()}redo(){for(const e of this._editStackElementsArr)e.redo()}heapSize(e){const t=Ms(e);return this._editStackElementsMap.has(t)?this._editStackElementsMap.get(t).heapSize():0}split(){return this._editStackElementsArr}toString(){let e=[];for(const t of this._editStackElementsArr)e.push(`${xs(t.resource)}: ${t}`);return`{${e.join(", ")}}`}}function Fs(e){return"\n"===e.getEOL()?0:1}function Bs(e){return!!e&&(e instanceof Rs||e instanceof Ps)}class Ws{constructor(e,t){this._model=e,this._undoRedoService=t}pushStackElement(){const e=this._undoRedoService.getLastElement(this._model.uri);Bs(e)&&e.close()}popStackElement(){const e=this._undoRedoService.getLastElement(this._model.uri);Bs(e)&&e.open()}clear(){this._undoRedoService.removeElements(this._model.uri)}_getOrCreateEditStackElement(e){const t=this._undoRedoService.getLastElement(this._model.uri);if(Bs(t)&&t.canAppend(this._model))return t;const i=new Rs(this._model,e);return this._undoRedoService.pushElement(i),i}pushEOL(e){const t=this._getOrCreateEditStackElement(null);this._model.setEOL(e),t.append(this._model,[],Fs(this._model),this._model.getAlternativeVersionId(),null)}pushEditOperation(e,t,i){const n=this._getOrCreateEditStackElement(e),o=this._model.applyEdits(t,!0),s=Ws._computeCursorState(i,o),r=o.map((e,t)=>({index:t,textChange:e.textChange}));return r.sort((e,t)=>e.textChange.oldPosition===t.textChange.oldPosition?e.index-t.index:e.textChange.oldPosition-t.textChange.oldPosition),n.append(this._model,r.map(e=>e.textChange),Fs(this._model),this._model.getAlternativeVersionId(),s),s}static _computeCursorState(e,t){try{return e?e(t):null}catch(e){return n(e),null}}}class Vs{constructor(){this.spacesDiff=0,this.looksLikeAlignment=!1}}function zs(e,t,i,n,o){let s;for(o.spacesDiff=0,o.looksLikeAlignment=!1,s=0;s0&&a>0)return;if(l>0&&h>0)return;let c=Math.abs(a-h),d=Math.abs(r-l);if(0===c)return o.spacesDiff=d,void(d>0&&0<=l-1&&l-10?o++:m>1&&s++,zs(r,a,d,p,c),c.looksLikeAlignment&&(!i||t!==c.spacesDiff))continue;let _=c.spacesDiff;_<=8&&h[_]++,r=d,a=p}let d=i;o!==s&&(d=o{let i=h[t];i>e&&(e=i,u=t)}),4===u&&h[4]>0&&h[2]>0&&h[2]>=h[4]/2&&(u=2)}return{insertSpaces:d,tabSize:u}}function Us(e){return(1&e.metadata)>>>0}function Ks(e,t){e.metadata=254&e.metadata|t<<0}function $s(e){return(2&e.metadata)>>>1==1}function js(e,t){e.metadata=253&e.metadata|(t?1:0)<<1}function qs(e){return(4&e.metadata)>>>2==1}function Gs(e,t){e.metadata=251&e.metadata|(t?1:0)<<2}function Ys(e){return(8&e.metadata)>>>3==1}function Zs(e,t){e.metadata=247&e.metadata|(t?1:0)<<3}function Xs(e,t){e.metadata=207&e.metadata|t<<4}function Qs(e,t){e.metadata=191&e.metadata|(t?1:0)<<6}class Js{constructor(e,t,i){this.metadata=0,this.parent=this,this.left=this,this.right=this,Ks(this,1),this.start=t,this.end=i,this.delta=0,this.maxEnd=i,this.id=e,this.ownerId=0,this.options=null,Gs(this,!1),Xs(this,1),Zs(this,!1),Qs(this,!1),this.cachedVersionId=0,this.cachedAbsoluteStart=t,this.cachedAbsoluteEnd=i,this.range=null,js(this,!1)}reset(e,t,i,n){this.start=t,this.end=i,this.maxEnd=i,this.cachedVersionId=e,this.cachedAbsoluteStart=t,this.cachedAbsoluteEnd=i,this.range=n}setOptions(e){this.options=e;let t=this.options.className;Gs(this,"squiggly-error"===t||"squiggly-warning"===t||"squiggly-info"===t),Xs(this,this.options.stickiness),Zs(this,!(!this.options.overviewRuler||!this.options.overviewRuler.color)),Qs(this,this.options.collapseOnReplaceEdit)}setCachedOffsets(e,t,i){this.cachedVersionId!==i&&(this.range=null),this.cachedVersionId=i,this.cachedAbsoluteStart=e,this.cachedAbsoluteEnd=t}detach(){this.parent=null,this.left=null,this.right=null}}const er=new Js(null,0,0);er.parent=er,er.left=er,er.right=er,Ks(er,0);class tr{constructor(){this.root=er,this.requestNormalizeDelta=!1}intervalSearch(e,t,i,n,o){return this.root===er?[]:function s(e,t,i,n,o,r){let a=e.root,l=0,h=0,c=0,d=0,u=[],g=0;for(;a!==er;)if($s(a))js(a.left,!1),js(a.right,!1),a===a.parent.right&&(l-=a.parent.delta),a=a.parent;else{if(!$s(a.left)){if((h=l+a.maxEnd)i)js(a,!0);else{if((d=l+a.end)>=t){a.setCachedOffsets(c,d,r);let e=!0;n&&a.ownerId&&a.ownerId!==n&&(e=!1),o&&qs(a)&&(e=!1),e&&(u[g++]=a)}js(a,!0),a.right===er||$s(a.right)||(l+=a.delta,a=a.right)}}return js(e.root,!1),u}(this,e,t,i,n,o)}search(e,t,i){return this.root===er?[]:function n(e,t,i,o){let s=e.root,r=0,a=0,l=0,h=[],c=0;for(;s!==er;){if($s(s)){js(s.left,!1),js(s.right,!1),s===s.parent.right&&(r-=s.parent.delta),s=s.parent;continue}if(s.left!==er&&!$s(s.left)){s=s.left;continue}s.setCachedOffsets(a=r+s.start,l=r+s.end,o);let e=!0;t&&s.ownerId&&s.ownerId!==t&&(e=!1),i&&qs(s)&&(e=!1),e&&(h[c++]=s),js(s,!0),s.right===er||$s(s.right)||(r+=s.delta,s=s.right)}return js(e.root,!1),h}(this,e,t,i)}collectNodesFromOwner(e){return function t(e,i){let n=e.root,o=[],s=0;for(;n!==er;)$s(n)?(js(n.left,!1),js(n.right,!1),n=n.parent):n.left===er||$s(n.left)?(n.ownerId===i&&(o[s++]=n),js(n,!0),n.right===er||$s(n.right)||(n=n.right)):n=n.left;return js(e.root,!1),o}(this,e)}collectNodesPostOrder(){return function e(t){let i=t.root,n=[],o=0;for(;i!==er;)$s(i)?(js(i.left,!1),js(i.right,!1),i=i.parent):i.left===er||$s(i.left)?i.right===er||$s(i.right)?(n[o++]=i,js(i,!0)):i=i.right:i=i.left;return js(t.root,!1),n}(this)}insert(e){or(this,e),this._normalizeDeltaIfNecessary()}delete(e){sr(this,e),this._normalizeDeltaIfNecessary()}resolveNode(e,t){const i=e;let n=0;for(;e!==this.root;)e===e.parent.right&&(n+=e.parent.delta),e=e.parent;i.setCachedOffsets(i.start+n,i.end+n,t)}acceptReplace(e,t,i,n){const o=function s(e,t,i){let n=e.root,o=0,s=0,r=0,a=0,l=[],h=0;for(;n!==er;)if($s(n))js(n.left,!1),js(n.right,!1),n===n.parent.right&&(o-=n.parent.delta),n=n.parent;else{if(!$s(n.left)){if((s=o+n.maxEnd)i?js(n,!0):((a=o+n.end)>=t&&(n.setCachedOffsets(r,a,0),l[h++]=n),js(n,!0),n.right===er||$s(n.right)||(o+=n.delta,n=n.right))}return js(e.root,!1),l}(this,e,e+t);for(let e=0,t=o.length;ei?(o.start+=l,o.end+=l,o.delta+=l,(o.delta<-1073741824||o.delta>1073741824)&&(e.requestNormalizeDelta=!0),js(o,!0)):(js(o,!0),o.right===er||$s(o.right)||(s+=o.delta,o=o.right))}js(e.root,!1)}(this,e,e+t,i),this._normalizeDeltaIfNecessary();for(let s=0,r=o.length;si)&&1!==n&&(2===n||t)}function nr(e,t,i,n,o){const s=function r(e){return(48&e.metadata)>>>4}(e),a=0===s||2===s,l=1===s||2===s,h=i-t,c=n,d=Math.min(h,c),u=e.start;let g=!1;const p=e.end;let m=!1;t<=u&&p<=i&&function f(e){return(64&e.metadata)>>>6==1}(e)&&(e.start=t,g=!0,e.end=t,m=!0);{const e=o?1:h>0?2:0;!g&&ir(u,a,t,e)&&(g=!0),!m&&ir(p,l,t,e)&&(m=!0)}if(d>0&&!o){const e=h>c?2:0;!g&&ir(u,a,t+d,e)&&(g=!0),!m&&ir(p,l,t+d,e)&&(m=!0)}{const n=o?1:0;!g&&ir(u,a,i,n)&&(e.start=t+c,g=!0),!m&&ir(p,l,i,n)&&(e.end=t+c,m=!0)}const _=c-h;g||(e.start=Math.max(0,u+_)),m||(e.end=Math.max(0,p+_)),e.start>e.end&&(e.end=e.start)}function or(e,t){if(e.root===er)return t.parent=er,t.left=er,t.right=er,Ks(t,0),e.root=t,e.root;!function i(e,t){let i=0,n=e.root;const o=t.start,s=t.end;for(;;)if(((r=o)===(a=n.start+i)?s-(n.end+i):r-a)<0){if(n.left===er){t.start-=i,t.end-=i,t.maxEnd-=i,n.left=t;break}n=n.left}else{if(n.right===er){t.start-=i+n.delta,t.end-=i+n.delta,t.maxEnd-=i+n.delta,n.right=t;break}i+=n.delta,n=n.right}var r,a;t.parent=n,t.left=er,t.right=er,Ks(t,1)}(e,t),dr(t.parent);let n=t;for(;n!==e.root&&1===Us(n.parent);)if(n.parent===n.parent.parent.left){const t=n.parent.parent.right;1===Us(t)?(Ks(n.parent,0),Ks(t,0),Ks(n.parent.parent,1),n=n.parent.parent):(n===n.parent.right&&ar(e,n=n.parent),Ks(n.parent,0),Ks(n.parent.parent,1),lr(e,n.parent.parent))}else{const t=n.parent.parent.left;1===Us(t)?(Ks(n.parent,0),Ks(t,0),Ks(n.parent.parent,1),n=n.parent.parent):(n===n.parent.left&&lr(e,n=n.parent),Ks(n.parent,0),Ks(n.parent.parent,1),ar(e,n.parent.parent))}return Ks(e.root,0),t}function sr(e,t){let i,n;if(t.left===er?(n=t,(i=t.right).delta+=t.delta,(i.delta<-1073741824||i.delta>1073741824)&&(e.requestNormalizeDelta=!0),i.start+=t.delta,i.end+=t.delta):t.right===er?(i=t.left,n=t):((i=(n=function o(e){for(;e.left!==er;)e=e.left;return e}(t.right)).right).start+=n.delta,i.end+=n.delta,i.delta+=n.delta,(i.delta<-1073741824||i.delta>1073741824)&&(e.requestNormalizeDelta=!0),n.start+=t.delta,n.end+=t.delta,n.delta=t.delta,(n.delta<-1073741824||n.delta>1073741824)&&(e.requestNormalizeDelta=!0)),n===e.root)return e.root=i,Ks(i,0),t.detach(),rr(),cr(i),void(e.root.parent=er);let s,r=1===Us(n);if(n===n.parent.left?n.parent.left=i:n.parent.right=i,n===t?i.parent=n.parent:(i.parent=n.parent===t?n:n.parent,n.left=t.left,n.right=t.right,n.parent=t.parent,Ks(n,Us(t)),t===e.root?e.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.left!==er&&(n.left.parent=n),n.right!==er&&(n.right.parent=n)),t.detach(),r)return dr(i.parent),n!==t&&(dr(n),dr(n.parent)),void rr();for(dr(i),dr(i.parent),n!==t&&(dr(n),dr(n.parent));i!==e.root&&0===Us(i);)i===i.parent.left?(1===Us(s=i.parent.right)&&(Ks(s,0),Ks(i.parent,1),ar(e,i.parent),s=i.parent.right),0===Us(s.left)&&0===Us(s.right)?(Ks(s,1),i=i.parent):(0===Us(s.right)&&(Ks(s.left,0),Ks(s,1),lr(e,s),s=i.parent.right),Ks(s,Us(i.parent)),Ks(i.parent,0),Ks(s.right,0),ar(e,i.parent),i=e.root)):(1===Us(s=i.parent.left)&&(Ks(s,0),Ks(i.parent,1),lr(e,i.parent),s=i.parent.left),0===Us(s.left)&&0===Us(s.right)?(Ks(s,1),i=i.parent):(0===Us(s.left)&&(Ks(s.right,0),Ks(s,1),ar(e,s),s=i.parent.left),Ks(s,Us(i.parent)),Ks(i.parent,0),Ks(s.left,0),lr(e,i.parent),i=e.root));Ks(i,0),rr()}function rr(){er.parent=er,er.delta=0,er.start=0,er.end=0}function ar(e,t){const i=t.right;i.delta+=t.delta,(i.delta<-1073741824||i.delta>1073741824)&&(e.requestNormalizeDelta=!0),i.start+=t.delta,i.end+=t.delta,t.right=i.left,i.left!==er&&(i.left.parent=t),i.parent=t.parent,t.parent===er?e.root=i:t===t.parent.left?t.parent.left=i:t.parent.right=i,i.left=t,t.parent=i,cr(t),cr(i)}function lr(e,t){const i=t.left;t.delta-=i.delta,(t.delta<-1073741824||t.delta>1073741824)&&(e.requestNormalizeDelta=!0),t.start-=i.delta,t.end-=i.delta,t.left=i.right,i.right!==er&&(i.right.parent=t),i.parent=t.parent,t.parent===er?e.root=i:t===t.parent.right?t.parent.right=i:t.parent.left=i,i.right=t,t.parent=i,cr(t),cr(i)}function hr(e){let t=e.end;if(e.left!==er){const i=e.left.maxEnd;i>t&&(t=i)}if(e.right!==er){const i=e.right.maxEnd+e.delta;i>t&&(t=i)}return t}function cr(e){e.maxEnd=hr(e)}function dr(e){for(;e!==er;){const t=hr(e);if(e.maxEnd===t)return;e.maxEnd=t,e=e.parent}}class ur{constructor(e,t){this.piece=e,this.color=t,this.size_left=0,this.lf_left=0,this.parent=this,this.left=this,this.right=this}next(){if(this.right!==gr)return pr(this.right);let e=this;for(;e.parent!==gr&&e.parent.left!==e;)e=e.parent;return e.parent===gr?gr:e.parent}prev(){if(this.left!==gr)return mr(this.left);let e=this;for(;e.parent!==gr&&e.parent.right!==e;)e=e.parent;return e.parent===gr?gr:e.parent}detach(){this.parent=null,this.left=null,this.right=null}}const gr=new ur(null,0);function pr(e){for(;e.left!==gr;)e=e.left;return e}function mr(e){for(;e.right!==gr;)e=e.right;return e}function fr(e){return e===gr?0:e.size_left+e.piece.length+fr(e.right)}function _r(e){return e===gr?0:e.lf_left+e.piece.lineFeedCnt+_r(e.right)}function br(){gr.parent=gr}function vr(e,t){let i=t.right;i.size_left+=t.size_left+(t.piece?t.piece.length:0),i.lf_left+=t.lf_left+(t.piece?t.piece.lineFeedCnt:0),t.right=i.left,i.left!==gr&&(i.left.parent=t),i.parent=t.parent,t.parent===gr?e.root=i:t.parent.left===t?t.parent.left=i:t.parent.right=i,i.left=t,t.parent=i}function Cr(e,t){let i=t.left;t.left=i.right,i.right!==gr&&(i.right.parent=t),i.parent=t.parent,t.size_left-=i.size_left+(i.piece?i.piece.length:0),t.lf_left-=i.lf_left+(i.piece?i.piece.lineFeedCnt:0),t.parent===gr?e.root=i:t===t.parent.right?t.parent.right=i:t.parent.left=i,i.right=t,t.parent=i}function wr(e,t){let i,n;if(i=t.left===gr?(n=t).right:t.right===gr?(n=t).left:(n=pr(t.right)).right,n===e.root)return e.root=i,i.color=0,t.detach(),br(),void(e.root.parent=gr);let o,s=1===n.color;if(n===n.parent.left?n.parent.left=i:n.parent.right=i,n===t?(i.parent=n.parent,Lr(e,i)):(i.parent=n.parent===t?n:n.parent,Lr(e,i),n.left=t.left,n.right=t.right,n.parent=t.parent,n.color=t.color,t===e.root?e.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.left!==gr&&(n.left.parent=n),n.right!==gr&&(n.right.parent=n),n.size_left=t.size_left,n.lf_left=t.lf_left,Lr(e,n)),t.detach(),i.parent.left===i){let t=fr(i),n=_r(i);if(t!==i.parent.size_left||n!==i.parent.lf_left){let o=t-i.parent.size_left,s=n-i.parent.lf_left;i.parent.size_left=t,i.parent.lf_left=n,Sr(e,i.parent,o,s)}}if(Lr(e,i.parent),s)br();else{for(;i!==e.root&&0===i.color;)i===i.parent.left?(1===(o=i.parent.right).color&&(o.color=0,i.parent.color=1,vr(e,i.parent),o=i.parent.right),0===o.left.color&&0===o.right.color?(o.color=1,i=i.parent):(0===o.right.color&&(o.left.color=0,o.color=1,Cr(e,o),o=i.parent.right),o.color=i.parent.color,i.parent.color=0,o.right.color=0,vr(e,i.parent),i=e.root)):(1===(o=i.parent.left).color&&(o.color=0,i.parent.color=1,Cr(e,i.parent),o=i.parent.left),0===o.left.color&&0===o.right.color?(o.color=1,i=i.parent):(0===o.left.color&&(o.right.color=0,o.color=1,vr(e,o),o=i.parent.left),o.color=i.parent.color,i.parent.color=0,o.left.color=0,Cr(e,i.parent),i=e.root));i.color=0,br()}}function yr(e,t){for(Lr(e,t);t!==e.root&&1===t.parent.color;)if(t.parent===t.parent.parent.left){const i=t.parent.parent.right;1===i.color?(t.parent.color=0,i.color=0,t.parent.parent.color=1,t=t.parent.parent):(t===t.parent.right&&vr(e,t=t.parent),t.parent.color=0,t.parent.parent.color=1,Cr(e,t.parent.parent))}else{const i=t.parent.parent.left;1===i.color?(t.parent.color=0,i.color=0,t.parent.parent.color=1,t=t.parent.parent):(t===t.parent.left&&Cr(e,t=t.parent),t.parent.color=0,t.parent.parent.color=1,vr(e,t.parent.parent))}e.root.color=0}function Sr(e,t,i,n){for(;t!==e.root&&t!==gr;)t.parent.left===t&&(t.parent.size_left+=i,t.parent.lf_left+=n),t=t.parent}function Lr(e,t){let i=0,n=0;if(t!==e.root){if(0===i){for(;t!==e.root&&t===t.parent.right;)t=t.parent;if(t===e.root)return;i=fr((t=t.parent).left)-t.size_left,n=_r(t.left)-t.lf_left,t.size_left+=i,t.lf_left+=n}for(;t!==e.root&&(0!==i||0!==n);)t.parent.left===t&&(t.parent.size_left+=i,t.parent.lf_left+=n),t=t.parent}}function Dr(e){return e<0?0:e>255?255:0|e}function Er(e){return e<0?0:e>4294967295?4294967295:0|e}gr.parent=gr,gr.left=gr,gr.right=gr,gr.color=0;class xr{constructor(e){let t=Dr(e);this._defaultValue=t,this._asciiMap=xr._createAsciiMap(t),this._map=new Map}static _createAsciiMap(e){let t=new Uint8Array(256);for(let i=0;i<256;i++)t[i]=e;return t}set(e,t){let i=Dr(t);e>=0&&e<256?this._asciiMap[e]=i:this._map.set(e,i)}get(e){return e>=0&&e<256?this._asciiMap[e]:this._map.get(e)||this._defaultValue}}class kr{constructor(){this._actual=new xr(0)}add(e){this._actual.set(e,1)}has(e){return 1===this._actual.get(e)}}class Nr extends xr{constructor(e){super(0);for(let t=0,i=e.length;t(t.hasOwnProperty(i)||(t[i]=e(i)),t[i])}(e=>new Nr(e)),Ar=999;class Mr{constructor(e,t,i,n){this.searchString=e,this.isRegex=t,this.matchCase=i,this.wordSeparators=n}parseSearchRequest(){if(""===this.searchString)return null;let e;e=this.isRegex?function t(e){if(!e||0===e.length)return!1;for(let t=0,i=e.length;t=i)break;const n=e.charCodeAt(t);if(110===n||114===n||87===n||119===n)return!0}return!1}(this.searchString):this.searchString.indexOf("\n")>=0;let i=null;try{i=qt(this.searchString,this.isRegex,{matchCase:this.matchCase,wholeWord:!1,multiline:e,global:!0,unicode:!0})}catch(e){return null}if(!i)return null;let n=!this.isRegex&&!e;return n&&this.searchString.toLowerCase()!==this.searchString.toUpperCase()&&(n=this.matchCase),new Or(i,this.wordSeparators?Ir(this.wordSeparators):null,n?this.searchString:null)}}class Or{constructor(e,t,i){this.regex=e,this.wordSeparators=t,this.simpleSearch=i}}function Rr(e,t,i){if(!i)return new Go(e,null);let n=[];for(let e=0,i=t.length;e>0);t[o]>=e?n=o-1:t[o+1]>=e?(i=o,n=o):i=o+1}return i+1}}class Fr{static findMatches(e,t,i,n,o){const s=t.parseSearchRequest();return s?s.regex.multiline?this._doFindMatchesMultiline(e,i,new Wr(s.wordSeparators,s.regex),n,o):this._doFindMatchesLineByLine(e,i,s,n,o):[]}static _getMultilineMatchRange(e,t,i,n,o,s){let r,a,l=0;if(r=n?t+o+(l=n.findLineFeedCountBeforeOffset(o)):t+o,n){let e=n.findLineFeedCountBeforeOffset(o+s.length);a=r+s.length+(e-l)}else a=r+s.length;const h=e.getPositionAt(r),c=e.getPositionAt(a);return new ro(h.lineNumber,h.column,c.lineNumber,c.column)}static _doFindMatchesMultiline(e,t,i,n,o){const s=e.getOffsetAt(t.getStartPosition()),r=e.getValueInRange(t,1),a="\r\n"===e.getEOL()?new Pr(r):null,l=[];let h,c=0;for(i.reset(0);h=i.next(r);)if(l[c++]=Rr(this._getMultilineMatchRange(e,s,r,a,h.index,h[0]),h,n),c>=o)return l;return l}static _doFindMatchesLineByLine(e,t,i,n,o){const s=[];let r=0;if(t.startLineNumber===t.endLineNumber){const a=e.getLineContent(t.startLineNumber).substring(t.startColumn-1,t.endColumn-1);return r=this._findMatchesInLine(i,a,t.startLineNumber,t.startColumn-1,r,s,n,o),s}const a=e.getLineContent(t.startLineNumber).substring(t.startColumn-1);r=this._findMatchesInLine(i,a,t.startLineNumber,t.startColumn-1,r,s,n,o);for(let a=t.startLineNumber+1;a=a))return o;return o}const h=new Wr(e.wordSeparators,e.regex);let c;h.reset(0);do{if((c=h.next(t))&&(s[o++]=Rr(new ro(i,c.index+1+n,i,c.index+1+c[0].length+n),c,r),o>=a))return o}while(c);return o}static findNextMatch(e,t,i,n){const o=t.parseSearchRequest();if(!o)return null;const s=new Wr(o.wordSeparators,o.regex);return o.regex.multiline?this._doFindNextMatchMultiline(e,i,s,n):this._doFindNextMatchLineByLine(e,i,s,n)}static _doFindNextMatchMultiline(e,t,i,n){const o=new Tt(t.lineNumber,1),s=e.getOffsetAt(o),r=e.getLineCount(),a=e.getValueInRange(new ro(o.lineNumber,o.column,r,e.getLineMaxColumn(r)),1),l="\r\n"===e.getEOL()?new Pr(a):null;i.reset(t.column-1);let h=i.next(a);return h?Rr(this._getMultilineMatchRange(e,s,a,l,h.index,h[0]),h,n):1!==t.lineNumber||1!==t.column?this._doFindNextMatchMultiline(e,new Tt(1,1),i,n):null}static _doFindNextMatchLineByLine(e,t,i,n){const o=e.getLineCount(),s=t.lineNumber,r=e.getLineContent(s),a=this._findFirstMatchInLine(i,r,s,t.column,n);if(a)return a;for(let t=1;t<=o;t++){const r=(s+t-1)%o,a=e.getLineContent(r+1),l=this._findFirstMatchInLine(i,a,r+1,1,n);if(l)return l}return null}static _findFirstMatchInLine(e,t,i,n,o){e.reset(n-1);const s=e.next(t);return s?Rr(new ro(i,s.index+1,i,s.index+1+s[0].length),s,o):null}static findPreviousMatch(e,t,i,n){const o=t.parseSearchRequest();if(!o)return null;const s=new Wr(o.wordSeparators,o.regex);return o.regex.multiline?this._doFindPreviousMatchMultiline(e,i,s,n):this._doFindPreviousMatchLineByLine(e,i,s,n)}static _doFindPreviousMatchMultiline(e,t,i,n){const o=this._doFindMatchesMultiline(e,new ro(1,1,t.lineNumber,t.column),i,n,10*Ar);if(o.length>0)return o[o.length-1];const s=e.getLineCount();return t.lineNumber!==s||t.column!==e.getLineMaxColumn(s)?this._doFindPreviousMatchMultiline(e,new Tt(s,e.getLineMaxColumn(s)),i,n):null}static _doFindPreviousMatchLineByLine(e,t,i,n){const o=e.getLineCount(),s=t.lineNumber,r=e.getLineContent(s).substring(0,t.column-1),a=this._findLastMatchInLine(i,r,s,n);if(a)return a;for(let t=1;t<=o;t++){const r=(o+s-t-1)%o,a=e.getLineContent(r+1),l=this._findLastMatchInLine(i,a,r+1,n);if(l)return l}return null}static _findLastMatchInLine(e,t,i,n){let o,s=null;for(e.reset(0);o=e.next(t);)s=Rr(new ro(i,o.index+1,i,o.index+1+o[0].length),o,n);return s}}function Br(e,t,i,n,o){return function s(e,t,i,n,o){if(0===n)return!0;const s=t.charCodeAt(n-1);if(0!==e.get(s))return!0;if(13===s||10===s)return!0;if(o>0){const i=t.charCodeAt(n);if(0!==e.get(i))return!0}return!1}(e,t,0,n,o)&&function r(e,t,i,n,o){if(n+o===i)return!0;const s=t.charCodeAt(n+o);if(0!==e.get(s))return!0;if(13===s||10===s)return!0;if(o>0){const i=t.charCodeAt(n+o-1);if(0!==e.get(i))return!0}return!1}(e,t,i,n,o)}class Wr{constructor(e,t){this._wordSeparators=e,this._searchRegex=t,this._prevMatchStartIndex=-1,this._prevMatchLength=0}reset(e){this._searchRegex.lastIndex=e,this._prevMatchStartIndex=-1,this._prevMatchLength=0}next(e){const t=e.length;let i;do{if(this._prevMatchStartIndex+this._prevMatchLength===t)return null;if(!(i=this._searchRegex.exec(e)))return null;const n=i.index,o=i[0].length;if(n===this._prevMatchStartIndex&&o===this._prevMatchLength){if(0===o){pi(e,t,this._searchRegex.lastIndex)>65535?this._searchRegex.lastIndex+=2:this._searchRegex.lastIndex+=1;continue}return null}if(this._prevMatchStartIndex=n,this._prevMatchLength=o,!this._wordSeparators||Br(this._wordSeparators,e,t,n,o))return i}while(i);return null}}const Vr=65535;function zr(e){let t;return(t=e[e.length-1]<65536?new Uint16Array(e.length):new Uint32Array(e.length)).set(e,0),t}class Hr{constructor(e,t,i,n,o){this.lineStarts=e,this.cr=t,this.lf=i,this.crlf=n,this.isBasicASCII=o}}function Ur(e,t=!0){let i=[0],n=1;for(let t=0,o=e.length;t(e!==gr&&this._pieces.push(e.piece),!0))}read(){return 0===this._pieces.length?0===this._index?(this._index++,this._BOM):null:this._index>this._pieces.length-1?null:0===this._index?this._BOM+this._tree.getPieceContent(this._pieces[this._index++]):this._tree.getPieceContent(this._pieces[this._index++])}}class qr{constructor(e){this._limit=e,this._cache=[]}get(e){for(let t=this._cache.length-1;t>=0;t--){let i=this._cache[t];if(i.nodeStartOffset<=e&&i.nodeStartOffset+i.node.piece.length>=e)return i}return null}get2(e){for(let t=this._cache.length-1;t>=0;t--){let i=this._cache[t];if(i.nodeStartLineNumber&&i.nodeStartLineNumber=e)return i}return null}set(e){this._cache.length>=this._limit&&this._cache.shift(),this._cache.push(e)}validate(e){let t=!1,i=this._cache;for(let n=0;n=e)&&(i[n]=null,t=!0)}if(t){let e=[];for(const t of i)null!==t&&e.push(t);this._cache=e}}}class Gr{constructor(e,t,i){this.create(e,t,i)}create(e,t,i){this._buffers=[new $r("",[0])],this._lastChangeBufferPos={line:0,column:0},this.root=gr,this._lineCnt=1,this._length=0,this._EOL=t,this._EOLLength=t.length,this._EOLNormalized=i;let n=null;for(let t=0,i=e.length;t0){e[t].lineStarts||(e[t].lineStarts=Ur(e[t].buffer));let i=new Kr(t+1,{line:0,column:0},{line:e[t].lineStarts.length-1,column:e[t].buffer.length-e[t].lineStarts[e[t].lineStarts.length-1]},e[t].lineStarts.length-1,e[t].buffer.length);this._buffers.push(e[t]),n=this.rbInsertRight(n,i)}this._searchCache=new qr(1),this._lastVisitedLine={lineNumber:0,value:""},this.computeBufferMetadata()}normalizeEOL(e){let t=Vr-Math.floor(Vr/3),i=2*t,n="",o=0,s=[];if(this.iterate(this.root,r=>{let a=this.getNodeContent(r),l=a.length;if(o<=t||o+l0){let t=n.replace(/\r\n|\r|\n/g,e);s.push(new $r(t,Ur(t)))}this.create(s,e,!0)}getEOL(){return this._EOL}setEOL(e){this._EOL=e,this._EOLLength=this._EOL.length,this.normalizeEOL(e)}createSnapshot(e){return new jr(this,e)}getOffsetAt(e,t){let i=0,n=this.root;for(;n!==gr;)if(n.left!==gr&&n.lf_left+1>=e)n=n.left;else{if(n.lf_left+n.piece.lineFeedCnt+1>=e)return(i+=n.size_left)+(this.getAccumulatedValue(n,e-n.lf_left-2)+t-1);e-=n.lf_left+n.piece.lineFeedCnt,i+=n.size_left+n.piece.length,n=n.right}return i}getPositionAt(e){e=Math.floor(e),e=Math.max(0,e);let t=this.root,i=0,n=e;for(;t!==gr;)if(0!==t.size_left&&t.size_left>=e)t=t.left;else{if(t.size_left+t.piece.length>=e){let o=this.getIndexOf(t,e-t.size_left);if(i+=t.lf_left+o.index,0===o.index){let e=this.getOffsetAt(i+1,1);return new Tt(i+1,n-e+1)}return new Tt(i+1,o.remainder+1)}if(e-=t.size_left+t.piece.length,i+=t.lf_left+t.piece.lineFeedCnt,t.right===gr){let t=this.getOffsetAt(i+1,1);return new Tt(i+1,n-e-t+1)}t=t.right}return new Tt(1,1)}getValueInRange(e,t){if(e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn)return"";let i=this.nodeAt2(e.startLineNumber,e.startColumn),n=this.nodeAt2(e.endLineNumber,e.endColumn),o=this.getValueInRange2(i,n);return t?t===this._EOL&&this._EOLNormalized&&t===this.getEOL()&&this._EOLNormalized?o:o.replace(/\r\n|\r|\n/g,t):o}getValueInRange2(e,t){if(e.node===t.node){let i=e.node,n=this._buffers[i.piece.bufferIndex].buffer,o=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);return n.substring(o+e.remainder,o+t.remainder)}let i=e.node,n=this._buffers[i.piece.bufferIndex].buffer,o=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start),s=n.substring(o+e.remainder,o+i.piece.length);for(i=i.next();i!==gr;){let e=this._buffers[i.piece.bufferIndex].buffer,n=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);if(i===t.node){s+=e.substring(n,n+t.remainder);break}s+=e.substr(n,i.piece.length),i=i.next()}return s}getLinesContent(){let e=[],t=0,i="",n=!1;return this.iterate(this.root,o=>{if(o===gr)return!0;const s=o.piece;let r=s.length;if(0===r)return!0;const a=this._buffers[s.bufferIndex].buffer,l=this._buffers[s.bufferIndex].lineStarts,h=s.start.line,c=s.end.line;let d=l[h]+s.start.column;if(n&&(10===a.charCodeAt(d)&&(d++,r--),e[t++]=i,i="",n=!1,0===r))return!0;if(h===c)return this._EOLNormalized||13!==a.charCodeAt(d+r-1)?i+=a.substr(d,r):(n=!0,i+=a.substr(d,r-1)),!0;i+=this._EOLNormalized?a.substring(d,Math.max(d,l[h+1]-this._EOLLength)):a.substring(d,l[h+1]).replace(/(\r\n|\r|\n)$/,""),e[t++]=i;for(let n=h+1;ne+f,t.reset(0)):(u=p.buffer,g=e=>e,t.reset(f));do{if(d=t.next(u)){if(g(d.index)>=_)return h;this.positionInBuffer(e,g(d.index)-m,b);let t=this.getLineFeedCnt(e.piece.bufferIndex,o,b),s=b.line===o.line?b.column-o.column+n:b.column+1;if(c[h++]=Rr(new ro(i+t,s,i+t,s+d[0].length),d,a),g(d.index)+d[0].length>=_)return h;if(h>=l)return h}}while(d);return h}findMatchesLineByLine(e,t,i,n){const o=[];let s=0;const r=new Wr(t.wordSeparators,t.regex);let a=this.nodeAt2(e.startLineNumber,e.startColumn);if(null===a)return[];let l=this.nodeAt2(e.endLineNumber,e.endColumn);if(null===l)return[];let h=this.positionInBuffer(a.node,a.remainder),c=this.positionInBuffer(l.node,l.remainder);if(a.node===l.node)return this.findMatchesInNode(a.node,r,e.startLineNumber,e.startColumn,h,c,t,i,n,s,o),o;let d=e.startLineNumber,u=a.node;for(;u!==l.node;){let l=this.getLineFeedCnt(u.piece.bufferIndex,h,u.piece.end);if(l>=1){let a=this._buffers[u.piece.bufferIndex].lineStarts,c=this.offsetInBuffer(u.piece.bufferIndex,u.piece.start);if((s=this.findMatchesInNode(u,r,d,d===e.startLineNumber?e.startColumn:1,h,this.positionInBuffer(u,a[h.line+l]-c),t,i,n,s,o))>=n)return o;d+=l}let c=d===e.startLineNumber?e.startColumn-1:0;if(d===e.endLineNumber){const a=this.getLineContent(d).substring(c,e.endColumn-1);return s=this._findMatchesInLine(t,r,a,e.endLineNumber,c,s,o,i,n),o}if((s=this._findMatchesInLine(t,r,this.getLineContent(d).substr(c),d,c,s,o,i,n))>=n)return o;u=(a=this.nodeAt2(++d,1)).node,h=this.positionInBuffer(a.node,a.remainder)}if(d===e.endLineNumber){let a=d===e.startLineNumber?e.startColumn-1:0;const l=this.getLineContent(d).substring(a,e.endColumn-1);return s=this._findMatchesInLine(t,r,l,e.endLineNumber,a,s,o,i,n),o}return s=this.findMatchesInNode(l.node,r,d,d===e.startLineNumber?e.startColumn:1,h,c,t,i,n,s,o),o}_findMatchesInLine(e,t,i,n,o,s,r,a,l){const h=e.wordSeparators;if(!a&&e.simpleSearch){const t=e.simpleSearch,a=t.length,c=i.length;let d=-a;for(;-1!==(d=i.indexOf(t,d+a));)if((!h||Br(h,i,c,d,a))&&(r[s++]=new Go(new ro(n,d+1+o,n,d+1+a+o),null),s>=l))return s;return s}let c;t.reset(0);do{if((c=t.next(i))&&(r[s++]=Rr(new ro(n,c.index+1+o,n,c.index+1+c[0].length+o),c,a),s>=l))return s}while(c);return s}insert(e,t,i=!1){if(this._EOLNormalized=this._EOLNormalized&&i,this._lastVisitedLine.lineNumber=0,this._lastVisitedLine.value="",this.root!==gr){let{node:i,remainder:n,nodeStartOffset:o}=this.nodeAt(e),s=i.piece,r=s.bufferIndex,a=this.positionInBuffer(i,n);if(0===i.piece.bufferIndex&&s.end.line===this._lastChangeBufferPos.line&&s.end.column===this._lastChangeBufferPos.column&&o+s.length===e&&t.lengthe){let e=[],o=new Kr(s.bufferIndex,a,s.end,this.getLineFeedCnt(s.bufferIndex,a,s.end),this.offsetInBuffer(r,s.end)-this.offsetInBuffer(r,a));if(this.shouldCheckCRLF()&&this.endWithCR(t)&&10===this.nodeCharCodeAt(i,n)){let e={line:o.start.line+1,column:0};o=new Kr(o.bufferIndex,e,o.end,this.getLineFeedCnt(o.bufferIndex,e,o.end),o.length-1),t+="\n"}if(this.shouldCheckCRLF()&&this.startWithLF(t))if(13===this.nodeCharCodeAt(i,n-1)){let o=this.positionInBuffer(i,n-1);this.deleteNodeTail(i,o),t="\r"+t,0===i.piece.length&&e.push(i)}else this.deleteNodeTail(i,a);else this.deleteNodeTail(i,a);let l=this.createNewPieces(t);o.length>0&&this.rbInsertRight(i,o);let h=i;for(let e=0;e=0;e--)o=this.rbInsertLeft(o,n[e]);this.validateCRLFWithPrevNode(o),this.deleteNodes(i)}insertContentToNodeRight(e,t){this.adjustCarriageReturnFromNext(e,t)&&(e+="\n");let i=this.createNewPieces(e),n=this.rbInsertRight(t,i[0]),o=n;for(let e=1;e=(h=o[l+1])))break;r=l+1}return i?(i.line=l,i.column=s-c,null):{line:l,column:s-c}}getLineFeedCnt(e,t,i){if(0===i.column)return i.line-t.line;let n=this._buffers[e].lineStarts;if(i.line===n.length-1)return i.line-t.line;let o=n[i.line]+i.column;return n[i.line+1]>o+1?i.line-t.line:13===this._buffers[e].buffer.charCodeAt(o-1)?i.line-t.line+1:i.line-t.line}offsetInBuffer(e,t){return this._buffers[e].lineStarts[t.line]+t.column}deleteNodes(e){for(let t=0;tVr){let t=[];for(;e.length>Vr;){const i=e.charCodeAt(Vr-1);let n;13===i||i>=55296&&i<=56319?(n=e.substring(0,Vr-1),e=e.substring(Vr-1)):(n=e.substring(0,Vr),e=e.substring(Vr));let o=Ur(n);t.push(new Kr(this._buffers.length,{line:0,column:0},{line:o.length-1,column:n.length-o[o.length-1]},o.length-1,n.length)),this._buffers.push(new $r(n,o))}let i=Ur(e);return t.push(new Kr(this._buffers.length,{line:0,column:0},{line:i.length-1,column:e.length-i[i.length-1]},i.length-1,e.length)),this._buffers.push(new $r(e,i)),t}let t=this._buffers[0].buffer.length;const i=Ur(e,!1);let n=this._lastChangeBufferPos;if(this._buffers[0].lineStarts[this._buffers[0].lineStarts.length-1]===t&&0!==t&&this.startWithLF(e)&&this.endWithCR(this._buffers[0].buffer)){this._lastChangeBufferPos={line:this._lastChangeBufferPos.line,column:this._lastChangeBufferPos.column+1},n=this._lastChangeBufferPos;for(let e=0;e=e-1)i=i.left;else{if(i.lf_left+i.piece.lineFeedCnt>e-1){let n=this.getAccumulatedValue(i,e-i.lf_left-2),r=this.getAccumulatedValue(i,e-i.lf_left-1),a=this._buffers[i.piece.bufferIndex].buffer,l=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);return this._searchCache.set({node:i,nodeStartOffset:o+=i.size_left,nodeStartLineNumber:s-(e-1-i.lf_left)}),a.substring(l+n,l+r-t)}if(i.lf_left+i.piece.lineFeedCnt===e-1){let t=this.getAccumulatedValue(i,e-i.lf_left-2),o=this._buffers[i.piece.bufferIndex].buffer,s=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);n=o.substring(s+t,s+i.piece.length);break}e-=i.lf_left+i.piece.lineFeedCnt,o+=i.size_left+i.piece.length,i=i.right}}for(i=i.next();i!==gr;){let e=this._buffers[i.piece.bufferIndex].buffer;if(i.piece.lineFeedCnt>0){let o=this.getAccumulatedValue(i,0),s=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);return n+e.substring(s,s+o-t)}{let t=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);n+=e.substr(t,i.piece.length)}i=i.next()}return n}computeBufferMetadata(){let e=this.root,t=1,i=0;for(;e!==gr;)t+=e.lf_left+e.piece.lineFeedCnt,i+=e.size_left+e.piece.length,e=e.right;this._lineCnt=t,this._length=i,this._searchCache.validate(this._length)}getIndexOf(e,t){let i=e.piece,n=this.positionInBuffer(e,t),o=n.line-i.start.line;if(this.offsetInBuffer(i.bufferIndex,i.end)-this.offsetInBuffer(i.bufferIndex,i.start)===t){let t=this.getLineFeedCnt(e.piece.bufferIndex,i.start,n);if(t!==o)return{index:t,remainder:0}}return{index:o,remainder:n.column}}getAccumulatedValue(e,t){if(t<0)return 0;let i=e.piece,n=this._buffers[i.bufferIndex].lineStarts,o=i.start.line+t+1;return o>i.end.line?n[i.end.line]+i.end.column-n[i.start.line]-i.start.column:n[o]-n[i.start.line]-i.start.column}deleteNodeTail(e,t){const i=e.piece,n=i.lineFeedCnt,o=this.offsetInBuffer(i.bufferIndex,i.end),s=t,r=this.offsetInBuffer(i.bufferIndex,s),a=this.getLineFeedCnt(i.bufferIndex,i.start,s),l=a-n,h=r-o;e.piece=new Kr(i.bufferIndex,i.start,s,a,i.length+h),Sr(this,e,h,l)}deleteNodeHead(e,t){const i=e.piece,n=i.lineFeedCnt,o=this.offsetInBuffer(i.bufferIndex,i.start),s=t,r=this.getLineFeedCnt(i.bufferIndex,s,i.end),a=r-n,l=o-this.offsetInBuffer(i.bufferIndex,s);e.piece=new Kr(i.bufferIndex,s,i.end,r,i.length+l),Sr(this,e,l,a)}shrinkNode(e,t,i){const n=e.piece,o=n.start,s=n.end,r=n.length,a=n.lineFeedCnt,l=t,h=this.getLineFeedCnt(n.bufferIndex,n.start,l),c=this.offsetInBuffer(n.bufferIndex,t)-this.offsetInBuffer(n.bufferIndex,o);e.piece=new Kr(n.bufferIndex,n.start,l,h,c),Sr(this,e,c-r,h-a);let d=new Kr(n.bufferIndex,i,s,this.getLineFeedCnt(n.bufferIndex,i,s),this.offsetInBuffer(n.bufferIndex,s)-this.offsetInBuffer(n.bufferIndex,i)),u=this.rbInsertRight(e,d);this.validateCRLFWithPrevNode(u)}appendToNode(e,t){this.adjustCarriageReturnFromNext(t,e)&&(t+="\n");const i=this.shouldCheckCRLF()&&this.startWithLF(t)&&this.endWithCR(e),n=this._buffers[0].buffer.length;this._buffers[0].buffer+=t;const o=Ur(t,!1);for(let e=0;ee)t=t.left;else{if(t.size_left+t.piece.length>=e){let i={node:t,remainder:e-t.size_left,nodeStartOffset:n+=t.size_left};return this._searchCache.set(i),i}e-=t.size_left+t.piece.length,n+=t.size_left+t.piece.length,t=t.right}return null}nodeAt2(e,t){let i=this.root,n=0;for(;i!==gr;)if(i.left!==gr&&i.lf_left>=e-1)i=i.left;else{if(i.lf_left+i.piece.lineFeedCnt>e-1){let o=this.getAccumulatedValue(i,e-i.lf_left-2),s=this.getAccumulatedValue(i,e-i.lf_left-1);return n+=i.size_left,{node:i,remainder:Math.min(o+t-1,s),nodeStartOffset:n}}if(i.lf_left+i.piece.lineFeedCnt===e-1){let o=this.getAccumulatedValue(i,e-i.lf_left-2);if(o+t-1<=i.piece.length)return{node:i,remainder:o+t-1,nodeStartOffset:n};t-=i.piece.length-o;break}e-=i.lf_left+i.piece.lineFeedCnt,n+=i.size_left+i.piece.length,i=i.right}for(i=i.next();i!==gr;){if(i.piece.lineFeedCnt>0){let e=this.getAccumulatedValue(i,0),n=this.offsetOfNode(i);return{node:i,remainder:Math.min(t-1,e),nodeStartOffset:n}}if(i.piece.length>=t-1)return{node:i,remainder:t-1,nodeStartOffset:this.offsetOfNode(i)};t-=i.piece.length,i=i.next()}return null}nodeCharCodeAt(e,t){if(e.piece.lineFeedCnt<1)return-1;let i=this._buffers[e.piece.bufferIndex],n=this.offsetInBuffer(e.piece.bufferIndex,e.piece.start)+t;return i.buffer.charCodeAt(n)}offsetOfNode(e){if(!e)return 0;let t=e.size_left;for(;e!==this.root;)e.parent.right===e&&(t+=e.parent.size_left+e.parent.piece.length),e=e.parent;return t}shouldCheckCRLF(){return!(this._EOLNormalized&&"\n"===this._EOL)}startWithLF(e){if("string"==typeof e)return 10===e.charCodeAt(0);if(e===gr||0===e.piece.lineFeedCnt)return!1;let t=e.piece,i=this._buffers[t.bufferIndex].lineStarts,n=t.start.line,o=i[n]+t.start.column;return n!==i.length-1&&!(i[n+1]>o+1)&&10===this._buffers[t.bufferIndex].buffer.charCodeAt(o)}endWithCR(e){return"string"==typeof e?13===e.charCodeAt(e.length-1):e!==gr&&0!==e.piece.lineFeedCnt&&13===this.nodeCharCodeAt(e,e.piece.length-1)}validateCRLFWithPrevNode(e){if(this.shouldCheckCRLF()&&this.startWithLF(e)){let t=e.prev();this.endWithCR(t)&&this.fixCRLF(t,e)}}validateCRLFWithNextNode(e){if(this.shouldCheckCRLF()&&this.endWithCR(e)){let t=e.next();this.startWithLF(t)&&this.fixCRLF(e,t)}}fixCRLF(e,t){let i,n=[],o=this._buffers[e.piece.bufferIndex].lineStarts;e.piece=new Kr(e.piece.bufferIndex,e.piece.start,i=0===e.piece.end.column?{line:e.piece.end.line-1,column:o[e.piece.end.line]-o[e.piece.end.line-1]-1}:{line:e.piece.end.line,column:e.piece.end.column-1},e.piece.lineFeedCnt-1,e.piece.length-1),Sr(this,e,-1,-1),0===e.piece.length&&n.push(e);let s={line:t.piece.start.line+1,column:0};const r=t.piece.length-1,a=this.getLineFeedCnt(t.piece.bufferIndex,s,t.piece.end);t.piece=new Kr(t.piece.bufferIndex,s,t.piece.end,a,r),Sr(this,t,-1,-1),0===t.piece.length&&n.push(t);let l=this.createNewPieces("\r\n");this.rbInsertRight(e,l[0]);for(let e=0;ee===t)){if(e===t)return!0;if(!e||!t)return!1;if(e.length!==t.length)return!1;for(let n=0,o=e.length;n0))return s;o=s-1}}return-(n+1)}function Qr(e,t,i){if((e|=0)>=t.length)throw new TypeError("invalid index");let n=t[Math.floor(t.length*Math.random())],o=[],s=[],r=[];for(let e of t){const t=i(e,n);t<0?o.push(e):t>0?s.push(e):r.push(e)}return en?s[a++]:a>o?s[r++]:t(s[a],s[r])<0?s[a++]:s[r++]}(t,i,n,r,o,s)}(e,t,0,e.length-1,[]),e}function ea(e,t){const i=[];let n=void 0;for(const o of Jr(e.slice(0),t))n&&0===t(n[0],o)?n.push(o):i.push(n=[o]);return i}function ta(e){return e.filter(e=>!!e)}function ia(e){return!Array.isArray(e)||0===e.length}function na(e){return Array.isArray(e)&&e.length>0}function oa(e,t){if(!t)return e.filter((t,i)=>e.indexOf(t)===i);const i=Object.create(null);return e.filter(e=>{const n=t(e);return!i[n]&&(i[n]=!0,!0)})}function sa(e){const t=new Set;return e.filter(e=>!t.has(e)&&(t.add(e),!0))}function ra(e,t){return e.length>0?e[0]:t}function aa(e){return[].concat(...e)}function la(e,t){let i="number"==typeof t?e:0;"number"==typeof t?i=e:(i=0,t=e);const n=[];if(i<=t)for(let e=i;et;e--)n.push(e);return n}function ha(e,t,i){const n=e.slice(0,t),o=e.slice(t);return n.concat(i,o)}function ca(e,t){const i=e.indexOf(t);i>-1&&(e.splice(i,1),e.unshift(t))}function da(e,t){const i=e.indexOf(t);i>-1&&(e.splice(i,1),e.push(t))}function ua(e){return Array.isArray(e)?e:[e]}function ga(e){return function e(t,i){switch(typeof t){case"object":return null===t?pa(349,i):Array.isArray(t)?function n(t,i){return i=pa(104579,i),t.reduce((t,i)=>e(i,t),i)}(t,i):function o(t,i){return i=pa(181387,i),Object.keys(t).sort().reduce((i,n)=>(i=ma(n,i),e(t[n],i)),i)}(t,i);case"string":return ma(t,i);case"boolean":return function s(e,t){return pa(e?433:863,t)}(t,i);case"number":return pa(t,i);case"undefined":return pa(937,i);default:return pa(617,i)}}(e,0)}function pa(e,t){return(t<<5)-t+e|0}function ma(e,t){t=pa(149417,t);for(let i=0,n=e.length;i>>n)>>>0}function _a(e,t=0,i=e.byteLength,n=0){for(let o=0;oe.toString(16).padStart(2,"0")).join(""):function i(e,t,n="0"){for(;e.length>>0).toString(16),t/4)}class va{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(67),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(e){const t=e.length;if(0===t)return;const i=this._buff;let n,o,s=this._buffLen,r=this._leftoverHighSurrogate;for(0!==r?(n=r,o=-1,r=0):(n=e.charCodeAt(0),o=0);;){let a=n;if(di(n)){if(!(o+1>>6,e[t++]=128|(63&i)>>>0):i<65536?(e[t++]=224|(61440&i)>>>12,e[t++]=128|(4032&i)>>>6,e[t++]=128|(63&i)>>>0):(e[t++]=240|(1835008&i)>>>18,e[t++]=128|(258048&i)>>>12,e[t++]=128|(4032&i)>>>6,e[t++]=128|(63&i)>>>0),t>=64&&(this._step(),t-=64,this._totalLen+=64,e[0]=e[64],e[1]=e[65],e[2]=e[66]),t}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),ba(this._h0)+ba(this._h1)+ba(this._h2)+ba(this._h3)+ba(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,_a(this._buff,this._buffLen),this._buffLen>56&&(this._step(),_a(this._buff));const e=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(e/4294967296),!1),this._buffDV.setUint32(60,e%4294967296,!1),this._step()}_step(){const e=va._bigBlock32,t=this._buffDV;for(let i=0;i<64;i+=4)e.setUint32(i,t.getUint32(i,!1),!1);for(let t=64;t<320;t+=4)e.setUint32(t,fa(e.getUint32(t-12,!1)^e.getUint32(t-32,!1)^e.getUint32(t-56,!1)^e.getUint32(t-64,!1),1),!1);let i,n,o,s=this._h0,r=this._h1,a=this._h2,l=this._h3,h=this._h4;for(let t=0;t<80;t++)t<20?(i=r&a|~r&l,n=1518500249):t<40?(i=r^a^l,n=1859775393):t<60?(i=r&a|r&l|a&l,n=2400959708):(i=r^a^l,n=3395469782),o=fa(s,5)+i+h+n+e.getUint32(4*t,!1)&4294967295,h=l,l=a,a=fa(r,30),r=s,s=o;this._h0=this._h0+s&4294967295,this._h1=this._h1+r&4294967295,this._h2=this._h2+a&4294967295,this._h3=this._h3+l&4294967295,this._h4=this._h4+h&4294967295}}va._bigBlock32=new DataView(new ArrayBuffer(320));class Ca{constructor(){this._value="",this._pos=0}reset(e){return this._value=e,this._pos=0,this}next(){return this._pos+=1,this}hasNext(){return this._pos!1)){return new Da(new Sa(e))}static forStrings(){return new Da(new Ca)}static forConfigKeys(){return new Da(new wa)}clear(){this._root=void 0}set(e,t){const i=this._iter.reset(e);let n;for(this._root||(this._root=new La,this._root.segment=i.value()),n=this._root;;){const e=i.cmp(n.segment);if(e>0)n.left||(n.left=new La,n.left.segment=i.value()),n=n.left;else if(e<0)n.right||(n.right=new La,n.right.segment=i.value()),n=n.right;else{if(!i.hasNext())break;i.next(),n.mid||(n.mid=new La,n.mid.segment=i.value()),n=n.mid}}const o=n.value;return n.value=t,n.key=e,o}get(e){var t;return null===(t=this._getNode(e))||void 0===t?void 0:t.value}_getNode(e){const t=this._iter.reset(e);let i=this._root;for(;i;){const e=t.cmp(i.segment);if(e>0)i=i.left;else if(e<0)i=i.right;else{if(!t.hasNext())break;t.next(),i=i.mid}}return i}has(e){const t=this._getNode(e);return!(void 0===(null==t?void 0:t.value)&&void 0===(null==t?void 0:t.mid))}delete(e){return this._delete(e,!1)}deleteSuperstr(e){return this._delete(e,!0)}_delete(e,t){const i=this._iter.reset(e),n=[];let o=this._root;for(;o;){const e=i.cmp(o.segment);if(e>0)n.push([1,o]),o=o.left;else if(e<0)n.push([-1,o]),o=o.right;else{if(!i.hasNext()){for(t?(o.left=void 0,o.mid=void 0,o.right=void 0):o.value=void 0;n.length>0&&o.isEmpty();){let[e,t]=n.pop();switch(e){case 1:t.left=void 0;break;case 0:t.mid=void 0;break;case-1:t.right=void 0}o=t}break}i.next(),n.push([0,o]),o=o.mid}}}findSubstr(e){const t=this._iter.reset(e);let i=this._root,n=void 0;for(;i;){const e=t.cmp(i.segment);if(e>0)i=i.left;else if(e<0)i=i.right;else{if(!t.hasNext())break;t.next(),n=i.value||n,i=i.mid}}return i&&i.value||n}findSuperstr(e){const t=this._iter.reset(e);let i=this._root;for(;i;){const e=t.cmp(i.segment);if(e>0)i=i.left;else if(e<0)i=i.right;else{if(!t.hasNext())return i.mid?this._entries(i.mid):void 0;t.next(),i=i.mid}}}forEach(e){for(const[t,i]of this)e(i,t)}*[Symbol.iterator](){yield*this._entries(this._root)}*_entries(e){e&&(yield*this._entries(e.left),e.value&&(yield[e.key,e.value]),yield*this._entries(e.mid),yield*this._entries(e.right))}}class Ea{constructor(e,t){this[Symbol.toStringTag]="ResourceMap",e instanceof Ea?(this.map=new Map(e.map),this.toKey=null!=t?t:Ea.defaultToKey):(this.map=new Map,this.toKey=null!=e?e:Ea.defaultToKey)}set(e,t){return this.map.set(this.toKey(e),t),this}get(e){return this.map.get(this.toKey(e))}has(e){return this.map.has(this.toKey(e))}get size(){return this.map.size}clear(){this.map.clear()}delete(e){return this.map.delete(this.toKey(e))}forEach(e,t){void 0!==t&&(e=e.bind(t));for(let[t,i]of this.map)e(i,mt.parse(t),this)}values(){return this.map.values()}*keys(){for(let e of this.map.keys())yield mt.parse(e)}*entries(){for(let e of this.map.entries())yield[mt.parse(e[0]),e[1]]}*[Symbol.iterator](){for(let e of this.map)yield[mt.parse(e[0]),e[1]]}}Ea.defaultToKey=e=>e.toString();class xa{constructor(){this[Symbol.toStringTag]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){var e;return null===(e=this._head)||void 0===e?void 0:e.value}get last(){var e;return null===(e=this._tail)||void 0===e?void 0:e.value}has(e){return this._map.has(e)}get(e,t=0){const i=this._map.get(e);if(i)return 0!==t&&this.touch(i,t),i.value}set(e,t,i=0){let n=this._map.get(e);if(n)n.value=t,0!==i&&this.touch(n,i);else{switch(n={key:e,value:t,next:void 0,previous:void 0},i){case 0:this.addItemLast(n);break;case 1:this.addItemFirst(n);break;case 2:default:this.addItemLast(n)}this._map.set(e,n),this._size++}return this}delete(e){return!!this.remove(e)}remove(e){const t=this._map.get(e);if(t)return this._map.delete(e),this.removeItem(t),this._size--,t.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");const e=this._head;return this._map.delete(e.key),this.removeItem(e),this._size--,e.value}forEach(e,t){const i=this._state;let n=this._head;for(;n;){if(t?e.bind(t)(n.value,n.key,this):e(n.value,n.key,this),this._state!==i)throw new Error("LinkedMap got modified during iteration.");n=n.next}}keys(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator]:()=>n,next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:i.key,done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}values(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator]:()=>n,next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:i.value,done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}entries(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator]:()=>n,next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:[i.key,i.value],done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}[Symbol.iterator](){return this.entries()}trimOld(e){if(e>=this.size)return;if(0===e)return void this.clear();let t=this._head,i=this.size;for(;t&&i>e;)this._map.delete(t.key),t=t.next,i--;this._head=t,this._size=i,t&&(t.previous=void 0),this._state++}addItemFirst(e){if(this._head||this._tail){if(!this._head)throw new Error("Invalid list");e.next=this._head,this._head.previous=e}else this._tail=e;this._head=e,this._state++}addItemLast(e){if(this._head||this._tail){if(!this._tail)throw new Error("Invalid list");e.previous=this._tail,this._tail.next=e}else this._head=e;this._tail=e,this._state++}removeItem(e){if(e===this._head&&e===this._tail)this._head=void 0,this._tail=void 0;else if(e===this._head){if(!e.next)throw new Error("Invalid list");e.next.previous=void 0,this._head=e.next}else if(e===this._tail){if(!e.previous)throw new Error("Invalid list");e.previous.next=void 0,this._tail=e.previous}else{const t=e.next,i=e.previous;if(!t||!i)throw new Error("Invalid list");t.previous=i,i.next=t}e.next=void 0,e.previous=void 0,this._state++}touch(e,t){if(!this._head||!this._tail)throw new Error("Invalid list");if(1===t||2===t)if(1===t){if(e===this._head)return;const t=e.next,i=e.previous;e===this._tail?(i.next=void 0,this._tail=i):(t.previous=i,i.next=t),e.previous=void 0,e.next=this._head,this._head.previous=e,this._head=e,this._state++}else if(2===t){if(e===this._tail)return;const t=e.next,i=e.previous;e===this._head?(t.previous=void 0,this._head=t):(t.previous=i,i.next=t),e.next=void 0,e.previous=this._tail,this._tail.next=e,this._tail=e,this._state++}}toJSON(){const e=[];return this.forEach((t,i)=>{e.push([i,t])}),e}fromJSON(e){this.clear();for(const[t,i]of e)this.set(t,i)}}class ka extends xa{constructor(e,t=1){super(),this._limit=e,this._ratio=Math.min(Math.max(0,t),1)}get limit(){return this._limit}set limit(e){this._limit=e,this.checkTrim()}get(e,t=2){return super.get(e,t)}peek(e){return super.get(e,0)}set(e,t){return super.set(e,t,2),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}}function Na(e,t,i){return Math.min(Math.max(e,t),i)}class Ia{constructor(){this._n=1,this._val=0}update(e){return this._val=this._val+(e-this._val)/this._n,this._n+=1,this}get value(){return this._val}}const Ta=Object.freeze((function(e,t){const i=setTimeout(e.bind(t),0);return{dispose(){clearTimeout(i)}}}));var Aa;!function(e){e.isCancellationToken=function t(i){return i===e.None||i===e.Cancelled||i instanceof Ma||!(!i||"object"!=typeof i)&&"boolean"==typeof i.isCancellationRequested&&"function"==typeof i.onCancellationRequested},e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:ie.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:Ta})}(Aa||(Aa={}));class Ma{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Ta:(this._emitter||(this._emitter=new oe),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class Oa{constructor(e){this._token=void 0,this._parentListener=void 0,this._parentListener=e&&e.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new Ma),this._token}cancel(){this._token?this._token instanceof Ma&&this._token.cancel():this._token=Aa.Cancelled}dispose(e=!1){e&&this.cancel(),this._parentListener&&this._parentListener.dispose(),this._token?this._token instanceof Ma&&this._token.dispose():this._token=Aa.None}}var Ra=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function Pa(e){const t=new Oa,i=e(t.token),n=new Promise((e,n)=>{t.token.onCancellationRequested(()=>{n(l())}),Promise.resolve(i).then(i=>{t.dispose(),e(i)},e=>{t.dispose(),n(e)})});return new class{cancel(){t.cancel()}then(e,t){return n.then(e,t)}catch(e){return this.then(void 0,e)}finally(e){return n.finally(e)}}}function Fa(e,t,i){return Promise.race([e,new Promise(e=>t.onCancellationRequested(()=>e(i)))])}class Ba{constructor(){this.activePromise=null,this.queuedPromise=null,this.queuedPromiseFactory=null}queue(e){if(this.activePromise){if(this.queuedPromiseFactory=e,!this.queuedPromise){const e=()=>{this.queuedPromise=null;const e=this.queue(this.queuedPromiseFactory);return this.queuedPromiseFactory=null,e};this.queuedPromise=new Promise(t=>{this.activePromise.then(e,e).then(t)})}return new Promise((e,t)=>{this.queuedPromise.then(e,t)})}return this.activePromise=e(),new Promise((e,t)=>{this.activePromise.then(t=>{this.activePromise=null,e(t)},e=>{this.activePromise=null,t(e)})})}}class Wa{constructor(e){this.defaultDelay=e,this.timeout=null,this.completionPromise=null,this.doResolve=null,this.doReject=null,this.task=null}trigger(e,t=this.defaultDelay){return this.task=e,this.cancelTimeout(),this.completionPromise||(this.completionPromise=new Promise((e,t)=>{this.doResolve=e,this.doReject=t}).then(()=>{if(this.completionPromise=null,this.doResolve=null,this.task){const e=this.task;return this.task=null,e()}})),this.timeout=setTimeout(()=>{this.timeout=null,this.doResolve&&this.doResolve(null)},t),this.completionPromise}isTriggered(){return null!==this.timeout}cancel(){this.cancelTimeout(),this.completionPromise&&(this.doReject&&this.doReject(l()),this.completionPromise=null)}cancelTimeout(){null!==this.timeout&&(clearTimeout(this.timeout),this.timeout=null)}dispose(){this.cancelTimeout()}}class Va{constructor(e){this.delayer=new Wa(e),this.throttler=new Ba}trigger(e,t){return this.delayer.trigger(()=>this.throttler.queue(e),t)}cancel(){this.delayer.cancel()}dispose(){this.delayer.dispose()}}function za(e,t){return t?new Promise((i,n)=>{const o=setTimeout(i,e);t.onCancellationRequested(()=>{clearTimeout(o),n(l())})}):Pa(t=>za(e,t))}function Ha(e,t=0){const i=setTimeout(e,t);return b(()=>clearTimeout(i))}class Ua{constructor(e,t){this._token=-1,"function"==typeof e&&"number"==typeof t&&this.setIfNotSet(e,t)}dispose(){this.cancel()}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){this.cancel(),this._token=setTimeout(()=>{this._token=-1,e()},t)}setIfNotSet(e,t){-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,e()},t))}}class Ka{constructor(){this._token=-1}dispose(){this.cancel()}cancel(){-1!==this._token&&(clearInterval(this._token),this._token=-1)}cancelAndSet(e,t){this.cancel(),this._token=setInterval(()=>{e()},t)}}class $a{constructor(e,t){this.timeoutToken=-1,this.runner=e,this.timeout=t,this.timeoutHandler=this.onTimeout.bind(this)}dispose(){this.cancel(),this.runner=null}cancel(){this.isScheduled()&&(clearTimeout(this.timeoutToken),this.timeoutToken=-1)}schedule(e=this.timeout){this.cancel(),this.timeoutToken=setTimeout(this.timeoutHandler,e)}get delay(){return this.timeout}set delay(e){this.timeout=e}isScheduled(){return-1!==this.timeoutToken}onTimeout(){this.timeoutToken=-1,this.runner&&this.doRun()}doRun(){this.runner&&this.runner()}}let ja;!function(){if("function"!=typeof requestIdleCallback||"function"!=typeof cancelIdleCallback){const e=Object.freeze({didTimeout:!0,timeRemaining:()=>15});ja=t=>{const i=setTimeout(()=>t(e));let n=!1;return{dispose(){n||(n=!0,clearTimeout(i))}}}}else ja=(e,t)=>{const i=requestIdleCallback(e,"number"==typeof t?{timeout:t}:void 0);let n=!1;return{dispose(){n||(n=!0,cancelIdleCallback(i))}}}}();class qa{constructor(e){this._didRun=!1,this._executor=()=>{try{this._value=e()}catch(e){this._error=e}finally{this._didRun=!0}},this._handle=ja(()=>this._executor())}dispose(){this._handle.dispose()}get value(){if(this._didRun||(this._handle.dispose(),this._executor()),this._error)throw this._error;return this._value}}var Ga;!function(e){e.allSettled=function t(e){return Ra(this,void 0,void 0,(function*(){return"function"==typeof Promise.allSettled?function t(e){return Ra(this,void 0,void 0,(function*(){return Promise.allSettled(e)}))}(e):function i(e){return Ra(this,void 0,void 0,(function*(){return Promise.all(e.map(e=>e.then(e=>({status:"fulfilled",value:e}),e=>({status:"rejected",reason:e}))))}))}(e)}))},e.settled=function i(e){return Ra(this,void 0,void 0,(function*(){let t=void 0;const i=yield Promise.all(e.map(e=>e.then(e=>e,e=>{t||(t=e)})));if(void 0!==t)throw t;return i}))}}(Ga||(Ga={}));const Ya="**",Za="/",Xa="[/\\\\]",Qa="[^/\\\\]",Ja=/\//g;function el(e){switch(e){case 0:return"";case 1:return`${Qa}*?`;default:return`(?:${Xa}|${Qa}+${Xa}|${Xa}${Qa}+)*?`}}function tl(e,t){if(!e)return[];const i=[];let n=!1,o=!1,s="";for(const r of e){switch(r){case t:if(!n&&!o){i.push(s),s="";continue}break;case"{":n=!0;break;case"}":n=!1;break;case"[":o=!0;break;case"]":o=!1}s+=r}return s&&i.push(s),i}const il=/^\*\*\/\*\.[\w\.-]+$/,nl=/^\*\*\/([\w\.-]+)\/?$/,ol=/^{\*\*\/[\*\.]?[\w\.-]+\/?(,\*\*\/[\*\.]?[\w\.-]+\/?)*}$/,sl=/^{\*\*\/[\*\.]?[\w\.-]+(\/(\*\*)?)?(,\*\*\/[\*\.]?[\w\.-]+(\/(\*\*)?)?)*}$/,rl=/^\*\*((\/[\w\.-]+)+)\/?$/,al=/^([\w\.-]+(\/[\w\.-]+)*)\/?$/,ll=new ka(1e4),hl=function(){return!1},cl=function(){return null};function dl(e,t){if(!e)return cl;let i;const n=`${i=(i="string"!=typeof e?e.pattern:e).trim()}_${!!t.trimForExclusions}`;let o,s=ll.get(n);if(s)return ul(s,e);if(il.test(i)){const e=i.substr(4);s=function(t,n){return"string"==typeof t&&t.endsWith(e)?i:null}}else s=(o=nl.exec(gl(i,t)))?function r(e,t){const i=`/${e}`,n=`\\${e}`,o=function(o,s){return"string"!=typeof o?null:s?s===e?t:null:o===e||o.endsWith(i)||o.endsWith(n)?t:null},s=[e];return o.basenames=s,o.patterns=[t],o.allBasenames=s,o}(o[1],i):(t.trimForExclusions?sl:ol).test(i)?function a(e,t){const i=fl(e.slice(1,-1).split(",").map(e=>dl(e,t)).filter(e=>e!==cl),e),n=i.length;if(!n)return cl;if(1===n)return i[0];const o=function(t,n){for(let o=0,s=i.length;o!!e.allBasenames);s&&(o.allBasenames=s.allBasenames);const r=i.reduce((e,t)=>t.allPaths?e.concat(t.allPaths):e,[]);return r.length&&(o.allPaths=r),o}(i,t):(o=rl.exec(gl(i,t)))?pl(o[1].substr(1),i,!0):(o=al.exec(gl(i,t)))?pl(o[1],i,!1):function l(e){try{const t=new RegExp(`^${function e(t){if(!t)return"";let i="";const n=tl(t,Za);if(n.every(e=>e===Ya))i=".*";else{let t=!1;n.forEach((o,s)=>{if(o===Ya)return void(t||(i+=el(2),t=!0));let r=!1,a="",l=!1,h="";for(const t of o)if("}"!==t&&r)a+=t;else if(!l||"]"===t&&h)switch(t){case"{":r=!0;continue;case"[":l=!0;continue;case"}":const n=`(?:${tl(a,",").map(t=>e(t)).join("|")})`;i+=n,r=!1,a="";break;case"]":i+="["+h+"]",l=!1,h="";break;case"?":i+=Qa;continue;case"*":i+=el(1);continue;default:i+=$t(t)}else{let e;h+=e="-"===t?t:"^"!==t&&"!"!==t||h?t===Za?"":$t(t):"^"}se.length)return!1;if(i){if(!li(e,t))return!1;if(t.length===e.length)return!0;let i=t.length;return t.charAt(t.length-1)===n&&i--,e.charAt(i)===n}return t.charAt(t.length-1)!==n&&(t+=n),0===e.indexOf(t)}(i,t.base)?e(ot(t.base,i),n):null}}function gl(e,t){return t.trimForExclusions&&e.endsWith("/**")?e.substr(0,e.length-2):e}function pl(e,t,i){const n=lt===tt.sep,o=n?e:e.replace(Ja,lt),s=lt+o,r=tt.sep+e,a=i?function(i,a){return"string"!=typeof i||i!==o&&!i.endsWith(s)&&(n||i!==e&&!i.endsWith(r))?null:t}:function(i,s){return"string"!=typeof i||i!==o&&(n||i!==e)?null:t};return a.allPaths=[(i?"*/":"./")+e],a}function ml(e,t,i){return!(!e||"string"!=typeof t)&&function n(e,t={}){if(!e)return hl;if("string"==typeof e||function i(e){return e&&"string"==typeof e.base&&"string"==typeof e.pattern}(e)){const i=dl(e,t);if(i===cl)return hl;const n=function(e,t){return!!i(e,t)};return i.allBasenames&&(n.allBasenames=i.allBasenames),i.allPaths&&(n.allPaths=i.allPaths),n}return function n(e,t){const i=fl(Object.getOwnPropertyNames(e).map(i=>(function n(e,t,i){if(!1===t)return cl;const n=dl(e,i);if(n===cl)return cl;if("boolean"==typeof t)return n;if(t){const i=t.when;if("string"==typeof i){const t=(t,o,s,r)=>{if(!r||!n(t,o))return null;const a=r(i.replace("$(basename)",s));return function l(e){return!!e&&"function"==typeof e.then}(a)?a.then(t=>t?e:null):a?e:null};return t.requiresSiblings=!0,t}}return n})(i,e[i],t)).filter(e=>e!==cl)),n=i.length;if(!n)return cl;if(!i.some(e=>!!e.requiresSiblings)){if(1===n)return i[0];const e=function(e,t){for(let n=0,o=i.length;n!!e.allBasenames);t&&(e.allBasenames=t.allBasenames);const o=i.reduce((e,t)=>t.allPaths?e.concat(t.allPaths):e,[]);return o.length&&(e.allPaths=o),e}const o=function(e,t,n){let o=void 0;for(let s=0,r=i.length;s!!e.allBasenames);s&&(o.allBasenames=s.allBasenames);const r=i.reduce((e,t)=>t.allPaths?e.concat(t.allPaths):e,[]);return r.length&&(o.allPaths=r),o}(e,t)}(e)(t,void 0,i)}function fl(e,t){const i=e.filter(e=>!!e.basenames);if(i.length<2)return e;const n=i.reduce((e,t)=>{const i=t.basenames;return i?e.concat(i):e},[]);let o;if(t){o=[];for(let e=0,i=n.length;e{const i=t.patterns;return i?e.concat(i):e},[]);const s=function(e,t){if("string"!=typeof e)return null;if(!t){let i;for(i=e.length;i>0;i--){const t=e.charCodeAt(i-1);if(47===t||92===t)break}t=e.substr(i)}const i=n.indexOf(t);return-1!==i?o[i]:null};s.basenames=n,s.patterns=o,s.allBasenames=n;const r=e.filter(e=>!e.basenames);return r.push(s),r}function _l(e,t,i,n){if(Array.isArray(e)){let o=0;for(const s of e){const e=_l(s,t,i,n);if(10===e)return e;e>o&&(o=e)}return o}if("string"==typeof e)return n?"*"===e?5:e===i?10:0:0;if(e){const{language:o,pattern:s,scheme:r,hasAccessToAllModels:a}=e;if(!n&&!a)return 0;let l=0;if(r)if(r===t.scheme)l=10;else{if("*"!==r)return 0;l=5}if(o)if(o===i)l=10;else{if("*"!==o)return 0;l=Math.max(l,5)}if(s){let e;if((e="string"==typeof s?s:Object.assign(Object.assign({},s),{base:it(s.base)}))!==t.fsPath&&!ml(e,t.fsPath))return 0;l=10}return l}return 0}function bl(e){return"string"!=typeof e&&(Array.isArray(e)?e.every(bl):!!e.exclusive)}class vl{constructor(){this._clock=0,this._entries=[],this._onDidChange=new oe}get onDidChange(){return this._onDidChange.event}register(e,t){let i={selector:e,provider:t,_score:-1,_time:this._clock++};return this._entries.push(i),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),b(()=>{if(i){let e=this._entries.indexOf(i);e>=0&&(this._entries.splice(e,1),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),i=void 0)}})}has(e){return this.all(e).length>0}all(e){if(!e)return[];this._updateScores(e);const t=[];for(let e of this._entries)e._score>0&&t.push(e.provider);return t}ordered(e){const t=[];return this._orderedForEach(e,e=>t.push(e.provider)),t}orderedGroups(e){const t=[];let i,n;return this._orderedForEach(e,e=>{i&&n===e._score?i.push(e.provider):(n=e._score,t.push(i=[e.provider]))}),t}_orderedForEach(e,t){if(e){this._updateScores(e);for(const e of this._entries)e._score>0&&t(e)}}_updateScores(e){let t={uri:e.uri.toString(),language:e.getLanguageIdentifier().language};if(!this._lastCandidate||this._lastCandidate.language!==t.language||this._lastCandidate.uri!==t.uri){this._lastCandidate=t;for(let t of this._entries)if(t._score=_l(t.selector,e.uri,e.getLanguageIdentifier().language,Mt(e)),bl(t.selector)&&t._score>0){for(let e of this._entries)e._score=0;t._score=1e3;break}this._entries.sort(vl._compareByScoreAndTime)}}static _compareByScoreAndTime(e,t){return e._scoret._score?-1:e._timet._time?-1:0}}class Cl{constructor(e,t,i=Number.MAX_SAFE_INTEGER){this._registry=e,this.min=t,this.max=i,this._cache=new ka(50,.7)}_key(e){return e.id+ga(this._registry.all(e))}_clamp(e){return void 0===e?this.min:Math.min(this.max,Math.max(this.min,Math.floor(1.3*e)))}get(e){const t=this._key(e),i=this._cache.get(t);return this._clamp(null==i?void 0:i.value)}update(e,t){const i=this._key(e);let n=this._cache.get(i);return n||(n=new Ia,this._cache.set(i,n)),n.update(t),this.get(e)}}class wl{constructor(e,t){this.language=e,this.id=t}}class yl{static getLanguageId(e){return(255&e)>>>0}static getTokenType(e){return(1792&e)>>>8}static getFontStyle(e){return(14336&e)>>>11}static getForeground(e){return(8372224&e)>>>14}static getBackground(e){return(4286578688&e)>>>23}static getClassNameFromMetadata(e){let t=this.getForeground(e),i="mtk_"+this.getLanguageId(e)+"_"+t,n=this.getFontStyle(e);return 1&n&&(i+=" mtki"),2&n&&(i+=" mtkb"),4&n&&(i+=" mtku"),i}static getInlineStyleFromMetadata(e,t){const i=this.getForeground(e),n=this.getFontStyle(e);let o=`color: ${t[i]};`;return 1&n&&(o+="font-style: italic;"),2&n&&(o+="font-weight: bold;"),4&n&&(o+="text-decoration: underline;"),o}}var Sl;!function(e){e[e.Mouse=1]="Mouse",e[e.Action=2]="Action"}(Sl||(Sl={}));const Ll=function(){let e=Object.create(null);return e[0]="symbol-method",e[1]="symbol-function",e[2]="symbol-constructor",e[3]="symbol-field",e[4]="symbol-variable",e[5]="symbol-class",e[6]="symbol-struct",e[7]="symbol-interface",e[8]="symbol-module",e[9]="symbol-property",e[10]="symbol-event",e[11]="symbol-operator",e[12]="symbol-unit",e[13]="symbol-value",e[14]="symbol-constant",e[15]="symbol-enum",e[16]="symbol-enum-member",e[17]="symbol-keyword",e[27]="symbol-snippet",e[18]="symbol-text",e[19]="symbol-color",e[20]="symbol-file",e[21]="symbol-reference",e[22]="symbol-customcolor",e[23]="symbol-folder",e[24]="symbol-type-parameter",e[25]="account",e[26]="issues",function(t){const i=e[t];let n=i&&cn.get(i);return n||(console.info("No codicon found for CompletionItemKind "+t),n=un.symbolProperty),n.classNames}}();let Dl=function(){let e=Object.create(null);return e.method=0,e.function=1,e.constructor=2,e.field=3,e.variable=4,e.class=5,e.struct=6,e.interface=7,e.module=8,e.property=9,e.event=10,e.operator=11,e.unit=12,e.value=13,e.constant=14,e.enum=15,e["enum-member"]=16,e.enumMember=16,e.keyword=17,e.snippet=27,e.text=18,e.color=19,e.file=20,e.reference=21,e.customcolor=22,e.folder=23,e["type-parameter"]=24,e.typeParameter=24,e.account=25,e.issue=26,function(t,i){let n=e[t];return void 0!==n||i||(n=9),n}}();var El,xl,kl,Nl;!function(e){e[e.Invoke=1]="Invoke",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.ContentChange=3]="ContentChange"}(El||(El={})),function(e){e[e.Text=0]="Text",e[e.Read=1]="Read",e[e.Write=2]="Write"}(xl||(xl={})),function(e){const t=new Map;t.set("file",0),t.set("module",1),t.set("namespace",2),t.set("package",3),t.set("class",4),t.set("method",5),t.set("property",6),t.set("field",7),t.set("constructor",8),t.set("enum",9),t.set("interface",10),t.set("function",11),t.set("variable",12),t.set("constant",13),t.set("string",14),t.set("number",15),t.set("boolean",16),t.set("array",17),t.set("object",18),t.set("key",19),t.set("null",20),t.set("enum-member",21),t.set("struct",22),t.set("event",23),t.set("operator",24),t.set("type-parameter",25);const i=new Map;i.set(0,"file"),i.set(1,"module"),i.set(2,"namespace"),i.set(3,"package"),i.set(4,"class"),i.set(5,"method"),i.set(6,"property"),i.set(7,"field"),i.set(8,"constructor"),i.set(9,"enum"),i.set(10,"interface"),i.set(11,"function"),i.set(12,"variable"),i.set(13,"constant"),i.set(14,"string"),i.set(15,"number"),i.set(16,"boolean"),i.set(17,"array"),i.set(18,"object"),i.set(19,"key"),i.set(20,"null"),i.set(21,"enum-member"),i.set(22,"struct"),i.set(23,"event"),i.set(24,"operator"),i.set(25,"type-parameter"),e.fromString=function n(e){return t.get(e)},e.toString=function o(e){return i.get(e)},e.toCssClassName=function s(e,t){const n=i.get(e);let o=n&&cn.get("symbol-"+n);return o||(console.info("No codicon found for SymbolKind "+e),o=un.symbolProperty),`${t?"inline":"block"} ${o.classNames}`}}(kl||(kl={}));class Il{constructor(e){this.value=e}}Il.Comment=new Il("comment"),Il.Imports=new Il("imports"),Il.Region=new Il("region"),function(e){e[e.Other=0]="Other",e[e.Type=1]="Type",e[e.Parameter=2]="Parameter"}(Nl||(Nl={}));const Tl=new vl,Al=new vl,Ml=new vl,Ol=new vl,Rl=new vl,Pl=new vl,Fl=new vl,Bl=new vl,Wl=new vl,Vl=new vl,zl=new vl,Hl=new vl,Ul=new vl,Kl=new vl,$l=new vl,jl=new vl,ql=new vl,Gl=new vl,Yl=new vl,Zl=new vl,Xl=new vl,Ql=new vl,Jl=new vl,eh=new vl,th=new class{constructor(){this._map=new Map,this._promises=new Map,this._onDidChange=new oe,this.onDidChange=this._onDidChange.event,this._colorMap=null}fire(e){this._onDidChange.fire({changedLanguages:e,changedColorMap:!1})}register(e,t){return this._map.set(e,t),this.fire([e]),b(()=>{this._map.get(e)===t&&(this._map.delete(e),this.fire([e]))})}registerPromise(e,t){let i=null,n=!1;return this._promises.set(e,t.then(t=>{this._promises.delete(e),!n&&t&&(i=this.register(e,t))})),b(()=>{n=!0,i&&i.dispose()})}getPromise(e){const t=this.get(e);if(t)return Promise.resolve(t);const i=this._promises.get(e);return i?i.then(t=>this.get(e)):null}get(e){return this._map.get(e)||null}setColorMap(e){this._colorMap=e,this._onDidChange.fire({changedLanguages:Array.from(this._map.keys()),changedColorMap:!0})}getColorMap(){return this._colorMap}getDefaultBackground(){return this._colorMap&&this._colorMap.length>2?this._colorMap[2]:null}};class ih{constructor(e,t){this._tokens=e,this._tokensCount=this._tokens.length>>>1,this._text=t}equals(e){return e instanceof ih&&this.slicedEquals(e,0,this._tokensCount)}slicedEquals(e,t,i){if(this._text!==e._text)return!1;if(this._tokensCount!==e._tokensCount)return!1;const n=t<<1,o=n+(i<<1);for(let t=n;t0?this._tokens[e-1<<1]:0}getMetadata(e){return this._tokens[1+(e<<1)]}getLanguageId(e){return yl.getLanguageId(this._tokens[1+(e<<1)])}getStandardTokenType(e){return yl.getTokenType(this._tokens[1+(e<<1)])}getForeground(e){return yl.getForeground(this._tokens[1+(e<<1)])}getClassName(e){return yl.getClassNameFromMetadata(this._tokens[1+(e<<1)])}getInlineStyle(e,t){return yl.getInlineStyleFromMetadata(this._tokens[1+(e<<1)],t)}getEndOffset(e){return this._tokens[e<<1]}findTokenIndexAtOffset(e){return ih.findIndexInTokensArray(this._tokens,e)}inflate(){return this}sliceAndInflate(e,t,i){return new nh(this,e,t,i)}static convertToEndOffset(e,t){const i=(e.length>>>1)-1;for(let t=0;t>>1)-1;for(;it&&(n=o)}return i}}class nh{constructor(e,t,i,n){this._source=e,this._startOffset=t,this._endOffset=i,this._deltaOffset=n,this._firstTokenIndex=e.findTokenIndexAtOffset(t),this._tokensCount=0;for(let t=this._firstTokenIndex,n=e.getCount();t=i);t++)this._tokensCount++}equals(e){return e instanceof nh&&this._startOffset===e._startOffset&&this._endOffset===e._endOffset&&this._deltaOffset===e._deltaOffset&&this._source.slicedEquals(e._source,this._firstTokenIndex,this._tokensCount)}getCount(){return this._tokensCount}getForeground(e){return this._source.getForeground(this._firstTokenIndex+e)}getEndOffset(e){const t=this._source.getEndOffset(this._firstTokenIndex+e);return Math.min(this._endOffset,t)-this._startOffset+this._deltaOffset}getClassName(e){return this._source.getClassName(this._firstTokenIndex+e)}getInlineStyle(e,t){return this._source.getInlineStyle(this._firstTokenIndex+e,t)}findTokenIndexAtOffset(e){return this._source.findTokenIndexAtOffset(e+this._startOffset-this._deltaOffset)-this._firstTokenIndex}}function oh(e){let t=0,i=0,n=0,o=0;for(let s=0,r=e.length;s>>0}const rh=new Uint32Array(0).buffer;class ah{constructor(){this.tokens=[]}add(e,t){if(this.tokens.length>0){const i=this.tokens[this.tokens.length-1];if(i.startLineNumber+i.tokens.length-1+1===e)return void i.tokens.push(t)}this.tokens.push(new dh(e,[t]))}}class lh{constructor(e){this._tokens=e,this._tokenCount=e.length/4}toString(e){let t=[];for(let i=0;ie)){let o=n;for(;o>t&&this._getDeltaLine(o-1)===e;)o--;let s=n;for(;se||c===e&&u>=t)&&(ce||d===e&&g>=t){if(do?p-=o-i:p=i;else if(u===t&&g===i){if(!(u===n&&p>o)){h=!0;continue}p-=o-i}else if(uo)){h=!0;continue}p=u===t?(g=i)+(p-o):(g=0)+(p-o)}else if(u>n){if(0===a&&!h){l=r;break}u-=a}else{if(!(u===n&&g>=o))throw new Error("Not possible!");e&&0===u&&(g+=e,p+=e),u-=a,g-=o-i,p-=o-i}const f=4*l;s[f]=u,s[f+1]=g,s[f+2]=p,s[f+3]=m,l++}this._tokenCount=l}acceptInsertText(e,t,i,n,o,s){const r=0===i&&1===n&&(s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122),a=this._tokens,l=this._tokenCount;for(let s=0;s0?t.charCodeAt(0):0)}acceptEdit(e,t,i,n,o){this._acceptDeleteRange(e),this._acceptInsertText(new Tt(e.startLineNumber,e.startColumn),t,i,n,o),this._updateEndLineNumber()}_acceptDeleteRange(e){if(e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn)return;const t=e.startLineNumber-this.startLineNumber,i=e.endLineNumber-this.startLineNumber;if(i<0)return void(this.startLineNumber-=i-t);const n=this.tokens.getMaxDeltaLine();if(!(t>=n+1)){if(t<0&&i>=n+1)return this.startLineNumber=0,void this.tokens.clear();t<0?(this.startLineNumber-=-t,this.tokens.acceptDeleteRange(e.startColumn-1,0,0,i,e.endColumn-1)):this.tokens.acceptDeleteRange(0,t,e.startColumn-1,i,e.endColumn-1)}}_acceptInsertText(e,t,i,n,o){if(0===t&&0===i)return;const s=e.lineNumber-this.startLineNumber;s<0?this.startLineNumber+=t:s>=this.tokens.getMaxDeltaLine()+1||this.tokens.acceptInsertText(s,e.column-1,t,i,n,o)}}class dh{constructor(e,t){this.startLineNumber=e,this.tokens=t}}function uh(e){return e instanceof Uint32Array?e:new Uint32Array(e)}class gh{constructor(){this._pieces=[],this._isComplete=!1}flush(){this._pieces=[],this._isComplete=!1}isEmpty(){return 0===this._pieces.length}set(e,t){this._pieces=e||[],this._isComplete=t}setPartial(e,t){let i=e;if(t.length>0){const n=t[0].getRange(),o=t[t.length-1].getRange();if(!n||!o)return e;i=e.plusRange(n).plusRange(o)}let n=null;for(let e=0,t=this._pieces.length;ei.endLineNumber){n=n||{index:e};break}if(o.removeTokens(i),o.isEmpty()){this._pieces.splice(e,1),e--,t--;continue}if(o.endLineNumberi.endLineNumber){n=n||{index:e};continue}const[s,r]=o.split(i);s.isEmpty()?n=n||{index:e}:r.isEmpty()||(this._pieces.splice(e,1,s,r),e++,t++,n=n||{index:e})}return n=n||{index:this._pieces.length},t.length>0&&(this._pieces=ha(this._pieces,n.index,t)),i}isComplete(){return this._isComplete}addSemanticTokens(e,t){const i=this._pieces;if(0===i.length)return t;const n=i[gh._findFirstPieceWithLine(i,e)].getLineTokens(e);if(!n)return t;const o=t.getCount(),s=n.getCount();let r=0,a=[],l=0,h=0;const c=(e,t)=>{e!==h&&(h=e,a[l++]=e,a[l++]=t)};for(let e=0;e>>0,h=~l>>>0;for(;rt)){for(;o>i&&e[o-1].startLineNumber<=t&&t<=e[o-1].endLineNumber;)o--;return o}n=o-1}}return i}acceptEdit(e,t,i,n,o){for(const s of this._pieces)s.acceptEdit(e,t,i,n,o)}}class ph{constructor(){this._lineTokens=[],this._len=0}flush(){this._lineTokens=[],this._len=0}getTokens(e,t,i){let n=null;if(t1&&(t=yl.getLanguageId(n[1])!==e),!t)return rh}if(!n||0===n.length){const i=new Uint32Array(2);return i[0]=t,i[1]=sh(e),i.buffer}return n[n.length-2]=t,0===n.byteOffset&&n.byteLength===n.buffer.byteLength?n.buffer:n}_ensureLine(e){for(;e>=this._len;)this._lineTokens[this._len]=null,this._len++}_deleteLines(e,t){0!==t&&(e+t>this._len&&(t=this._len-e),this._lineTokens.splice(e,t),this._len-=t)}_insertLines(e,t){if(0===t)return;let i=[];for(let e=0;e=this._len)return;if(e.startLineNumber===e.endLineNumber){if(e.startColumn===e.endColumn)return;return void(this._lineTokens[t]=ph._delete(this._lineTokens[t],e.startColumn-1,e.endColumn-1))}this._lineTokens[t]=ph._deleteEnding(this._lineTokens[t],e.startColumn-1);const i=e.endLineNumber-1;let n=null;i=this._len||(0!==t?(this._lineTokens[n]=ph._deleteEnding(this._lineTokens[n],e.column-1),this._lineTokens[n]=ph._insert(this._lineTokens[n],e.column-1,i),this._insertLines(e.lineNumber,t)):this._lineTokens[n]=ph._insert(this._lineTokens[n],e.column-1,i))}static _deleteBeginning(e,t){return null===e||e===rh?e:ph._delete(e,0,t)}static _deleteEnding(e,t){if(null===e||e===rh)return e;const i=uh(e);return ph._delete(e,t,i[i.length-2])}static _delete(e,t,i){if(null===e||e===rh||t===i)return e;const n=uh(e),o=n.length>>>1;if(0===t&&n[n.length-2]===i)return rh;const s=ih.findIndexInTokensArray(n,t),r=s>0?n[s-1<<1]:0;if(il&&(n[a++]=t,n[a++]=n[1+(e<<1)],l=t)}if(a===n.length)return e;let c=new Uint32Array(a);return c.set(n.subarray(0,a),0),c.buffer}static _append(e,t){if(t===rh)return e;if(e===rh)return t;if(null===e)return e;if(null===t)return null;const i=uh(e),n=uh(t),o=n.length>>>1;let s=new Uint32Array(i.length+n.length);s.set(i,0);let r=i.length;const a=i[i.length-2];for(let e=0;e>>1;let s=ih.findIndexInTokensArray(n,t);s>0&&n[s-1<<1]===t&&s--;for(let e=s;ee.sortIndex-t.sortIndex)}this._mightContainRTL=n,this._mightContainUnusualLineTerminators=o,this._mightContainNonBasicASCII=s;const u=this._doApplyEdits(a);let g=null;if(t&&c.length>0){c.sort((e,t)=>t.lineNumber-e.lineNumber),g=[];for(let e=0,t=c.length;e0&&c[e-1].lineNumber===t)continue;let i=c[e].oldContent,n=this.getLineContent(t);0!==n.length&&n!==i&&-1===Zt(n)&&g.push(t)}}return this._onDidChangeContent.fire(),new Zo(d,u,g)}_reduceOperations(e){return e.length<1e3?e:[this._toSingleEditOperation(e)]}_toSingleEditOperation(e){let t=!1;const i=e[0].range,n=e[e.length-1].range,o=new ro(i.startLineNumber,i.startColumn,n.endLineNumber,n.endColumn);let s=i.startLineNumber,r=i.startColumn;const a=[];for(let i=0,n=e.length;i0&&a.push(n.text),s=o.endLineNumber,r=o.endColumn}const l=a.join(""),[h,c,d]=oh(l);return{sortIndex:0,identifier:e[0].identifier,range:o,rangeOffset:this.getOffsetAt(o.startLineNumber,o.startColumn),rangeLength:this.getValueLengthInRange(o,0),text:l,eolCount:h,firstLineLength:c,lastLineLength:d,forceMoveMarkers:t,isAutoWhitespaceEdit:!1}}_doApplyEdits(e){e.sort(mh._sortOpsDescending);let t=[];for(let i=0;i0){const e=h.eolCount+1;l=1===e?new ro(r,a,r,a+h.firstLineLength):new ro(r,a,r+e-1,h.lastLineLength+1)}else l=new ro(r,a,r,a);i=l.endLineNumber,n=l.endColumn,t.push(l),o=h}return t}static _sortOpsAscending(e,t){let i=ro.compareRangesUsingEnds(e.range,t.range);return 0===i?e.sortIndex-t.sortIndex:i}static _sortOpsDescending(e,t){let i=ro.compareRangesUsingEnds(e.range,t.range);return 0===i?t.sortIndex-e.sortIndex:-i}}class fh{constructor(e,t,i,n,o,s,r,a,l){this._chunks=e,this._bom=t,this._cr=i,this._lf=n,this._crlf=o,this._containsRTL=s,this._containsUnusualLineTerminators=r,this._isBasicASCII=a,this._normalizeEOL=l}_getEOL(e){const t=this._cr+this._lf+this._crlf;return 0===t?1===e?"\n":"\r\n":this._cr+this._crlf>t/2?"\r\n":"\n"}create(e){const t=this._getEOL(e);let i=this._chunks;if(this._normalizeEOL&&("\r\n"===t&&(this._cr>0||this._lf>0)||"\n"===t&&(this._cr>0||this._crlf>0)))for(let e=0,n=i.length;e=55296&&t<=56319?(this._acceptChunk1(e.substr(0,e.length-1),!1),this._hasPreviousChar=!0,this._previousChar=t):(this._acceptChunk1(e,!1),this._hasPreviousChar=!1,this._previousChar=t)}_acceptChunk1(e,t){(t||0!==e.length)&&this._acceptChunk2(this._hasPreviousChar?String.fromCharCode(this._previousChar)+e:e)}_acceptChunk2(e){const t=function i(e,t){e.length=0,e[0]=0;let i=1,n=0,o=0,s=0,r=!0;for(let a=0,l=t.length;a126)&&(r=!1)}const a=new Hr(zr(e),n,o,s,r);return e.length=0,a}(this._tmpLineStarts,e);this.chunks.push(new $r(e,t.lineStarts)),this.cr+=t.cr,this.lf+=t.lf,this.crlf+=t.crlf,this.isBasicASCII&&(this.isBasicASCII=t.isBasicASCII),this.isBasicASCII||this.containsRTL||(this.containsRTL=bi(e)),this.isBasicASCII||this.containsUnusualLineTerminators||(this.containsUnusualLineTerminators=Si(e))}finish(e=!0){return this._finish(),new fh(this.chunks,this.BOM,this.cr,this.lf,this.crlf,this.containsRTL,this.containsUnusualLineTerminators,this.isBasicASCII,e)}_finish(){if(0===this.chunks.length&&this._acceptChunk1("",!0),this._hasPreviousChar){this._hasPreviousChar=!1;let e=this.chunks[this.chunks.length-1];e.buffer+=String.fromCharCode(this._previousChar);let t=Ur(e.buffer);e.lineStarts=t,13===this._previousChar&&this.cr++}}}class bh{constructor(){this.changeType=1}}class vh{constructor(e,t){this.changeType=2,this.lineNumber=e,this.detail=t}}class Ch{constructor(e,t){this.changeType=3,this.fromLineNumber=e,this.toLineNumber=t}}class wh{constructor(e,t,i){this.changeType=4,this.fromLineNumber=e,this.toLineNumber=t,this.detail=i}}class yh{constructor(){this.changeType=5}}class Sh{constructor(e,t,i,n){this.changes=e,this.versionId=t,this.isUndoing=i,this.isRedoing=n,this.resultingSelection=null}containsEvent(e){for(let t=0,i=this.changes.length;t>>0,new xh(o,null===i?kh:i)}class Mh{constructor(){this._beginState=[],this._valid=[],this._len=0,this._invalidLineStartIndex=0}_reset(e){this._beginState=[],this._valid=[],this._len=0,this._invalidLineStartIndex=0,e&&this._setBeginState(0,e)}flush(e){this._reset(e)}get invalidLineStartIndex(){return this._invalidLineStartIndex}_invalidateLine(e){e=this._len;)this._beginState[this._len]=null,this._valid[this._len]=!1,this._len++}_deleteLines(e,t){0!==t&&(e+t>this._len&&(t=this._len-e),this._beginState.splice(e,t),this._valid.splice(e,t),this._len-=t)}_insertLines(e,t){if(0===t)return;let i=[],n=[];for(let e=0;e=0;i--)this._invalidateLine(e.startLineNumber+i-1);this._acceptDeleteRange(e),this._acceptInsertText(new Tt(e.startLineNumber,e.startColumn),t)}_acceptDeleteRange(e){e.startLineNumber-1>=this._len||this._deleteLines(e.startLineNumber,e.endLineNumber-e.startLineNumber)}_acceptInsertText(e,t){e.lineNumber-1>=this._len||this._insertLines(e.lineNumber,t)}}class Oh extends C{constructor(e){super(),this._isDisposed=!1,this._textModel=e,this._tokenizationStateStore=new Mh,this._tokenizationSupport=null,this._register(th.onDidChange(e=>{const t=this._textModel.getLanguageIdentifier();-1!==e.changedLanguages.indexOf(t.language)&&(this._resetTokenizationState(),this._textModel.clearTokens())})),this._register(this._textModel.onDidChangeRawContentFast(e=>{e.containsEvent(1)&&this._resetTokenizationState()})),this._register(this._textModel.onDidChangeContentFast(e=>{for(let t=0,i=e.changes.length;t{this._beginBackgroundTokenization()})),this._register(this._textModel.onDidChangeLanguage(()=>{this._resetTokenizationState(),this._textModel.clearTokens()})),this._resetTokenizationState()}dispose(){this._isDisposed=!0,super.dispose()}_resetTokenizationState(){const[e,t]=function i(e){const t=e.getLanguageIdentifier();let i=e.isTooLargeForTokenization()?null:th.get(t.language),o=null;if(i)try{o=i.getInitialState()}catch(e){n(e),i=null}return[i,o]}(this._textModel);this._tokenizationSupport=e,this._tokenizationStateStore.flush(t),this._beginBackgroundTokenization()}_beginBackgroundTokenization(){this._textModel.isAttachedToEditor()&&this._hasLinesToTokenize()&&Y(()=>{this._isDisposed||this._revalidateTokensNow()})}_revalidateTokensNow(e=this._textModel.getLineCount()){const t=new ah,i=te.create(!1);for(;this._hasLinesToTokenize()&&!(i.elapsed()>1)&&!(this._tokenizeOneInvalidLine(t)>=e););this._beginBackgroundTokenization(),this._textModel.setTokens(t.tokens)}tokenizeViewport(e,t){const i=new ah;this._tokenizeViewport(i,e,t),this._textModel.setTokens(i.tokens)}reset(){this._resetTokenizationState(),this._textModel.clearTokens()}forceTokenization(e){const t=new ah;this._updateTokensUntilLine(t,e),this._textModel.setTokens(t.tokens)}isCheapToTokenize(e){if(!this._tokenizationSupport)return!0;const t=this._tokenizationStateStore.invalidLineStartIndex+1;return!(e>t)&&(e0&&e>=1;e--){let t=this._textModel.getLineFirstNonWhitespaceColumn(e);if(0!==t&&t=0;e--)a=Rh(r,this._tokenizationSupport,o[e],!1,a).endState;for(let n=t;n<=i;n++){let t=this._textModel.getLineContent(n),i=Rh(r,this._tokenizationSupport,t,!0,a);e.add(n,i.tokens),this._tokenizationStateStore.setFakeTokens(n-1),a=i.endState}}}function Rh(e,t,i,o,s){let r=null;if(t)try{r=t.tokenize2(i,o,s.clone(),0)}catch(e){n(e)}return r||(r=Ah(e.id,0,s,0)),ih.convertToEndOffset(r.tokens,i.length),r}var Ph;!function(e){e[e.None=0]="None",e[e.Indent=1]="Indent",e[e.IndentOutdent=2]="IndentOutdent",e[e.Outdent=3]="Outdent"}(Ph||(Ph={}));class Fh{constructor(e){if(this.open=e.open,this.close=e.close,this._standardTokenMask=0,Array.isArray(e.notIn))for(let t=0,i=e.notIn.length;t0&&e.getLanguageId(r-1)===o;)r--;return new zh(e,o,r,s+1,e.getStartOffset(r),e.getEndOffset(s))}class zh{constructor(e,t,i,n,o,s){this._actual=e,this.languageId=t,this._firstTokenIndex=i,this._lastTokenIndex=n,this.firstCharOffset=o,this._lastCharOffset=s}getLineContent(){return this._actual.getLineContent().substring(this.firstCharOffset,this._lastCharOffset)}getActualLineContentBefore(e){return this._actual.getLineContent().substring(0,this.firstCharOffset+e)}getTokenCount(){return this._lastTokenIndex-this._firstTokenIndex}findTokenIndexAtOffset(e){return this._actual.findTokenIndexAtOffset(e+this.firstCharOffset)-this._firstTokenIndex}getStandardTokenType(e){return this._actual.getStandardTokenType(e+this._firstTokenIndex)}}function Hh(e){return 0!=(7&e)}class Uh{constructor(e){if(this._autoClosingPairs=e.autoClosingPairs?e.autoClosingPairs.map(e=>new Fh(e)):e.brackets?e.brackets.map(e=>new Fh({open:e[0],close:e[1]})):[],e.__electricCharacterSupport&&e.__electricCharacterSupport.docComment){const t=e.__electricCharacterSupport.docComment;this._autoClosingPairs.push(new Fh({open:t.open,close:t.close||""}))}this._autoCloseBefore="string"==typeof e.autoCloseBefore?e.autoCloseBefore:Uh.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED,this._surroundingPairs=e.surroundingPairs||this._autoClosingPairs}getAutoClosingPairs(){return this._autoClosingPairs}getAutoCloseBeforeSet(){return this._autoCloseBefore}static shouldAutoClosePair(e,t,i){if(0===t.getTokenCount())return!0;const n=t.findTokenIndexAtOffset(i-2),o=t.getStandardTokenType(n);return e.isOK(o)}getSurroundingPairs(){return this._surroundingPairs}}Uh.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED=";:.,=}])> \n\t";class Kh{constructor(e,t,i,n,o,s){this.languageIdentifier=e,this.index=t,this.open=i,this.close=n,this.forwardRegex=o,this.reversedRegex=s,this._openSet=Kh._toSet(this.open),this._closeSet=Kh._toSet(this.close)}isOpen(e){return this._openSet.has(e)}isClose(e){return this._closeSet.has(e)}static _toSet(e){const t=new Set;for(const i of e)t.add(i);return t}}class $h{constructor(e,t){const i=function n(e){const t=e.length;e=e.map(e=>[e[0].toLowerCase(),e[1].toLowerCase()]);const i=[];for(let e=0;e{const[i,n]=e,[o,s]=t;return i===o||i===s||n===o||n===s},o=(e,n)=>{const o=Math.min(e,n),s=Math.max(e,n);for(let e=0;e0&&s.push({open:o,close:r})}return s}(t);this.brackets=i.map((t,n)=>new Kh(e,n,t.open,t.close,function o(e,t,i,n){let o=[];for(let s=0,r=(o=(o=o.concat(e)).concat(t)).length;s=0&&n.push(t);for(const t of s.close)t.indexOf(e)>=0&&n.push(t)}}function qh(e,t){return e.length-t.length}function Gh(e){if(e.length<=1)return e;const t=[],i=new Set;for(const n of e)i.has(n)||(t.push(n),i.add(n));return t}function Yh(e){const t=/^[\w ]+$/.test(e);return e=$t(e),t?`\\b${e}\\b`:e}function Zh(e){return qt(`(${e.map(Yh).join(")|(")})`,!0)}const Xh=function(){let e=null,t=null;return function i(n){return e!==n&&(t=function o(e){if(hs){const t=new Uint16Array(e.length);let i=0;for(let n=e.length-1;n>=0;n--)t[i++]=e.charCodeAt(n);return ls().decode(t)}{let t=[],i=0;for(let n=e.length-1;n>=0;n--)t[i++]=e.charAt(n);return t.join("")}}(e=n)),t}}();class Qh{static _findPrevBracketInText(e,t,i,n){let o=i.match(e);if(!o)return null;let s=n+(i.length-(o.index||0));return new ro(t,s-o[0].length+1,t,s+1)}static findPrevBracketInRange(e,t,i,n,o){const s=Xh(i).substring(i.length-o,i.length-n);return this._findPrevBracketInText(e,t,s,n)}static findNextBracketInText(e,t,i,n){let o=i.match(e);if(!o)return null;let s=o[0].length;if(0===s)return null;let r=n+(o.index||0);return new ro(t,r+1,t,r+1+s)}static findNextBracketInRange(e,t,i,n,o){const s=i.substring(n,o);return this.findNextBracketInText(e,t,s,n)}}class Jh{constructor(e){this._richEditBrackets=e}getElectricCharacters(){let e=[];if(this._richEditBrackets)for(const t of this._richEditBrackets.brackets)for(const i of t.close){const t=i.charAt(i.length-1);e.push(t)}return e.filter((e,t,i)=>i.indexOf(e)===t)}onElectricCharacter(e,t,i){if(!this._richEditBrackets||0===this._richEditBrackets.brackets.length)return null;const n=t.findTokenIndexAtOffset(i-1);if(Hh(t.getStandardTokenType(n)))return null;const o=this._richEditBrackets.reversedRegex,s=t.getLineContent().substring(0,i-1)+e,r=Qh.findPrevBracketInRange(o,1,s,0,s.length);if(!r)return null;const a=s.substring(r.startColumn-1,r.endColumn-1).toLowerCase();if(this._richEditBrackets.textIsOpenBracket[a])return null;const l=t.getActualLineContentBefore(r.startColumn-1);return/^\s*$/.test(l)?{matchOpenBracket:a}:null}}function ec(e){return e.global&&(e.lastIndex=0),!0}class tc{constructor(e){this._indentationRules=e}shouldIncrease(e){return!!(this._indentationRules&&this._indentationRules.increaseIndentPattern&&ec(this._indentationRules.increaseIndentPattern)&&this._indentationRules.increaseIndentPattern.test(e))}shouldDecrease(e){return!!(this._indentationRules&&this._indentationRules.decreaseIndentPattern&&ec(this._indentationRules.decreaseIndentPattern)&&this._indentationRules.decreaseIndentPattern.test(e))}shouldIndentNextLine(e){return!!(this._indentationRules&&this._indentationRules.indentNextLinePattern&&ec(this._indentationRules.indentNextLinePattern)&&this._indentationRules.indentNextLinePattern.test(e))}shouldIgnore(e){return!!(this._indentationRules&&this._indentationRules.unIndentedLinePattern&&ec(this._indentationRules.unIndentedLinePattern)&&this._indentationRules.unIndentedLinePattern.test(e))}getIndentMetadata(e){let t=0;return this.shouldIncrease(e)&&(t+=1),this.shouldDecrease(e)&&(t+=2),this.shouldIndentNextLine(e)&&(t+=4),this.shouldIgnore(e)&&(t+=8),t}}class ic{constructor(e){(e=e||{}).brackets=e.brackets||[["(",")"],["{","}"],["[","]"]],this._brackets=[],e.brackets.forEach(e=>{const t=ic._createOpenBracketRegExp(e[0]),i=ic._createCloseBracketRegExp(e[1]);t&&i&&this._brackets.push({open:e[0],openRegExp:t,close:e[1],closeRegExp:i})}),this._regExpRules=e.onEnterRules||[]}onEnter(e,t,i,n){if(e>=3)for(let e=0,o=this._regExpRules.length;e!e.reg||e.reg.test(e.text)))return o.action}if(e>=2&&i.length>0&&n.length>0)for(let e=0,t=this._brackets.length;e=2&&i.length>0)for(let e=0,t=this._brackets.length;e{for(let e=0;e{o.dispose(),this._onDidChange.fire(new oc(e))})}_getRichEditSupport(e){const t=this._entries2.get(e);return t?t.getRichEditSupport():null}getIndentationRules(e){const t=this._getRichEditSupport(e);return t&&t.indentationRules||null}_getElectricCharacterSupport(e){let t=this._getRichEditSupport(e);return t&&t.electricCharacter||null}getElectricCharacters(e){let t=this._getElectricCharacterSupport(e);return t?t.getElectricCharacters():[]}onElectricCharacter(e,t,i){let n=Vh(t,i-1),o=this._getElectricCharacterSupport(n.languageId);return o?o.onElectricCharacter(e,n,i-n.firstCharOffset):null}getComments(e){let t=this._getRichEditSupport(e);return t&&t.comments||null}_getCharacterPairSupport(e){let t=this._getRichEditSupport(e);return t&&t.characterPair||null}getAutoClosingPairs(e){const t=this._getCharacterPairSupport(e);return new Bh(t?t.getAutoClosingPairs():[])}getAutoCloseBeforeSet(e){let t=this._getCharacterPairSupport(e);return t?t.getAutoCloseBeforeSet():Uh.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED}getSurroundingPairs(e){let t=this._getCharacterPairSupport(e);return t?t.getSurroundingPairs():[]}shouldAutoClosePair(e,t,i){const n=Vh(t,i-1);return Uh.shouldAutoClosePair(e,n,i-n.firstCharOffset)}getWordDefinition(e){let t=this._getRichEditSupport(e);return co(t&&t.wordDefinition||null)}getFoldingRules(e){let t=this._getRichEditSupport(e);return t?t.foldingRules:{}}getIndentRulesSupport(e){let t=this._getRichEditSupport(e);return t&&t.indentRulesSupport||null}getPrecedingValidLine(e,t,i){let n=e.getLanguageIdAtPosition(t,0);if(t>1){let o,s=-1;for(o=t-1;o>=1;o--){if(e.getLanguageIdAtPosition(o,0)!==n)return s;let t=e.getLineContent(o);if(!i.shouldIgnore(t)&&!/^\s+$/.test(t)&&""!==t)return o;s=o}}return-1}getInheritIndentForLine(e,t,i,n=!0){if(e<4)return null;const o=this.getIndentRulesSupport(t.getLanguageIdentifier().id);if(!o)return null;if(i<=1)return{indentation:"",action:null};const s=this.getPrecedingValidLine(t,i,o);if(s<0)return null;if(s<1)return{indentation:"",action:null};const r=t.getLineContent(s);if(o.shouldIncrease(r)||o.shouldIndentNextLine(r))return{indentation:Xt(r),action:Ph.Indent,line:s};if(o.shouldDecrease(r))return{indentation:Xt(r),action:null,line:s};{if(1===s)return{indentation:Xt(t.getLineContent(s)),action:null,line:s};const e=s-1,i=o.getIndentMetadata(t.getLineContent(e));if(!(3&i)&&4&i){let i=0;for(let n=e-1;n>0;n--)if(!o.shouldIndentNextLine(t.getLineContent(n))){i=n;break}return{indentation:Xt(t.getLineContent(i+1)),action:null,line:i+1}}if(n)return{indentation:Xt(t.getLineContent(s)),action:null,line:s};for(let e=s;e>0;e--){const i=t.getLineContent(e);if(o.shouldIncrease(i))return{indentation:Xt(i),action:Ph.Indent,line:e};if(o.shouldIndentNextLine(i)){let i=0;for(let n=e-1;n>0;n--)if(!o.shouldIndentNextLine(t.getLineContent(e))){i=n;break}return{indentation:Xt(t.getLineContent(i+1)),action:null,line:i+1}}if(o.shouldDecrease(i))return{indentation:Xt(i),action:null,line:e}}return{indentation:Xt(t.getLineContent(1)),action:null,line:1}}}getGoodIndentForLine(e,t,i,n,o){if(e<4)return null;const s=this._getRichEditSupport(i);if(!s)return null;const r=this.getIndentRulesSupport(i);if(!r)return null;const a=this.getInheritIndentForLine(e,t,n),l=t.getLineContent(n);if(a){const i=a.line;if(void 0!==i){const n=s.onEnter(e,"",t.getLineContent(i),"");if(n){let e=Xt(t.getLineContent(i));return n.removeText&&(e=e.substring(0,e.length-n.removeText)),n.indentAction===Ph.Indent||n.indentAction===Ph.IndentOutdent?e=o.shiftIndent(e):n.indentAction===Ph.Outdent&&(e=o.unshiftIndent(e)),r.shouldDecrease(l)&&(e=o.unshiftIndent(e)),n.appendText&&(e+=n.appendText),Xt(e)}}return r.shouldDecrease(l)?a.action===Ph.Indent?a.indentation:o.unshiftIndent(a.indentation):a.action===Ph.Indent?o.shiftIndent(a.indentation):a.indentation}return null}getIndentForEnter(e,t,i,n){if(e<4)return null;t.forceTokenization(i.startLineNumber);const o=t.getLineTokens(i.startLineNumber),s=Vh(o,i.startColumn-1),r=s.getLineContent();let a,l,h=!1;s.firstCharOffset>0&&o.getLanguageId(0)!==s.languageId?(h=!0,a=r.substr(0,i.startColumn-1-s.firstCharOffset)):a=o.getLineContent().substring(0,i.startColumn-1),l=i.isEmpty()?r.substr(i.startColumn-1-s.firstCharOffset):this.getScopedLineTokens(t,i.endLineNumber,i.endColumn).getLineContent().substr(i.endColumn-1-s.firstCharOffset);const c=this.getIndentRulesSupport(s.languageId);if(!c)return null;const d=a,u=Xt(a),g={getLineTokens:e=>t.getLineTokens(e),getLanguageIdentifier:()=>t.getLanguageIdentifier(),getLanguageIdAtPosition:(e,i)=>t.getLanguageIdAtPosition(e,i),getLineContent:e=>e===i.startLineNumber?d:t.getLineContent(e)},p=Xt(o.getLineContent()),m=this.getInheritIndentForLine(e,g,i.startLineNumber+1);if(!m){const e=h?p:u;return{beforeEnter:e,afterEnter:e}}let f=h?p:m.indentation;return m.action===Ph.Indent&&(f=n.shiftIndent(f)),c.shouldDecrease(l)&&(f=n.unshiftIndent(f)),{beforeEnter:h?p:u,afterEnter:f}}getIndentActionForType(e,t,i,n,o){if(e<4)return null;const s=this.getScopedLineTokens(t,i.startLineNumber,i.startColumn);if(s.firstCharOffset)return null;const r=this.getIndentRulesSupport(s.languageId);if(!r)return null;const a=s.getLineContent(),l=a.substr(0,i.startColumn-1-s.firstCharOffset);let h;if(h=i.isEmpty()?a.substr(i.startColumn-1-s.firstCharOffset):this.getScopedLineTokens(t,i.endLineNumber,i.endColumn).getLineContent().substr(i.endColumn-1-s.firstCharOffset),!r.shouldDecrease(l+h)&&r.shouldDecrease(l+n+h)){const n=this.getInheritIndentForLine(e,t,i.startLineNumber,!1);if(!n)return null;let s=n.indentation;return n.action!==Ph.Indent&&(s=o.unshiftIndent(s)),s}return null}getIndentMetadata(e,t){const i=this.getIndentRulesSupport(e.getLanguageIdentifier().id);return i?t<1||t>e.getLineCount()?null:i.getIndentMetadata(e.getLineContent(t)):null}getEnterAction(e,t,i){const n=this.getScopedLineTokens(t,i.startLineNumber,i.startColumn),o=this._getRichEditSupport(n.languageId);if(!o)return null;const s=n.getLineContent(),r=s.substr(0,i.startColumn-1-n.firstCharOffset);let a;a=i.isEmpty()?s.substr(i.startColumn-1-n.firstCharOffset):this.getScopedLineTokens(t,i.endLineNumber,i.endColumn).getLineContent().substr(i.endColumn-1-n.firstCharOffset);let l="";if(i.startLineNumber>1&&0===n.firstCharOffset){const e=this.getScopedLineTokens(t,i.startLineNumber-1);e.languageId===n.languageId&&(l=e.getLineContent())}const h=o.onEnter(e,l,r,a);if(!h)return null;const c=h.indentAction;let d=h.appendText;const u=h.removeText||0;d?c===Ph.Indent&&(d="\t"+d):d=c===Ph.Indent||c===Ph.IndentOutdent?"\t":"";let g=this.getIndentationAtPosition(t,i.startLineNumber,i.startColumn);return u&&(g=g.substring(0,g.length-u)),{indentAction:c,appendText:d,removeText:u,indentation:g}}getIndentationAtPosition(e,t,i){let n=Xt(e.getLineContent(t));return n.length>i-1&&(n=n.substring(0,i-1)),n}getScopedLineTokens(e,t,i){return e.forceTokenization(t),Vh(e.getLineTokens(t),void 0===i?e.getLineMaxColumn(t)-1:i-1)}getBracketsSupport(e){const t=this._getRichEditSupport(e);return t&&t.brackets||null}};function lc(e,t){const i=Math.pow(10,t);return Math.round(e*i)/i}class hc{constructor(e,t,i,n=1){this.r=0|Math.min(255,Math.max(0,e)),this.g=0|Math.min(255,Math.max(0,t)),this.b=0|Math.min(255,Math.max(0,i)),this.a=lc(Math.max(Math.min(1,n),0),3)}static equals(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b&&e.a===t.a}}class cc{constructor(e,t,i,n){this.h=0|Math.max(Math.min(360,e),0),this.s=lc(Math.max(Math.min(1,t),0),3),this.l=lc(Math.max(Math.min(1,i),0),3),this.a=lc(Math.max(Math.min(1,n),0),3)}static equals(e,t){return e.h===t.h&&e.s===t.s&&e.l===t.l&&e.a===t.a}static fromRGBA(e){const t=e.r/255,i=e.g/255,n=e.b/255,o=e.a,s=Math.max(t,i,n),r=Math.min(t,i,n);let a=0,l=0;const h=(r+s)/2,c=s-r;if(c>0){switch(l=Math.min(h<=.5?c/(2*h):c/(2-2*h),1),s){case t:a=(i-n)/c+(i1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}static toRGBA(e){const t=e.h/360,{s:i,l:n,a:o}=e;let s,r,a;if(0===i)s=r=a=n;else{const e=n<.5?n*(1+i):n+i-n*i,o=2*n-e;s=cc._hue2rgb(o,e,t+1/3),r=cc._hue2rgb(o,e,t),a=cc._hue2rgb(o,e,t-1/3)}return new hc(Math.round(255*s),Math.round(255*r),Math.round(255*a),o)}}class dc{constructor(e,t,i,n){this.h=0|Math.max(Math.min(360,e),0),this.s=lc(Math.max(Math.min(1,t),0),3),this.v=lc(Math.max(Math.min(1,i),0),3),this.a=lc(Math.max(Math.min(1,n),0),3)}static equals(e,t){return e.h===t.h&&e.s===t.s&&e.v===t.v&&e.a===t.a}static fromRGBA(e){const t=e.r/255,i=e.g/255,n=e.b/255,o=Math.max(t,i,n),s=o-Math.min(t,i,n),r=0===o?0:s/o;let a;return new dc(Math.round(60*(a=0===s?0:o===t?((i-n)/s%6+6)%6:o===i?(n-t)/s+2:(t-i)/s+4)),r,o,e.a)}static toRGBA(e){const{h:t,s:i,v:n,a:o}=e,s=n*i,r=s*(1-Math.abs(t/60%2-1)),a=n-s;let[l,h,c]=[0,0,0];return t<60?(l=s,h=r):t<120?(l=r,h=s):t<180?(h=s,c=r):t<240?(h=r,c=s):t<300?(l=r,c=s):t<=360&&(l=s,c=r),l=Math.round(255*(l+a)),h=Math.round(255*(h+a)),c=Math.round(255*(c+a)),new hc(l,h,c,o)}}class uc{constructor(e){if(!e)throw new Error("Color needs a value");if(e instanceof hc)this.rgba=e;else if(e instanceof cc)this._hsla=e,this.rgba=cc.toRGBA(e);else{if(!(e instanceof dc))throw new Error("Invalid color ctor argument");this._hsva=e,this.rgba=dc.toRGBA(e)}}static fromHex(e){return uc.Format.CSS.parseHex(e)||uc.red}get hsla(){return this._hsla?this._hsla:cc.fromRGBA(this.rgba)}get hsva(){return this._hsva?this._hsva:dc.fromRGBA(this.rgba)}equals(e){return!!e&&hc.equals(this.rgba,e.rgba)&&cc.equals(this.hsla,e.hsla)&&dc.equals(this.hsva,e.hsva)}getRelativeLuminance(){return lc(.2126*uc._relativeLuminanceForComponent(this.rgba.r)+.7152*uc._relativeLuminanceForComponent(this.rgba.g)+.0722*uc._relativeLuminanceForComponent(this.rgba.b),4)}static _relativeLuminanceForComponent(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}isLighter(){return(299*this.rgba.r+587*this.rgba.g+114*this.rgba.b)/1e3>=128}isLighterThan(e){return this.getRelativeLuminance()>e.getRelativeLuminance()}isDarkerThan(e){return this.getRelativeLuminance()0&&(e[t++]=n,i+=n.length),i>=65536)return e.join("")}}}const bc=()=>{throw new Error("Invalid change accessor")};class vc{constructor(){this._searchCanceledBrand=void 0}}function Cc(e){return e instanceof vc?null:e}vc.INSTANCE=new vc;class wc extends C{constructor(e,t,i,n=null,o){super(),this._onWillDispose=this._register(new oe),this.onWillDispose=this._onWillDispose.event,this._onDidChangeDecorations=this._register(new Ic),this.onDidChangeDecorations=this._onDidChangeDecorations.event,this._onDidChangeLanguage=this._register(new oe),this.onDidChangeLanguage=this._onDidChangeLanguage.event,this._onDidChangeLanguageConfiguration=this._register(new oe),this.onDidChangeLanguageConfiguration=this._onDidChangeLanguageConfiguration.event,this._onDidChangeTokens=this._register(new oe),this.onDidChangeTokens=this._onDidChangeTokens.event,this._onDidChangeOptions=this._register(new oe),this.onDidChangeOptions=this._onDidChangeOptions.event,this._onDidChangeAttached=this._register(new oe),this.onDidChangeAttached=this._onDidChangeAttached.event,this._eventEmitter=this._register(new Tc),this.id="$model"+ ++pc,this.isForSimpleWidget=t.isForSimpleWidget,this._associatedResource=null==n?mt.parse("inmemory://model/"+pc):n,this._undoRedoService=o,this._attachedEditorCount=0;const{textBuffer:s,disposable:r}=gc(e,t.defaultEOL);this._buffer=s,this._bufferDisposable=r,this._options=wc.resolveOptions(this._buffer,t);const a=this._buffer.getLineCount(),l=this._buffer.getValueLengthInRange(new ro(1,1,a,this._buffer.getLineLength(a)+1),0);this._isTooLargeForTokenization=!!t.largeFileOptimizations&&(l>wc.LARGE_FILE_SIZE_THRESHOLD||a>wc.LARGE_FILE_LINE_COUNT_THRESHOLD),this._isTooLargeForSyncing=l>wc.MODEL_SYNC_LIMIT,this._versionId=1,this._alternativeVersionId=1,this._initialUndoRedoSnapshot=null,this._isDisposed=!1,this._isDisposing=!1,this._languageIdentifier=i||Ih,this._languageRegistryListener=ac.onDidChange(e=>{e.languageIdentifier.id===this._languageIdentifier.id&&this._onDidChangeLanguageConfiguration.fire({})}),this._instanceId=ki(pc),this._lastDecorationId=0,this._decorations=Object.create(null),this._decorationsTree=new yc,this._commandManager=new Ws(this,o),this._isUndoing=!1,this._isRedoing=!1,this._trimAutoWhitespaceLines=null,this._tokens=new ph,this._tokens2=new gh,this._tokenization=new Oh(this)}static resolveOptions(e,t){if(t.detectIndentation){const i=Hs(e,t.tabSize,t.insertSpaces);return new qo({tabSize:i.tabSize,indentSize:i.tabSize,insertSpaces:i.insertSpaces,trimAutoWhitespace:t.trimAutoWhitespace,defaultEOL:t.defaultEOL})}return new qo({tabSize:t.tabSize,indentSize:t.indentSize,insertSpaces:t.insertSpaces,trimAutoWhitespace:t.trimAutoWhitespace,defaultEOL:t.defaultEOL})}onDidChangeRawContentFast(e){return this._eventEmitter.fastEvent(t=>e(t.rawContentChangedEvent))}onDidChangeContentFast(e){return this._eventEmitter.fastEvent(t=>e(t.contentChangedEvent))}onDidChangeContent(e){return this._eventEmitter.slowEvent(t=>e(t.contentChangedEvent))}dispose(){this._isDisposing=!0,this._onWillDispose.fire(),this._languageRegistryListener.dispose(),this._tokenization.dispose(),this._isDisposed=!0,super.dispose(),this._bufferDisposable.dispose(),this._isDisposing=!1;const e=new mh([],"","\n",!1,!1,!0,!0);e.dispose(),this._buffer=e}_assertNotDisposed(){if(this._isDisposed)throw new Error("Model is disposed!")}_emitContentChangedEvent(e,t){this._isDisposing||this._eventEmitter.fire(new Lh(e,t))}setValue(e){if(this._assertNotDisposed(),null===e)return;const{textBuffer:t,disposable:i}=gc(e,this._options.defaultEOL);this._setValueFromTextBuffer(t,i)}_createContentChanged2(e,t,i,n,o,s,r){return{changes:[{range:e,rangeOffset:t,rangeLength:i,text:n}],eol:this._buffer.getEOL(),versionId:this.getVersionId(),isUndoing:o,isRedoing:s,isFlush:r}}_setValueFromTextBuffer(e,t){this._assertNotDisposed();const i=this.getFullModelRange(),n=this.getValueLengthInRange(i),o=this.getLineCount(),s=this.getLineMaxColumn(o);this._buffer=e,this._bufferDisposable.dispose(),this._bufferDisposable=t,this._increaseVersionId(),this._tokens.flush(),this._tokens2.flush(),this._decorations=Object.create(null),this._decorationsTree=new yc,this._commandManager.clear(),this._trimAutoWhitespaceLines=null,this._emitContentChangedEvent(new Sh([new bh],this._versionId,!1,!1),this._createContentChanged2(new ro(1,1,o,s),0,n,this.getValue(),!1,!1,!0))}setEOL(e){this._assertNotDisposed();const t=1===e?"\r\n":"\n";if(this._buffer.getEOL()===t)return;const i=this.getFullModelRange(),n=this.getValueLengthInRange(i),o=this.getLineCount(),s=this.getLineMaxColumn(o);this._onBeforeEOLChange(),this._buffer.setEOL(t),this._increaseVersionId(),this._onAfterEOLChange(),this._emitContentChangedEvent(new Sh([new yh],this._versionId,!1,!1),this._createContentChanged2(new ro(1,1,o,s),0,n,this.getValue(),!1,!1,!1))}_onBeforeEOLChange(){const e=this.getVersionId(),t=this._decorationsTree.search(0,!1,!1,e);this._ensureNodesHaveRanges(t)}_onAfterEOLChange(){const e=this.getVersionId(),t=this._decorationsTree.collectNodesPostOrder();for(let i=0,n=t.length;i0}getAttachedEditorCount(){return this._attachedEditorCount}isTooLargeForSyncing(){return this._isTooLargeForSyncing}isTooLargeForTokenization(){return this._isTooLargeForTokenization}isDisposed(){return this._isDisposed}isDominatedByLongLines(){if(this._assertNotDisposed(),this.isTooLargeForTokenization())return!1;let e=0,t=0;const i=this._buffer.getLineCount();for(let n=1;n<=i;n++){const i=this._buffer.getLineLength(n);i>=fc?t+=i:e+=i}return t>e}get uri(){return this._associatedResource}getOptions(){return this._assertNotDisposed(),this._options}getFormattingOptions(){return{tabSize:this._options.indentSize,insertSpaces:this._options.insertSpaces}}updateOptions(e){this._assertNotDisposed();let t=new qo({tabSize:void 0!==e.tabSize?e.tabSize:this._options.tabSize,indentSize:void 0!==e.indentSize?e.indentSize:this._options.indentSize,insertSpaces:void 0!==e.insertSpaces?e.insertSpaces:this._options.insertSpaces,defaultEOL:this._options.defaultEOL,trimAutoWhitespace:void 0!==e.trimAutoWhitespace?e.trimAutoWhitespace:this._options.trimAutoWhitespace});if(this._options.equals(t))return;let i=this._options.createChangeEvent(t);this._options=t,this._onDidChangeOptions.fire(i)}detectIndentation(e,t){this._assertNotDisposed();let i=Hs(this._buffer,t,e);this.updateOptions({insertSpaces:i.insertSpaces,tabSize:i.tabSize,indentSize:i.tabSize})}static _normalizeIndentationFromWhitespace(e,t,i){let n=0;for(let i=0;i({range:e.range,text:null})),()=>null)}mightContainNonBasicASCII(){return this._buffer.mightContainNonBasicASCII()}getAlternativeVersionId(){return this._assertNotDisposed(),this._alternativeVersionId}getInitialUndoRedoSnapshot(){return this._assertNotDisposed(),this._initialUndoRedoSnapshot}getOffsetAt(e){this._assertNotDisposed();let t=this._validatePosition(e.lineNumber,e.column,0);return this._buffer.getOffsetAt(t.lineNumber,t.column)}getPositionAt(e){this._assertNotDisposed();let t=Math.min(this._buffer.getLength(),Math.max(0,e));return this._buffer.getPositionAt(t)}_increaseVersionId(){this._versionId=this._versionId+1,this._alternativeVersionId=this._versionId}_overwriteVersionId(e){this._versionId=e}_overwriteAlternativeVersionId(e){this._alternativeVersionId=e}_overwriteInitialUndoRedoSnapshot(e){this._initialUndoRedoSnapshot=e}getValue(e,t=!1){this._assertNotDisposed();const i=this.getFullModelRange(),n=this.getValueInRange(i,e);return t?this._buffer.getBOM()+n:n}createSnapshot(e=!1){return new _c(this._buffer.createSnapshot(e))}getValueLength(e,t=!1){this._assertNotDisposed();const i=this.getFullModelRange(),n=this.getValueLengthInRange(i,e);return t?this._buffer.getBOM().length+n:n}getValueInRange(e,t=0){return this._assertNotDisposed(),this._buffer.getValueInRange(this.validateRange(e),t)}getValueLengthInRange(e,t=0){return this._assertNotDisposed(),this._buffer.getValueLengthInRange(this.validateRange(e),t)}getCharacterCountInRange(e,t=0){return this._assertNotDisposed(),this._buffer.getCharacterCountInRange(this.validateRange(e),t)}getLineCount(){return this._assertNotDisposed(),this._buffer.getLineCount()}getLineContent(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineContent(e)}getLineLength(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLength(e)}getLinesContent(){return this._assertNotDisposed(),this._buffer.getLinesContent()}getEOL(){return this._assertNotDisposed(),this._buffer.getEOL()}getEndOfLineSequence(){return this._assertNotDisposed(),"\n"===this._buffer.getEOL()?0:1}getLineMinColumn(e){return this._assertNotDisposed(),1}getLineMaxColumn(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLength(e)+1}getLineFirstNonWhitespaceColumn(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineFirstNonWhitespaceColumn(e)}getLineLastNonWhitespaceColumn(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLastNonWhitespaceColumn(e)}_validateRangeRelaxedNoAllocations(e){const t=this._buffer.getLineCount(),i=e.startLineNumber,n=e.startColumn;let o,s;if(i<1)o=1,s=1;else if(i>t)s=this.getLineMaxColumn(o=t);else if(o=0|i,n<=1)s=1;else{const e=this.getLineMaxColumn(o);s=n>=e?e:0|n}const r=e.endLineNumber,a=e.endColumn;let l,h;if(r<1)l=1,h=1;else if(r>t)h=this.getLineMaxColumn(l=t);else if(l=0|r,a<=1)h=1;else{const e=this.getLineMaxColumn(l);h=a>=e?e:0|a}return i===o&&n===s&&r===l&&a===h&&e instanceof ro&&!(e instanceof ao)?e:new ro(o,s,l,h)}_isValidPosition(e,t,i){return!("number"!=typeof e||"number"!=typeof t||isNaN(e)||isNaN(t)||e<1||t<1||(0|e)!==e||(0|t)!==t||e>this._buffer.getLineCount()||1!==t&&(t>this.getLineMaxColumn(e)||1===i&&di(this._buffer.getLineCharCode(e,t-2))))}_validatePosition(e,t,i){const n=Math.floor("number"!=typeof e||isNaN(e)?1:e),o=Math.floor("number"!=typeof t||isNaN(t)?1:t),s=this._buffer.getLineCount();if(n<1)return new Tt(1,1);if(n>s)return new Tt(s,this.getLineMaxColumn(s));if(o<=1)return new Tt(n,1);const r=this.getLineMaxColumn(n);return o>=r?new Tt(n,r):1===i&&di(this._buffer.getLineCharCode(n,o-2))?new Tt(n,o-1):new Tt(n,o)}validatePosition(e){return this._assertNotDisposed(),e instanceof Tt&&this._isValidPosition(e.lineNumber,e.column,1)?e:this._validatePosition(e.lineNumber,e.column,1)}_isValidRange(e,t){const i=e.startLineNumber,n=e.startColumn,o=e.endLineNumber,s=e.endColumn;if(!this._isValidPosition(i,n,0))return!1;if(!this._isValidPosition(o,s,0))return!1;if(1===t){const e=n>1?this._buffer.getLineCharCode(i,n-2):0,t=s>1&&s<=this._buffer.getLineLength(o)?this._buffer.getLineCharCode(o,s-2):0,r=di(e),a=di(t);return!r&&!a}return!0}validateRange(e){if(this._assertNotDisposed(),e instanceof ro&&!(e instanceof ao)&&this._isValidRange(e,1))return e;const t=this._validatePosition(e.startLineNumber,e.startColumn,0),i=this._validatePosition(e.endLineNumber,e.endColumn,0),n=t.lineNumber,o=t.column,s=i.lineNumber,r=i.column;{const e=o>1?this._buffer.getLineCharCode(n,o-2):0,t=r>1&&r<=this._buffer.getLineLength(s)?this._buffer.getLineCharCode(s,r-2):0,i=di(e),a=di(t);return i||a?n===s&&o===r?new ro(n,o-1,s,r-1):i&&a?new ro(n,o-1,s,r+1):i?new ro(n,o-1,s,r):new ro(n,o,s,r+1):new ro(n,o,s,r)}}modifyPosition(e,t){this._assertNotDisposed();let i=this.getOffsetAt(e)+t;return this.getPositionAt(Math.min(this._buffer.getLength(),Math.max(0,i)))}getFullModelRange(){this._assertNotDisposed();const e=this.getLineCount();return new ro(1,1,e,this.getLineMaxColumn(e))}findMatchesLineByLine(e,t,i,n){return this._buffer.findMatchesLineByLine(e,t,i,n)}findMatches(e,t,i,n,o,s,r=mc){this._assertNotDisposed();let a=null;null!==t&&(Array.isArray(t)||(t=[t]),t.every(e=>ro.isIRange(e))&&(a=t.map(e=>this.validateRange(e)))),null===a&&(a=[this.getFullModelRange()]),a=a.sort((e,t)=>e.startLineNumber-t.startLineNumber||e.startColumn-t.startColumn);const l=[];let h;if(l.push(a.reduce((e,t)=>ro.areIntersecting(e,t)?e.plusRange(t):(l.push(e),t))),!i&&e.indexOf("\n")<0){const t=new Mr(e,i,n,o).parseSearchRequest();if(!t)return[];h=e=>this.findMatchesLineByLine(e,t,s,r)}else h=t=>Fr.findMatches(this,new Mr(e,i,n,o),t,s,r);return l.map(h).reduce((e,t)=>e.concat(t),[])}findNextMatch(e,t,i,n,o,s){this._assertNotDisposed();const r=this.validatePosition(t);if(!i&&e.indexOf("\n")<0){const t=new Mr(e,i,n,o).parseSearchRequest();if(!t)return null;const a=this.getLineCount();let l=new ro(r.lineNumber,r.column,a,this.getLineMaxColumn(a)),h=this.findMatchesLineByLine(l,t,s,1);return Fr.findNextMatch(this,new Mr(e,i,n,o),r,s),h.length>0?h[0]:(l=new ro(1,1,r.lineNumber,this.getLineMaxColumn(r.lineNumber)),(h=this.findMatchesLineByLine(l,t,s,1)).length>0?h[0]:null)}return Fr.findNextMatch(this,new Mr(e,i,n,o),r,s)}findPreviousMatch(e,t,i,n,o,s){this._assertNotDisposed();const r=this.validatePosition(t);return Fr.findPreviousMatch(this,new Mr(e,i,n,o),r,s)}pushStackElement(){this._commandManager.pushStackElement()}popStackElement(){this._commandManager.popStackElement()}pushEOL(e){if(("\n"===this.getEOL()?0:1)!==e)try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),null===this._initialUndoRedoSnapshot&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEOL(e)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_validateEditOperation(e){return e instanceof Yo?e:new Yo(e.identifier||null,this.validateRange(e.range),e.text,e.forceMoveMarkers||!1,e.isAutoWhitespaceEdit||!1,e._isTracked||!1)}_validateEditOperations(e){const t=[];for(let i=0,n=e.length;i({range:this.validateRange(e.range),text:e.text})),n=!0;if(e)for(let t=0,o=e.length;tt.endLineNumber;if(!(t.startLineNumber>o.endLineNumber||n)){s=!0;break}}if(!s){n=!1;break}}if(n)for(let e=0,n=this._trimAutoWhitespaceLines.length;et.endLineNumber||n===t.startLineNumber&&t.startColumn===o&&t.isEmpty()&&r&&r.length>0&&"\n"===r.charAt(0)||n===t.startLineNumber&&1===t.startColumn&&t.isEmpty()&&r&&r.length>0&&"\n"===r.charAt(r.length-1))){s=!1;break}}if(s){const e=new ro(n,1,n,o);t.push(new Yo(null,e,null,!1,!1,!1))}}this._trimAutoWhitespaceLines=null}return null===this._initialUndoRedoSnapshot&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEditOperation(e,t,i)}_applyUndo(e,t,i,n){const o=e.map(e=>{const t=this.getPositionAt(e.newPosition),i=this.getPositionAt(e.newEnd);return{range:new ro(t.lineNumber,t.column,i.lineNumber,i.column),text:e.oldText}});this._applyUndoRedoEdits(o,t,!0,!1,i,n)}_applyRedo(e,t,i,n){const o=e.map(e=>{const t=this.getPositionAt(e.oldPosition),i=this.getPositionAt(e.oldEnd);return{range:new ro(t.lineNumber,t.column,i.lineNumber,i.column),text:e.newText}});this._applyUndoRedoEdits(o,t,!1,!0,i,n)}_applyUndoRedoEdits(e,t,i,n,o,s){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._isUndoing=i,this._isRedoing=n,this.applyEdits(e,!1),this.setEOL(t),this._overwriteAlternativeVersionId(o)}finally{this._isUndoing=!1,this._isRedoing=!1,this._eventEmitter.endDeferredEmit(s),this._onDidChangeDecorations.endDeferredEmit()}}applyEdits(e,t=!1){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit();const i=this._validateEditOperations(e);return this._doApplyEdits(i,t)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_doApplyEdits(e,t){const i=this._buffer.getLineCount(),n=this._buffer.applyEdits(e,this._options.trimAutoWhitespace,t),o=this._buffer.getLineCount(),s=n.changes;if(this._trimAutoWhitespaceLines=n.trimAutoWhitespaceLineNumbers,0!==s.length){let e=[],t=i;for(let i=0,n=s.length;i0?n.text.charCodeAt(0):0),this._onDidChangeDecorations.fire(),this._decorationsTree.acceptReplace(n.rangeOffset,n.rangeLength,n.text.length,n.forceMoveMarkers);const h=n.range.startLineNumber,c=n.range.endLineNumber,d=c-h,u=r,g=Math.min(d,u),p=u-d;for(let i=g;i>=0;i--){const n=h+i;e.push(new vh(n,this.getLineContent(o-t-p+n)))}if(gthis._deltaDecorationsImpl(e,[],[{range:t,options:i}])[0],changeDecoration:(e,t)=>{this._changeDecorationImpl(e,t)},changeDecorationOptions:(e,t)=>{this._changeDecorationOptionsImpl(e,Nc(t))},removeDecoration:t=>{this._deltaDecorationsImpl(e,[t],[])},deltaDecorations:(t,i)=>0===t.length&&0===i.length?[]:this._deltaDecorationsImpl(e,t,i)},o=null;try{o=t(i)}catch(e){n(e)}return i.addDecoration=bc,i.changeDecoration=bc,i.changeDecorationOptions=bc,i.removeDecoration=bc,i.deltaDecorations=bc,o}deltaDecorations(e,t,i=0){if(this._assertNotDisposed(),e||(e=[]),0===e.length&&0===t.length)return[];try{return this._onDidChangeDecorations.beginDeferredEmit(),this._deltaDecorationsImpl(i,e,t)}finally{this._onDidChangeDecorations.endDeferredEmit()}}_getTrackedRange(e){return this.getDecorationRange(e)}_setTrackedRange(e,t,i){const n=e?this._decorations[e]:null;if(!n)return t?this._deltaDecorationsImpl(0,[],[{range:t,options:kc[i]}])[0]:null;if(!t)return this._decorationsTree.delete(n),delete this._decorations[n.id],null;const o=this._validateRangeRelaxedNoAllocations(t),s=this._buffer.getOffsetAt(o.startLineNumber,o.startColumn),r=this._buffer.getOffsetAt(o.endLineNumber,o.endColumn);return this._decorationsTree.delete(n),n.reset(this.getVersionId(),s,r,o),n.setOptions(kc[i]),this._decorationsTree.insert(n),n.id}removeAllDecorationsWithOwnerId(e){if(this._isDisposed)return;const t=this._decorationsTree.collectNodesFromOwner(e);for(let e=0,i=t.length;ethis.getLineCount()?[]:this.getLinesDecorations(e,e,t,i)}getLinesDecorations(e,t,i=0,n=!1){let o=this.getLineCount(),s=Math.min(o,Math.max(1,e)),r=Math.min(o,Math.max(1,t)),a=this.getLineMaxColumn(r);return this._getDecorationsInRange(new ro(s,1,r,a),i,n)}getDecorationsInRange(e,t=0,i=!1){let n=this.validateRange(e);return this._getDecorationsInRange(n,t,i)}getOverviewRulerDecorations(e=0,t=!1){const i=this.getVersionId(),n=this._decorationsTree.search(e,t,!0,i);return this._ensureNodesHaveRanges(n)}getAllDecorations(e=0,t=!1){const i=this.getVersionId(),n=this._decorationsTree.search(e,t,!1,i);return this._ensureNodesHaveRanges(n)}_getDecorationsInRange(e,t,i){const n=this._buffer.getOffsetAt(e.startLineNumber,e.startColumn),o=this._buffer.getOffsetAt(e.endLineNumber,e.endColumn),s=this.getVersionId(),r=this._decorationsTree.intervalSearch(n,o,t,i,s);return this._ensureNodesHaveRanges(r)}_ensureNodesHaveRanges(e){for(let t=0,i=e.length;t0&&this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:!1,ranges:t})}setSemanticTokens(e,t){this._tokens2.set(e,t),this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:null!==e,ranges:[{fromLineNumber:1,toLineNumber:this.getLineCount()}]})}hasCompleteSemanticTokens(){return this._tokens2.isComplete()}hasSomeSemanticTokens(){return!this._tokens2.isEmpty()}setPartialSemanticTokens(e,t){if(this.hasCompleteSemanticTokens())return;const i=this._tokens2.setPartial(e,t);this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:!0,ranges:[{fromLineNumber:i.startLineNumber,toLineNumber:i.endLineNumber}]})}tokenizeViewport(e,t){e=Math.max(1,e),t=Math.min(this._buffer.getLineCount(),t),this._tokenization.tokenizeViewport(e,t)}clearTokens(){this._tokens.flush(),this._emitModelTokensChangedEvent({tokenizationSupportChanged:!0,semanticTokensApplied:!1,ranges:[{fromLineNumber:1,toLineNumber:this._buffer.getLineCount()}]})}_emitModelTokensChangedEvent(e){this._isDisposing||this._onDidChangeTokens.fire(e)}resetTokenization(){this._tokenization.reset()}forceTokenization(e){if(e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");this._tokenization.forceTokenization(e)}isCheapToTokenize(e){return this._tokenization.isCheapToTokenize(e)}tokenizeIfCheap(e){this.isCheapToTokenize(e)&&this.forceTokenization(e)}getLineTokens(e){if(e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._getLineTokens(e)}_getLineTokens(e){const t=this.getLineContent(e),i=this._tokens.getTokens(this._languageIdentifier.id,e-1,t);return this._tokens2.addSemanticTokens(e,i)}getLanguageIdentifier(){return this._languageIdentifier}getModeId(){return this._languageIdentifier.language}setMode(e){if(this._languageIdentifier.id===e.id)return;let t={oldLanguage:this._languageIdentifier.language,newLanguage:e.language};this._languageIdentifier=e,this._onDidChangeLanguage.fire(t),this._onDidChangeLanguageConfiguration.fire({})}getLanguageIdAtPosition(e,t){const i=this.validatePosition(new Tt(e,t)),n=this.getLineTokens(i.lineNumber);return n.getLanguageId(n.findTokenIndexAtOffset(i.column-1))}getWordAtPosition(e){this._assertNotDisposed();const t=this.validatePosition(e),i=this.getLineContent(t.lineNumber),n=this._getLineTokens(t.lineNumber),o=n.findTokenIndexAtOffset(t.column-1),[s,r]=wc._findLanguageBoundaries(n,o),a=go(t.column,ac.getWordDefinition(n.getLanguageId(o)),i.substring(s,r),s);if(a&&a.startColumn<=e.column&&e.column<=a.endColumn)return a;if(o>0&&s===t.column-1){const[s,r]=wc._findLanguageBoundaries(n,o-1),a=go(t.column,ac.getWordDefinition(n.getLanguageId(o-1)),i.substring(s,r),s);if(a&&a.startColumn<=e.column&&e.column<=a.endColumn)return a}return null}static _findLanguageBoundaries(e,t){const i=e.getLanguageId(t);let n=0;for(let o=t;o>=0&&e.getLanguageId(o)===i;o--)n=e.getStartOffset(o);let o=e.getLineContent().length;for(let n=t,s=e.getCount();n=0;e--){const t=i.getEndOffset(e);if(t<=n)break;Hh(i.getStandardTokenType(e))&&(n=t)}const a=Math.min(o.length,e.column-1+r.maxBracketLength);let l=null;for(;;){const i=Qh.findNextBracketInRange(r.forwardRegex,t,o,n,a);if(!i)break;if(i.startColumn<=e.column&&e.column<=i.endColumn){const e=o.substring(i.startColumn-1,i.endColumn-1).toLowerCase(),t=this._matchFoundBracket(i,r.textIsBracket[e],r.textIsOpenBracket[e],null);if(t){if(t instanceof vc)return null;l=t}}n=i.endColumn-1}if(l)return l}if(s>0&&i.getStartOffset(s)===e.column-1){const r=s-1,a=ac.getBracketsSupport(i.getLanguageId(r));if(a&&!Hh(i.getStandardTokenType(r))){const s=Math.max(0,e.column-1-a.maxBracketLength);let l=Math.min(o.length,e.column-1+a.maxBracketLength);for(let e=r+1;e=l)break;Hh(i.getStandardTokenType(e))&&(l=t)}const h=Qh.findPrevBracketInRange(a.reversedRegex,t,o,s,l);if(h&&h.startColumn<=e.column&&e.column<=h.endColumn){const e=o.substring(h.startColumn-1,h.endColumn-1).toLowerCase(),t=this._matchFoundBracket(h,a.textIsBracket[e],a.textIsOpenBracket[e],null);if(t)return t instanceof vc?null:t}}}return null}_matchFoundBracket(e,t,i,n){if(!t)return null;const o=i?this._findMatchingBracketDown(t,e.getEndPosition(),n):this._findMatchingBracketUp(t,e.getStartPosition(),n);return o?o instanceof vc?o:[e,o]:null}_findMatchingBracketUp(e,t,i){const n=e.languageIdentifier.id,o=e.reversedRegex;let s=-1,r=0;const a=(t,n,a,l)=>{for(;;){if(i&&++r%100==0&&!i())return vc.INSTANCE;const h=Qh.findPrevBracketInRange(o,t,n,a,l);if(!h)break;const c=n.substring(h.startColumn-1,h.endColumn-1).toLowerCase();if(e.isOpen(c)?s++:e.isClose(c)&&s--,0===s)return h;l=h.startColumn-1}return null};for(let e=t.lineNumber;e>=1;e--){const i=this._getLineTokens(e),o=i.getCount(),s=this._buffer.getLineContent(e);let r=o-1,l=s.length,h=s.length;e===t.lineNumber&&(r=i.findTokenIndexAtOffset(t.column-1),l=t.column-1,h=t.column-1);let c=!0;for(;r>=0;r--){const t=i.getLanguageId(r)===n&&!Hh(i.getStandardTokenType(r));if(t)c?l=i.getStartOffset(r):(l=i.getStartOffset(r),h=i.getEndOffset(r));else if(c&&l!==h){const t=a(e,s,l,h);if(t)return t}c=t}if(c&&l!==h){const t=a(e,s,l,h);if(t)return t}}return null}_findMatchingBracketDown(e,t,i){const n=e.languageIdentifier.id,o=e.forwardRegex;let s=1,r=0;const a=(t,n,a,l)=>{for(;;){if(i&&++r%100==0&&!i())return vc.INSTANCE;const h=Qh.findNextBracketInRange(o,t,n,a,l);if(!h)break;const c=n.substring(h.startColumn-1,h.endColumn-1).toLowerCase();if(e.isOpen(c)?s++:e.isClose(c)&&s--,0===s)return h;a=h.endColumn-1}return null},l=this.getLineCount();for(let e=t.lineNumber;e<=l;e++){const i=this._getLineTokens(e),o=i.getCount(),s=this._buffer.getLineContent(e);let r=0,l=0,h=0;e===t.lineNumber&&(r=i.findTokenIndexAtOffset(t.column-1),l=t.column-1,h=t.column-1);let c=!0;for(;r=1;e--){const o=this._getLineTokens(e),s=o.getCount(),r=this._buffer.getLineContent(e);let a=s-1,l=r.length,h=r.length;if(e===t.lineNumber){a=o.findTokenIndexAtOffset(t.column-1),l=t.column-1,h=t.column-1;const e=o.getLanguageId(a);i!==e&&(n=ac.getBracketsSupport(i=e))}let c=!0;for(;a>=0;a--){const t=o.getLanguageId(a);if(i!==t){if(n&&c&&l!==h){const t=Qh.findPrevBracketInRange(n.reversedRegex,e,r,l,h);if(t)return this._toFoundBracket(n,t);c=!1}n=ac.getBracketsSupport(i=t)}const s=!!n&&!Hh(o.getStandardTokenType(a));if(s)c?l=o.getStartOffset(a):(l=o.getStartOffset(a),h=o.getEndOffset(a));else if(n&&c&&l!==h){const t=Qh.findPrevBracketInRange(n.reversedRegex,e,r,l,h);if(t)return this._toFoundBracket(n,t)}c=s}if(n&&c&&l!==h){const t=Qh.findPrevBracketInRange(n.reversedRegex,e,r,l,h);if(t)return this._toFoundBracket(n,t)}}return null}findNextBracket(e){const t=this.validatePosition(e),i=this.getLineCount();let n=-1,o=null;for(let e=t.lineNumber;e<=i;e++){const i=this._getLineTokens(e),s=i.getCount(),r=this._buffer.getLineContent(e);let a=0,l=0,h=0;if(e===t.lineNumber){a=i.findTokenIndexAtOffset(t.column-1),l=t.column-1,h=t.column-1;const e=i.getLanguageId(a);n!==e&&(o=ac.getBracketsSupport(n=e))}let c=!0;for(;aDate.now()-e<=t}const n=this.validatePosition(e),o=this.getLineCount(),s=new Map;let r=[];const a=(e,t)=>{if(!s.has(e)){let i=[];for(let e=0,n=t?t.brackets.length:0;e{for(;;){if(i&&++l%100==0&&!i())return vc.INSTANCE;const a=Qh.findNextBracketInRange(e.forwardRegex,t,n,o,s);if(!a)break;const h=n.substring(a.startColumn-1,a.endColumn-1).toLowerCase(),c=e.textIsBracket[h];if(c&&(c.isOpen(h)?r[c.index]++:c.isClose(h)&&r[c.index]--,-1===r[c.index]))return this._matchFoundBracket(a,c,!1,i);o=a.endColumn-1}return null};let c=-1,d=null;for(let e=n.lineNumber;e<=o;e++){const t=this._getLineTokens(e),i=t.getCount(),o=this._buffer.getLineContent(e);let s=0,r=0,l=0;if(e===n.lineNumber){s=t.findTokenIndexAtOffset(n.column-1),r=n.column-1,l=n.column-1;const e=t.getLanguageId(s);c!==e&&a(c=e,d=ac.getBracketsSupport(c))}let u=!0;for(;sn)throw new Error("Illegal value for lineNumber");const o=ac.getFoldingRules(this._languageIdentifier.id),s=Boolean(o&&o.offSide);let r=-2,a=-1,l=-2,h=-1;const c=e=>{if(-1!==r&&(-2===r||r>e-1)){r=-1,a=-1;for(let t=e-2;t>=0;t--){let e=this._computeIndentLevel(t);if(e>=0){r=t,a=e;break}}}if(-2===l){l=-1,h=-1;for(let t=e;t=0){l=t,h=e;break}}}};let d=-2,u=-1,g=-2,p=-1;const m=e=>{if(-2===d){d=-1,u=-1;for(let t=e-2;t>=0;t--){let e=this._computeIndentLevel(t);if(e>=0){d=t,u=e;break}}}if(-1!==g&&(-2===g||g=0){g=t,p=e;break}}}};let f=0,_=!0,b=0,v=!0,C=0,w=0;for(let o=0;_||v;o++){const r=e-o,g=e+o;o>1&&(r<1||r1&&(g>n||g>i)&&(v=!1),o>5e4&&(_=!1,v=!1);let y=-1;if(_){const e=this._computeIndentLevel(r-1);e>=0?(l=r-1,h=e,y=Math.ceil(e/this._options.indentSize)):(c(r),y=this._getIndentLevelForWhitespaceLine(s,a,h))}let S=-1;if(v){const e=this._computeIndentLevel(g-1);e>=0?(d=g-1,u=e,S=Math.ceil(e/this._options.indentSize)):(m(g),S=this._getIndentLevelForWhitespaceLine(s,u,p))}if(0!==o){if(1===o){if(g<=n&&S>=0&&w+1===S){_=!1,f=g,b=g,C=S;continue}if(r>=1&&y>=0&&y-1===w){v=!1,f=r,b=r,C=y;continue}if(f=e,b=e,0===(C=w))return{startLineNumber:f,endLineNumber:b,indent:C}}_&&(y>=C?f=r:_=!1),v&&(S>=C?b=g:v=!1)}else w=y}return{startLineNumber:f,endLineNumber:b,indent:C}}getLinesIndentGuides(e,t){this._assertNotDisposed();const i=this.getLineCount();if(e<1||e>i)throw new Error("Illegal value for startLineNumber");if(t<1||t>i)throw new Error("Illegal value for endLineNumber");const n=ac.getFoldingRules(this._languageIdentifier.id),o=Boolean(n&&n.offSide);let s=new Array(t-e+1),r=-2,a=-1,l=-2,h=-1;for(let n=e;n<=t;n++){let t=n-e;const c=this._computeIndentLevel(n-1);if(c>=0)r=n-1,a=c,s[t]=Math.ceil(c/this._options.indentSize);else{if(-2===r){r=-1,a=-1;for(let e=n-2;e>=0;e--){let t=this._computeIndentLevel(e);if(t>=0){r=e,a=t;break}}}if(-1!==l&&(-2===l||l=0){l=e,h=t;break}}}s[t]=this._getIndentLevelForWhitespaceLine(o,a,h)}}return s}_getIndentLevelForWhitespaceLine(e,t,i){return-1===t||-1===i?0:t0?this._deferredEvent=this._deferredEvent?this._deferredEvent.merge(e):e:(this._fastEmitter.fire(e),this._slowEmitter.fire(e))}}const Ac=()=>!0,Mc=()=>!1,Oc=e=>" "===e||"\t"===e;class Rc{constructor(e,t,i){this._languageIdentifier=e;const n=i.options,o=n.get(129);this.readOnly=n.get(77),this.tabSize=t.tabSize,this.indentSize=t.indentSize,this.insertSpaces=t.insertSpaces,this.stickyTabStops=n.get(104),this.lineHeight=n.get(54),this.pageSize=Math.max(1,Math.floor(o.height/this.lineHeight)-2),this.useTabStops=n.get(114),this.wordSeparators=n.get(115),this.emptySelectionClipboard=n.get(28),this.copyWithSyntaxHighlighting=n.get(18),this.multiCursorMergeOverlapping=n.get(64),this.multiCursorPaste=n.get(66),this.autoClosingBrackets=n.get(5),this.autoClosingQuotes=n.get(7),this.autoClosingOvertype=n.get(6),this.autoSurround=n.get(10),this.autoIndent=n.get(8),this.overtypeAllowed=n.get(68),this.jumpOutOfAutoClosedOnTab=n.get(50),this.surroundingPairs={},this._electricChars=null,this.shouldAutoCloseBefore={quote:Rc._getShouldAutoClose(e,this.autoClosingQuotes),bracket:Rc._getShouldAutoClose(e,this.autoClosingBrackets)},this.autoClosingPairs=ac.getAutoClosingPairs(e.id);let s=Rc._getSurroundingPairs(e);if(s)for(const e of s)this.surroundingPairs[e.open]=e.close}static shouldRecreate(e){return e.hasChanged(129)||e.hasChanged(115)||e.hasChanged(28)||e.hasChanged(64)||e.hasChanged(66)||e.hasChanged(5)||e.hasChanged(7)||e.hasChanged(6)||e.hasChanged(10)||e.hasChanged(114)||e.hasChanged(54)||e.hasChanged(77)||e.hasChanged(68)||e.hasChanged(50)}get electricChars(){if(!this._electricChars){this._electricChars={};let e=Rc._getElectricCharacters(this._languageIdentifier);if(e)for(const t of e)this._electricChars[t]=!0}return this._electricChars}normalizeIndentation(e){return wc.normalizeIndentation(e,this.indentSize,this.insertSpaces)}static _getElectricCharacters(e){try{return ac.getElectricCharacters(e.id)}catch(e){return n(e),null}}static _getShouldAutoClose(e,t){switch(t){case"beforeWhitespace":return Oc;case"languageDefined":return Rc._getLanguageDefinedShouldAutoClose(e);case"always":return Ac;case"never":return Mc}}static _getLanguageDefinedShouldAutoClose(e){try{const t=ac.getAutoCloseBeforeSet(e.id);return e=>-1!==t.indexOf(e)}catch(e){return n(e),Mc}}static _getSurroundingPairs(e){try{return ac.getSurroundingPairs(e.id)}catch(e){return n(e),null}}}class Pc{constructor(e,t,i,n){this.selectionStart=e,this.selectionStartLeftoverVisibleColumns=t,this.position=i,this.leftoverVisibleColumns=n,this.selection=Pc._computeSelection(this.selectionStart,this.position)}equals(e){return this.selectionStartLeftoverVisibleColumns===e.selectionStartLeftoverVisibleColumns&&this.leftoverVisibleColumns===e.leftoverVisibleColumns&&this.position.equals(e.position)&&this.selectionStart.equalsRange(e.selectionStart)}hasSelection(){return!this.selection.isEmpty()||!this.selectionStart.isEmpty()}move(e,t,i,n){return e?new Pc(this.selectionStart,this.selectionStartLeftoverVisibleColumns,new Tt(t,i),n):new Pc(new ro(t,i,t,i),n,new Tt(t,i),n)}static _computeSelection(e,t){let i,n,o,s;return e.isEmpty()?(i=e.startLineNumber,n=e.startColumn,o=t.lineNumber,s=t.column):t.isBeforeOrEqual(e.getStartPosition())?(i=e.endLineNumber,n=e.endColumn,o=t.lineNumber,s=t.column):(i=e.startLineNumber,n=e.startColumn,o=t.lineNumber,s=t.column),new ao(i,n,o,s)}}class Fc{constructor(e,t,i){this.model=e,this.coordinatesConverter=t,this.cursorConfig=i}}class Bc{constructor(e){this.modelState=e,this.viewState=null}}class Wc{constructor(e){this.modelState=null,this.viewState=e}}class Vc{constructor(e,t){this.modelState=e,this.viewState=t}static fromModelState(e){return new Bc(e)}static fromViewState(e){return new Wc(e)}static fromModelSelection(e){const t=e.selectionStartLineNumber,i=e.selectionStartColumn,n=e.positionLineNumber,o=e.positionColumn,s=new Pc(new ro(t,i,t,i),0,new Tt(n,o),0);return Vc.fromModelState(s)}static fromModelSelections(e){let t=[];for(let i=0,n=e.length;i=65536?2:1,9===t)s=Hc.nextRenderTabStop(s,i);else{let i=Ni(t);for(;r=65536?2:1,i=n}Li(t)||Di(t)?s+=2:s+=1}}return s}static visibleColumnFromColumn2(e,t,i){return this.visibleColumnFromColumn(t.getLineContent(i.lineNumber),i.column,e.tabSize)}static columnFromVisibleColumn(e,t,i){if(t<=0)return 1;const n=e.length;let o=0,s=1,r=0;for(;r=65536?2:1,9===a)l=Hc.nextRenderTabStop(o,i);else{let t=Ni(a);for(;r=65536?2:1,t=o}l=Li(a)||Di(a)?o+2:o+1}const h=r+1;if(l>=t)return l-tr?r:o}static nextRenderTabStop(e,t){return e+t-e%t}static nextIndentTabStop(e,t){return e+t-e%t}static prevRenderTabStop(e,t){return e-1-(e-1)%t}static prevIndentTabStop(e,t){return e-1-(e-1)%t}}function Uc(e){return"'"===e||'"'===e||"`"===e}class Kc{static columnSelect(e,t,i,n,o,s){let r=Math.abs(o-i)+1,a=i>o,l=n>s,h=ns)continue;if(pn)continue;if(g1&&n--,Kc.columnSelect(e,t,i.fromViewLineNumber,i.fromViewVisualColumn,i.toViewLineNumber,n)}static columnSelectRight(e,t,i){let n=0;const o=Math.min(i.fromViewLineNumber,i.toViewLineNumber),s=Math.max(i.fromViewLineNumber,i.toViewLineNumber);for(let i=o;i<=s;i++){const o=t.getLineMaxColumn(i),s=Hc.visibleColumnFromColumn2(e,t,new Tt(i,o));n=Math.max(n,s)}let r=i.toViewVisualColumn;return re.getLineMinColumn(t)?i-=function n(e,t){const i=Ti.getInstance(),n=t,o=mi(e,t);t-=o>=65536?2:1;let s=i.getGraphemeBreakType(o);for(;t>0;){const n=mi(e,t),o=i.getGraphemeBreakType(n);if(Ii(o,s))break;t-=n>=65536?2:1,s=o}return n-t}(e.getLineContent(t),i-1):t>1&&(i=e.getLineMaxColumn(t-=1)),new Tt(t,i)}static leftPositionAtomicSoftTabs(e,t,i,n){const o=e.getLineMinColumn(t),s=e.getLineContent(t),r=Zc.atomicPosition(s,i-1,n,0);return-1===r||r+1l?(i=l,n=r?t.getLineMaxColumn(i):Math.min(t.getLineMaxColumn(i),n)):n=Hc.columnFromVisibleColumn2(e,t,i,a),o=h?0:a-Hc.visibleColumnFromColumn(t.getLineContent(i),n,e.tabSize),new Xc(i,n,o)}static moveDown(e,t,i,n,o){let s,r;i.hasSelection()&&!n?(s=i.selection.endLineNumber,r=i.selection.endColumn):(s=i.position.lineNumber,r=i.position.column);let a=Qc.down(e,t,s,r,i.leftoverVisibleColumns,o,!0);return i.move(n,a.lineNumber,a.column,a.leftoverVisibleColumns)}static translateDown(e,t,i){let n=i.selection,o=Qc.down(e,t,n.selectionStartLineNumber,n.selectionStartColumn,i.selectionStartLeftoverVisibleColumns,1,!1),s=Qc.down(e,t,n.positionLineNumber,n.positionColumn,i.leftoverVisibleColumns,1,!1);return new Pc(new ro(o.lineNumber,o.column,o.lineNumber,o.column),o.leftoverVisibleColumns,new Tt(s.lineNumber,s.column),s.leftoverVisibleColumns)}static up(e,t,i,n,o,s,r){const a=Hc.visibleColumnFromColumn(t.getLineContent(i),n,e.tabSize)+o,l=1===i&&1===n;return(i-=s)<1?(i=1,n=r?t.getLineMinColumn(i):Math.min(t.getLineMaxColumn(i),n)):n=Hc.columnFromVisibleColumn2(e,t,i,a),o=l?0:a-Hc.visibleColumnFromColumn(t.getLineContent(i),n,e.tabSize),new Xc(i,n,o)}static moveUp(e,t,i,n,o){let s,r;i.hasSelection()&&!n?(s=i.selection.startLineNumber,r=i.selection.startColumn):(s=i.position.lineNumber,r=i.position.column);let a=Qc.up(e,t,s,r,i.leftoverVisibleColumns,o,!0);return i.move(n,a.lineNumber,a.column,a.leftoverVisibleColumns)}static translateUp(e,t,i){let n=i.selection,o=Qc.up(e,t,n.selectionStartLineNumber,n.selectionStartColumn,i.selectionStartLeftoverVisibleColumns,1,!1),s=Qc.up(e,t,n.positionLineNumber,n.positionColumn,i.leftoverVisibleColumns,1,!1);return new Pc(new ro(o.lineNumber,o.column,o.lineNumber,o.column),o.leftoverVisibleColumns,new Tt(s.lineNumber,s.column),s.leftoverVisibleColumns)}static _isBlankLine(e,t){return 0===e.getLineFirstNonWhitespaceColumn(t)}static moveToPrevBlankLine(e,t,i,n){let o=i.position.lineNumber;for(;o>1&&this._isBlankLine(t,o);)o--;for(;o>1&&!this._isBlankLine(t,o);)o--;return i.move(n,o,t.getLineMinColumn(o),0)}static moveToNextBlankLine(e,t,i,n){const o=t.getLineCount();let s=i.position.lineNumber;for(;s=l.length+1)return!1;const h=l.charAt(a.column-2),c=i.get(h);if(!c)return!1;if(Uc(h)){if("never"===t)return!1}else if("never"===e)return!1;const d=l.charAt(a.column-1);let u=!1;for(const e of c)e.open===h&&e.close===d&&(u=!0);if(!u)return!1}return!0}static _runAutoClosingPairDelete(e,t,i){let n=[];for(let e=0,t=i.length;e1){let n=i.getLineContent(e.lineNumber),o=Zt(n);if(e.column<=(-1===o?n.length+1:o+1)){let n=Hc.visibleColumnFromColumn2(t,i,e),o=Hc.prevIndentTabStop(n,t.indentSize),s=Hc.columnFromVisibleColumn2(t,i,e.lineNumber,o);a=new ro(e.lineNumber,s,e.lineNumber,e.column)}else a=new ro(e.lineNumber,e.column-1,e.lineNumber,e.column)}else{let n=Qc.left(t,i,e.lineNumber,e.column);a=new ro(n.lineNumber,n.column,e.lineNumber,e.column)}}a.isEmpty()?o[e]=null:(a.startLineNumber!==a.endLineNumber&&(s=!0),o[e]=new $c(a,""))}return[s,o]}static cut(e,t,i){let n=[];for(let o=0,s=i.length;o1?(e=l.lineNumber-1,i=t.getLineMaxColumn(l.lineNumber-1),r=l.lineNumber,a=t.getLineMaxColumn(l.lineNumber)):(e=l.lineNumber,i=1,r=l.lineNumber,a=t.getLineMaxColumn(l.lineNumber));let h=new ro(e,i,r,a);n[o]=h.isEmpty()?null:new $c(h,"")}else n[o]=null;else n[o]=new $c(s,"")}return new zc(0,n,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}}class ed{static _createWord(e,t,i,n,o){return{start:n,end:o,wordType:t,nextCharClass:i}}static _findPreviousWordOnLine(e,t,i){let n=t.getLineContent(i.lineNumber);return this._doFindPreviousWordOnLine(n,e,i)}static _doFindPreviousWordOnLine(e,t,i){let n=0;for(let o=i.column-2;o>=0;o--){let i=e.charCodeAt(o),s=t.get(i);if(0===s){if(2===n)return this._createWord(e,n,s,o+1,this._findEndOfWord(e,t,n,o+1));n=1}else if(2===s){if(1===n)return this._createWord(e,n,s,o+1,this._findEndOfWord(e,t,n,o+1));n=2}else if(1===s&&0!==n)return this._createWord(e,n,s,o+1,this._findEndOfWord(e,t,n,o+1))}return 0!==n?this._createWord(e,n,1,0,this._findEndOfWord(e,t,n,0)):null}static _findEndOfWord(e,t,i,n){let o=e.length;for(let s=n;s=0;o--){let n=e.charCodeAt(o),s=t.get(n);if(1===s)return o+1;if(1===i&&2===s)return o+1;if(2===i&&0===s)return o+1}return 0}static moveWordLeft(e,t,i,n){let o=i.lineNumber,s=i.column;1===s&&o>1&&(s=t.getLineMaxColumn(o-=1));let r=ed._findPreviousWordOnLine(e,t,new Tt(o,s));if(0===n)return new Tt(o,r?r.start+1:1);if(1===n)return r&&2===r.wordType&&r.end-r.start==1&&0===r.nextCharClass&&(r=ed._findPreviousWordOnLine(e,t,new Tt(o,r.start+1))),new Tt(o,r?r.start+1:1);if(3===n){for(;r&&2===r.wordType;)r=ed._findPreviousWordOnLine(e,t,new Tt(o,r.start+1));return new Tt(o,r?r.start+1:1)}return r&&s<=r.end+1&&(r=ed._findPreviousWordOnLine(e,t,new Tt(o,r.start+1))),new Tt(o,r?r.end+1:1)}static _moveWordPartLeft(e,t){const i=t.lineNumber,n=e.getLineMaxColumn(i);if(1===t.column)return i>1?new Tt(i-1,e.getLineMaxColumn(i-1)):t;const o=e.getLineContent(i);for(let e=t.column-1;e>1;e--){const t=o.charCodeAt(e-2),s=o.charCodeAt(e-1);if(95===t&&95!==s)return new Tt(i,e);if(ni(t)&&oi(s))return new Tt(i,e);if(oi(t)&&oi(s)&&e+1=a.start+1&&(a=ed._findNextWordOnLine(e,t,new Tt(o,a.end+1))),s=a?a.start+1:t.getLineMaxColumn(o);return new Tt(o,s)}static _moveWordPartRight(e,t){const i=t.lineNumber,n=e.getLineMaxColumn(i);if(t.column===n)return i1?1:n.getLineMaxColumn(--a):(h&&l<=h.end+1&&(h=ed._findPreviousWordOnLine(i,n,new Tt(a,h.start+1))),l=h?h.end+1:l>1?1:n.getLineMaxColumn(--a)),new ro(a,l,r.lineNumber,r.column)}static deleteInsideWord(e,t,i){if(!i.isEmpty())return i;const n=new Tt(i.positionLineNumber,i.positionColumn);return this._deleteInsideWordWhitespace(t,n)||this._deleteInsideWordDetermineDeleteRange(e,t,n)}static _charAtIsWhitespace(e,t){const i=e.charCodeAt(t);return 32===i||9===i}static _deleteInsideWordWhitespace(e,t){const i=e.getLineContent(t.lineNumber),n=i.length;if(0===n)return null;let o=Math.max(t.column-2,0);if(!this._charAtIsWhitespace(i,o))return null;let s=Math.min(t.column-1,n-1);if(!this._charAtIsWhitespace(i,s))return null;for(;o>0&&this._charAtIsWhitespace(i,o-1);)o--;for(;s+11?new ro(i.lineNumber-1,t.getLineMaxColumn(i.lineNumber-1),i.lineNumber,1):i.lineNumbere.start+1<=i.column&&i.column<=e.end+1,r=(e,t)=>(e=Math.min(e,i.column),t=Math.max(t,i.column),new ro(i.lineNumber,e,i.lineNumber,t)),a=e=>{let t=e.start+1,i=e.end+1,s=!1;for(;i-11&&this._charAtIsWhitespace(n,t-2);)t--;return r(t,i)},l=ed._findPreviousWordOnLine(e,t,i);if(l&&s(l))return a(l);const h=ed._findNextWordOnLine(e,t,i);return h&&s(h)?a(h):l&&h?r(l.end+1,h.start+1):l?r(l.start+1,l.end+1):h?r(h.start+1,h.end+1):r(1,o+1)}static _deleteWordPartLeft(e,t){if(!t.isEmpty())return t;const i=t.getPosition(),n=ed._moveWordPartLeft(e,i);return new ro(i.lineNumber,i.column,n.lineNumber,n.column)}static _findFirstNonWhitespaceChar(e,t){let i=e.length;for(let n=t;n=d.start+1&&(d=ed._findNextWordOnLine(i,n,new Tt(a,d.end+1))),l=d?d.start+1:lt&&(n=e.model.getLineMaxColumn(i=t)),Vc.fromModelState(new Pc(new ro(s.lineNumber,1,i,n),0,new Tt(i,n),0))}const a=t.modelState.selectionStart.getStartPosition().lineNumber;if(s.lineNumbera){const i=e.getLineCount();let n=r.lineNumber+1,o=1;return n>i&&(o=e.getLineMaxColumn(n=i)),Vc.fromViewState(t.viewState.move(t.modelState.hasSelection(),n,o,0))}{const e=t.modelState.selectionStart.getEndPosition();return Vc.fromModelState(t.modelState.move(t.modelState.hasSelection(),e.lineNumber,e.column,0))}}static word(e,t,i,n){const o=e.model.validatePosition(n);return Vc.fromModelState(ed.word(e.cursorConfig,e.model,t.modelState,i,o))}static cancelSelection(e,t){if(!t.modelState.hasSelection())return new Vc(t.modelState,t.viewState);const i=t.viewState.position.lineNumber,n=t.viewState.position.column;return Vc.fromViewState(new Pc(new ro(i,n,i,n),0,new Tt(i,n),0))}static moveTo(e,t,i,n,o){const s=e.model.validatePosition(n),r=o?e.coordinatesConverter.validateViewPosition(new Tt(o.lineNumber,o.column),s):e.coordinatesConverter.convertModelPositionToViewPosition(s);return Vc.fromViewState(t.viewState.move(i,r.lineNumber,r.column,0))}static simpleMove(e,t,i,n,o,s){switch(i){case 0:return 4===s?this._moveHalfLineLeft(e,t,n):this._moveLeft(e,t,n,o);case 1:return 4===s?this._moveHalfLineRight(e,t,n):this._moveRight(e,t,n,o);case 2:return 2===s?this._moveUpByViewLines(e,t,n,o):this._moveUpByModelLines(e,t,n,o);case 3:return 2===s?this._moveDownByViewLines(e,t,n,o):this._moveDownByModelLines(e,t,n,o);case 4:return t.map(2===s?t=>Vc.fromViewState(Qc.moveToPrevBlankLine(e.cursorConfig,e,t.viewState,n)):t=>Vc.fromModelState(Qc.moveToPrevBlankLine(e.cursorConfig,e.model,t.modelState,n)));case 5:return t.map(2===s?t=>Vc.fromViewState(Qc.moveToNextBlankLine(e.cursorConfig,e,t.viewState,n)):t=>Vc.fromModelState(Qc.moveToNextBlankLine(e.cursorConfig,e.model,t.modelState,n)));case 6:return this._moveToViewMinColumn(e,t,n);case 7:return this._moveToViewFirstNonWhitespaceColumn(e,t,n);case 8:return this._moveToViewCenterColumn(e,t,n);case 9:return this._moveToViewMaxColumn(e,t,n);case 10:return this._moveToViewLastNonWhitespaceColumn(e,t,n);default:return null}}static viewportMove(e,t,i,n,o){const s=e.getCompletelyVisibleViewRange(),r=e.coordinatesConverter.convertViewRangeToModelRange(s);switch(i){case 11:{const i=this._firstLineNumberInRange(e.model,r,o),s=e.model.getLineFirstNonWhitespaceColumn(i);return[this._moveToModelPosition(e,t[0],n,i,s)]}case 13:{const i=this._lastLineNumberInRange(e.model,r,o),s=e.model.getLineFirstNonWhitespaceColumn(i);return[this._moveToModelPosition(e,t[0],n,i,s)]}case 12:{const i=Math.round((r.startLineNumber+r.endLineNumber)/2),o=e.model.getLineFirstNonWhitespaceColumn(i);return[this._moveToModelPosition(e,t[0],n,i,o)]}case 14:{let i=[];for(let o=0,r=t.length;oi.endLineNumber-1&&(o=i.endLineNumber-1),o1;let s=[];for(let r=0,a=t.length;r1;let s=[];for(let r=0,a=t.length;r1&&Hc.visibleColumnFromColumn(d,u+1,o)%s!=0&&e.isCheapToTokenize(c-1)){let t=ac.getEnterAction(this._opts.autoIndent,e,new ro(c-1,e.getLineMaxColumn(c-1),c-1,e.getLineMaxColumn(c-1)));if(t){if(h=l,t.appendText)for(let e=0,i=t.appendText.length;e1){let n;for(n=i-1;n>=1&&!(Qt(t.getLineContent(n))>=0);n--);if(n<1)return null;const s=t.getLineMaxColumn(n),r=ac.getEnterAction(e.autoIndent,t,new ro(n,s,n,s));r&&(o=r.indentation+r.appendText)}return n&&(n===Ph.Indent&&(o=ld.shiftIndent(e,o)),n===Ph.Outdent&&(o=ld.unshiftIndent(e,o)),o=e.normalizeIndentation(o)),o||null}static _replaceJumpToNextIndent(e,t,i,n){let o="",s=i.getStartPosition();if(e.insertSpaces){let i=Hc.visibleColumnFromColumn2(e,t,s),n=e.indentSize,r=n-i%n;for(let e=0;ee.modelState.selection);let o=[];for(let s=0,r=n.length;sthis._compositionType(i,e,o,s,r,a));return new zc(1,l,{shouldPushStackElementBefore:1!==e,shouldPushStackElementAfter:!1})}static _compositionType(e,t,i,n,o,s){if(!t.isEmpty())return null;const r=t.getPosition(),a=Math.max(1,r.column-n),l=Math.min(e.getLineMaxColumn(r.lineNumber),r.column+o),h=new ro(r.lineNumber,a,r.lineNumber,l);return e.getValueInRange(h)===i&&0===s?null:new Gc(h,i,0,s)}static _typeCommand(e,t,i){return i?new qc(e,t,!0):new $c(e,t,!0)}static _enter(e,t,i,n){if(0===e.autoIndent)return ld._typeCommand(n,"\n",i);if(!t.isCheapToTokenize(n.getStartPosition().lineNumber)||1===e.autoIndent){let o=Xt(t.getLineContent(n.startLineNumber)).substring(0,n.startColumn-1);return ld._typeCommand(n,"\n"+e.normalizeIndentation(o),i)}const o=ac.getEnterAction(e.autoIndent,t,n);if(o){if(o.indentAction===Ph.None)return ld._typeCommand(n,"\n"+e.normalizeIndentation(o.indentation+o.appendText),i);if(o.indentAction===Ph.Indent)return ld._typeCommand(n,"\n"+e.normalizeIndentation(o.indentation+o.appendText),i);if(o.indentAction===Ph.IndentOutdent){const t=e.normalizeIndentation(o.indentation),s=e.normalizeIndentation(o.indentation+o.appendText),r="\n"+s+"\n"+t;return i?new qc(n,r,!0):new Gc(n,r,-1,s.length-t.length,!0)}if(o.indentAction===Ph.Outdent){const t=ld.unshiftIndent(e,o.indentation);return ld._typeCommand(n,"\n"+e.normalizeIndentation(t+o.appendText),i)}}const s=Xt(t.getLineContent(n.startLineNumber)).substring(0,n.startColumn-1);if(e.autoIndent>=4){const o=ac.getIndentForEnter(e.autoIndent,t,n,{unshiftIndent:t=>ld.unshiftIndent(e,t),shiftIndent:t=>ld.shiftIndent(e,t),normalizeIndentation:t=>e.normalizeIndentation(t)});if(o){let s=Hc.visibleColumnFromColumn2(e,t,n.getEndPosition());const r=n.endColumn,a=Zt(t.getLineContent(n.endLineNumber));if(n=n.setEndPosition(n.endLineNumber,a>=0?Math.max(n.endColumn,a+1):t.getLineMaxColumn(n.endLineNumber)),i)return new qc(n,"\n"+e.normalizeIndentation(o.afterEnter),!0);{let t=0;return r<=a+1&&(e.insertSpaces||(s=Math.ceil(s/e.indentSize)),t=Math.min(s+1-e.normalizeIndentation(o.afterEnter).length-1,0)),new Gc(n,"\n"+e.normalizeIndentation(o.afterEnter),0,t,!0)}}}return ld._typeCommand(n,"\n"+e.normalizeIndentation(s),i)}static _isAutoIndentType(e,t,i){if(e.autoIndent<4)return!1;for(let e=0,n=i.length;eld.shiftIndent(e,t),unshiftIndent:t=>ld.unshiftIndent(e,t)});if(null===s)return null;if(s!==e.normalizeIndentation(o)){const o=t.getLineFirstNonWhitespaceColumn(i.startLineNumber);return ld._typeCommand(new ro(i.startLineNumber,1,i.endLineNumber,i.endColumn),0===o?e.normalizeIndentation(s)+n:e.normalizeIndentation(s)+t.getLineContent(i.startLineNumber).substring(o-1,i.startColumn-1)+n,!1)}return null}static _isAutoClosingOvertype(e,t,i,n,o){if("never"===e.autoClosingOvertype)return!1;if(!e.overtypeAllowed&&!e.autoClosingPairs.autoClosingPairsCloseSingleChar.has(o))return!1;for(let s=0,r=i.length;s2?l.charCodeAt(a.column-2):0)&&h)return!1;if("auto"===e.autoClosingOvertype){let e=!1;for(let t=0,i=n.length;tt.startsWith(e.open)),r=o.some(e=>t.startsWith(e.close));return!s&&r}static _findAutoClosingPairOpen(e,t,i,n){const o=e.autoClosingPairs.autoClosingPairsOpenByEnd.get(n);if(!o)return null;let s=null;for(const e of o)if(null===s||e.open.length>s.open.length){let o=!0;for(const s of i)if(t.getValueInRange(new ro(s.lineNumber,s.column-e.open.length+1,s.lineNumber,s.column))+n!==e.open){o=!1;break}o&&(s=e)}return s}static _findSubAutoClosingPairClose(e,t){if(t.open.length<=1)return"";const i=t.close.charAt(t.close.length-1),n=e.autoClosingPairs.autoClosingPairsCloseByEnd.get(i)||[];let o=null;for(const e of n)e.open!==t.open&&t.open.includes(e.open)&&t.close.endsWith(e.close)&&(!o||e.open.length>o.open.length)&&(o=e);return o?o.close:""}static _getAutoClosingPairClose(e,t,i,o,s){const r=Uc(o),a=r?e.autoClosingQuotes:e.autoClosingBrackets;if("never"===a)return null;const l=this._findAutoClosingPairOpen(e,t,i.map(e=>e.getPosition()),o);if(!l)return null;const h=this._findSubAutoClosingPairClose(e,l);let c=!0;const d=r?e.shouldAutoCloseBefore.quote:e.shouldAutoCloseBefore.bracket;for(let o=0,u=i.length;og.column-1){const t=p.charAt(g.column-1);if(!ld._isBeforeClosingBrace(e,m)&&!d(t))return null}if(!t.isCheapToTokenize(g.lineNumber))return null;if(1===l.open.length&&r&&"always"!==a){const t=Ir(e.wordSeparators);if(s&&g.column>1&&0===t.get(p.charCodeAt(g.column-2)))return null;if(!s&&g.column>2&&0===t.get(p.charCodeAt(g.column-3)))return null}t.forceTokenization(g.lineNumber);const f=t.getLineTokens(g.lineNumber);let _=!1;try{_=ac.shouldAutoClosePair(l,f,s?g.column:g.column-1)}catch(e){n(e)}if(!_)return null}return c?l.close.substring(0,l.close.length-h.length):l.close}static _runAutoClosingOpenCharType(e,t,i,n,o,s,r){let a=[];for(let e=0,t=n.length;enew $c(new ro(e.positionLineNumber,e.positionColumn,e.positionLineNumber,e.positionColumn+1),"",!1));return new zc(1,e,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}const a=this._getAutoClosingPairClose(t,i,o,r,!1);return null!==a?this._runAutoClosingOpenCharType(e,t,i,o,r,!1,a):null}static typeWithInterceptors(e,t,i,n,o,s,r){if(!e&&"\n"===r){let e=[];for(let t=0,s=o.length;t{const i=e.get(It).getFocusedCodeEditor();return!(!i||!i.hasTextFocus())&&this._runEditorCommand(e,i,t)}),e.addImplementation(1e3,(e,t)=>{const i=document.activeElement;return!!(i&&["input","textarea"].indexOf(i.tagName.toLowerCase())>=0)&&(this.runDOMCommand(),!0)}),e.addImplementation(0,(e,t)=>{const i=e.get(It).getActiveCodeEditor();return!!i&&(i.focus(),this._runEditorCommand(e,i,t))})}_runEditorCommand(e,t,i){return this.runEditorCommand(e,t,i)||!0}}!function(e){class i extends ud{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[td.moveTo(e,e.getPrimaryCursorState(),this._inSelectionMode,t.position,t.viewPosition)]),e.revealPrimaryCursor(t.source,!0)}}e.MoveTo=Xn(new i({id:"_moveTo",inSelectionMode:!1,precondition:void 0})),e.MoveToSelect=Xn(new i({id:"_moveToSelect",inSelectionMode:!0,precondition:void 0}));class n extends ud{runCoreEditorCommand(e,t){e.model.pushStackElement();const i=this._getColumnSelectResult(e,e.getPrimaryCursorState(),e.getCursorColumnSelectData(),t);e.setCursorStates(t.source,3,i.viewStates.map(e=>Vc.fromViewState(e))),e.setCursorColumnSelectData({isReal:!0,fromViewLineNumber:i.fromLineNumber,fromViewVisualColumn:i.fromVisualColumn,toViewLineNumber:i.toLineNumber,toViewVisualColumn:i.toVisualColumn}),i.reversed?e.revealTopMostCursor(t.source):e.revealBottomMostCursor(t.source)}}e.ColumnSelect=Xn(new class extends n{constructor(){super({id:"columnSelect",precondition:void 0})}_getColumnSelectResult(e,t,i,n){const o=e.model.validatePosition(n.position),s=e.coordinatesConverter.validateViewPosition(new Tt(n.viewPosition.lineNumber,n.viewPosition.column),o);return Kc.columnSelect(e.cursorConfig,e,n.doColumnSelect?i.fromViewLineNumber:s.lineNumber,n.doColumnSelect?i.fromViewVisualColumn:n.mouseColumn-1,s.lineNumber,n.mouseColumn-1)}}),e.CursorColumnSelectLeft=Xn(new class extends n{constructor(){super({id:"cursorColumnSelectLeft",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:3599,linux:{primary:0}}})}_getColumnSelectResult(e,t,i,n){return Kc.columnSelectLeft(e.cursorConfig,e,i)}}),e.CursorColumnSelectRight=Xn(new class extends n{constructor(){super({id:"cursorColumnSelectRight",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:3601,linux:{primary:0}}})}_getColumnSelectResult(e,t,i,n){return Kc.columnSelectRight(e.cursorConfig,e,i)}});class o extends n{constructor(e){super(e),this._isPaged=e.isPaged}_getColumnSelectResult(e,t,i,n){return Kc.columnSelectUp(e.cursorConfig,e,i,this._isPaged)}}e.CursorColumnSelectUp=Xn(new o({isPaged:!1,id:"cursorColumnSelectUp",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:3600,linux:{primary:0}}})),e.CursorColumnSelectPageUp=Xn(new o({isPaged:!0,id:"cursorColumnSelectPageUp",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:3595,linux:{primary:0}}}));class s extends n{constructor(e){super(e),this._isPaged=e.isPaged}_getColumnSelectResult(e,t,i,n){return Kc.columnSelectDown(e.cursorConfig,e,i,this._isPaged)}}e.CursorColumnSelectDown=Xn(new s({isPaged:!1,id:"cursorColumnSelectDown",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:3602,linux:{primary:0}}})),e.CursorColumnSelectPageDown=Xn(new s({isPaged:!0,id:"cursorColumnSelectPageDown",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:3596,linux:{primary:0}}}));class r extends ud{constructor(){super({id:"cursorMove",precondition:void 0,description:id.description})}runCoreEditorCommand(e,t){const i=id.parse(t);i&&this._runCursorMove(e,t.source,i)}_runCursorMove(e,t,i){e.model.pushStackElement(),e.setCursorStates(t,3,r._move(e,e.getCursorStates(),i)),e.revealPrimaryCursor(t,!0)}static _move(e,t,i){const n=i.select,o=i.value;switch(i.direction){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:return td.simpleMove(e,t,i.direction,n,o,i.unit);case 11:case 13:case 12:case 14:return td.viewportMove(e,t,i.direction,n,o);default:return null}}}e.CursorMoveImpl=r,e.CursorMove=Xn(new r);class a extends ud{constructor(e){super(e),this._staticArgs=e.args}runCoreEditorCommand(e,t){let i=this._staticArgs;-1===this._staticArgs.value&&(i={direction:this._staticArgs.direction,unit:this._staticArgs.unit,select:this._staticArgs.select,value:e.cursorConfig.pageSize}),e.model.pushStackElement(),e.setCursorStates(t.source,3,td.simpleMove(e,e.getCursorStates(),i.direction,i.select,i.value,i.unit)),e.revealPrimaryCursor(t.source,!0)}}e.CursorLeft=Xn(new a({args:{direction:0,unit:0,select:!1,value:1},id:"cursorLeft",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:15,mac:{primary:15,secondary:[288]}}})),e.CursorLeftSelect=Xn(new a({args:{direction:0,unit:0,select:!0,value:1},id:"cursorLeftSelect",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:1039}})),e.CursorRight=Xn(new a({args:{direction:1,unit:0,select:!1,value:1},id:"cursorRight",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:17,mac:{primary:17,secondary:[292]}}})),e.CursorRightSelect=Xn(new a({args:{direction:1,unit:0,select:!0,value:1},id:"cursorRightSelect",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:1041}})),e.CursorUp=Xn(new a({args:{direction:2,unit:2,select:!1,value:1},id:"cursorUp",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:16,mac:{primary:16,secondary:[302]}}})),e.CursorUpSelect=Xn(new a({args:{direction:2,unit:2,select:!0,value:1},id:"cursorUpSelect",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:1040,secondary:[3088],mac:{primary:1040},linux:{primary:1040}}})),e.CursorPageUp=Xn(new a({args:{direction:2,unit:2,select:!1,value:-1},id:"cursorPageUp",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:11}})),e.CursorPageUpSelect=Xn(new a({args:{direction:2,unit:2,select:!0,value:-1},id:"cursorPageUpSelect",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:1035}})),e.CursorDown=Xn(new a({args:{direction:3,unit:2,select:!1,value:1},id:"cursorDown",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:18,mac:{primary:18,secondary:[300]}}})),e.CursorDownSelect=Xn(new a({args:{direction:3,unit:2,select:!0,value:1},id:"cursorDownSelect",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:1042,secondary:[3090],mac:{primary:1042},linux:{primary:1042}}})),e.CursorPageDown=Xn(new a({args:{direction:3,unit:2,select:!1,value:-1},id:"cursorPageDown",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:12}})),e.CursorPageDownSelect=Xn(new a({args:{direction:3,unit:2,select:!0,value:-1},id:"cursorPageDownSelect",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:1036}})),e.CreateCursor=Xn(new class extends ud{constructor(){super({id:"createCursor",precondition:void 0})}runCoreEditorCommand(e,t){let i;i=t.wholeLine?td.line(e,e.getPrimaryCursorState(),!1,t.position,t.viewPosition):td.moveTo(e,e.getPrimaryCursorState(),!1,t.position,t.viewPosition);const n=e.getCursorStates();if(n.length>1){const o=i.modelState?i.modelState.position:null,s=i.viewState?i.viewState.position:null;for(let i=0,r=n.length;is&&(o=s);const r=new ro(o,1,o,e.model.getLineMaxColumn(o));let a=0;if(i.at)switch(i.at){case pd.RawAtArgument.Top:a=3;break;case pd.RawAtArgument.Center:a=1;break;case pd.RawAtArgument.Bottom:a=4}const l=e.coordinatesConverter.convertModelRangeToViewRange(r);e.revealRange(t.source,!1,l,a,0)}}),e.SelectAll=new class extends fd{constructor(){super(so)}runDOMCommand(){ge&&(document.activeElement.focus(),document.activeElement.select()),document.execCommand("selectAll")}runEditorCommand(e,t,i){const n=t._getViewModel();n&&this.runCoreEditorCommand(n,i)}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates("keyboard",3,[td.selectAll(e,e.getPrimaryCursorState())])}},e.SetSelection=Xn(new class extends ud{constructor(){super({id:"setSelection",precondition:void 0})}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[Vc.fromModelSelection(t.selection)])}})}(md||(md={}));const _d=Ri.and(cd.textInputFocus,cd.columnSelection);function bd(e,t){Hn.registerKeybindingRule({id:e,primary:t,when:_d,weight:dd+1})}function vd(e){return e.register(),e}var Cd;bd(md.CursorColumnSelectLeft.id,1039),bd(md.CursorColumnSelectRight.id,1041),bd(md.CursorColumnSelectUp.id,1040),bd(md.CursorColumnSelectPageUp.id,1035),bd(md.CursorColumnSelectDown.id,1042),bd(md.CursorColumnSelectPageDown.id,1036),function(e){class t extends Gn{runEditorCommand(e,t,i){const n=t._getViewModel();n&&this.runCoreEditingCommand(t,n,i||{})}}e.CoreEditingCommand=t,e.LineBreakInsert=Xn(new class extends t{constructor(){super({id:"lineBreakInsert",precondition:cd.writable,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:0,mac:{primary:301}}})}runCoreEditingCommand(e,t,i){e.pushUndoStop(),e.executeCommands(this.id,ld.lineBreakInsert(t.cursorConfig,t.model,t.getCursorStates().map(e=>e.modelState.selection)))}}),e.Outdent=Xn(new class extends t{constructor(){super({id:"outdent",precondition:cd.writable,kbOpts:{weight:dd,kbExpr:Ri.and(cd.editorTextFocus,cd.tabDoesNotMoveFocus),primary:1026}})}runCoreEditingCommand(e,t,i){e.pushUndoStop(),e.executeCommands(this.id,ld.outdent(t.cursorConfig,t.model,t.getCursorStates().map(e=>e.modelState.selection))),e.pushUndoStop()}}),e.Tab=Xn(new class extends t{constructor(){super({id:"tab",precondition:cd.writable,kbOpts:{weight:dd,kbExpr:Ri.and(cd.editorTextFocus,cd.tabDoesNotMoveFocus),primary:2}})}runCoreEditingCommand(e,t,i){e.pushUndoStop(),e.executeCommands(this.id,ld.tab(t)),e.pushUndoStop()}}),e.DeleteLeft=Xn(new class extends t{constructor(){super({id:"deleteLeft",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:1,secondary:[1025],mac:{primary:1,secondary:[1025,294,257]}}})}runCoreEditingCommand(e,t,i){const[n,o]=Jc.deleteLeft(t.getPrevEditOperationType(),t.cursorConfig,t.model,t.getCursorStates().map(e=>e.modelState.selection));n&&e.pushUndoStop(),e.executeCommands(this.id,o),t.setPrevEditOperationType(2)}}),e.DeleteRight=Xn(new class extends t{constructor(){super({id:"deleteRight",precondition:void 0,kbOpts:{weight:dd,kbExpr:cd.textInputFocus,primary:20,mac:{primary:20,secondary:[290,276]}}})}runCoreEditingCommand(e,t,i){const[n,o]=Jc.deleteRight(t.getPrevEditOperationType(),t.cursorConfig,t.model,t.getCursorStates().map(e=>e.modelState.selection));n&&e.pushUndoStop(),e.executeCommands(this.id,o),t.setPrevEditOperationType(3)}}),e.Undo=new class extends fd{constructor(){super(no)}runDOMCommand(){document.execCommand("undo")}runEditorCommand(e,t,i){if(t.hasModel()&&!0!==t.getOption(77))return t.getModel().undo()}},e.Redo=new class extends fd{constructor(){super(oo)}runDOMCommand(){document.execCommand("redo")}runEditorCommand(e,t,i){if(t.hasModel()&&!0!==t.getOption(77))return t.getModel().redo()}}}(Cd||(Cd={}));class wd extends $n{constructor(e,t,i){super({id:e,precondition:void 0,description:i}),this._handlerId=t}runCommand(e,t){const i=e.get(It).getFocusedCodeEditor();i&&i.trigger("keyboard",this._handlerId,t)}}function yd(e,t){vd(new wd("default:"+e,e)),vd(new wd(e,e,t))}yd("type",{description:"Type",args:[{name:"args",schema:{type:"object",required:["text"],properties:{text:{type:"string"}}}}]}),yd("replacePreviousChar"),yd("compositionType"),yd("compositionStart"),yd("compositionEnd"),yd("paste"),yd("cut");const Sd=kt("markerDecorationsService");let Ld=class{constructor(e,t){}dispose(){}};var Dd;Ld.ID="editor.contrib.markerDecorations",Jn((Ld=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([(1,Dd=Sd,function(e,t){Dd(e,t,1)})],Ld)).ID,Ld);const Ed=(e,t,i)=>{const n=e=>o.fire(e),o=new oe({onFirstListenerAdd:()=>{e.addEventListener(t,n,i)},onLastListenerRemove:()=>{e.removeEventListener(t,n,i)}});return o.event};function xd(e){return e.preventDefault(),e.stopPropagation(),e}function kd(e){return ie.map(e,xd)}let Nd=new Array(230),Id=new Array(112);!function(){for(let e=0;eK||ye?0:navigator.keyboard||fe?1:2)(),touch:"ontouchstart"in window||navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0,pointerEvents:window.PointerEvent&&("ontouchstart"in window||window.navigator.maxTouchPoints>0||navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0)};function Ud(e){for(;e.firstChild;)e.firstChild.remove()}function Kd(e){var t;return null!==(t=null==e?void 0:e.isConnected)&&void 0!==t&&t}class $d{constructor(e,t,i,n){this._node=e,this._type=t,this._handler=i,this._options=n||!1,this._node.addEventListener(this._type,this._handler,this._options)}dispose(){this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function jd(e,t,i,n){return new $d(e,t,i,n)}function qd(e){return function(t){return e(new Vd(t))}}let Gd=function e(t,i,n,o){let s=n;return"click"===i||"mousedown"===i?s=qd(n):"keydown"!==i&&"keypress"!==i&&"keyup"!==i||(s=function r(e){return function(t){return e(new Rd(t))}}(n)),jd(t,i,s,o)};function Yd(e,t,i){return jd(e,j&&Hd.pointerEvents?Nu.POINTER_DOWN:Nu.MOUSE_DOWN,t,i)}function Zd(e,t,i){return jd(e,j&&Hd.pointerEvents?Nu.POINTER_UP:Nu.MOUSE_UP,t,i)}function Xd(e,t){return jd(e,"mouseout",i=>{let n=i.relatedTarget;for(;n&&n!==e;)n=n.parentNode;n!==e&&t(i)})}let Qd,Jd,eu=null;class tu{constructor(e,t=0){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){n(e)}}static sort(e,t){return t.priority-e.priority}}!function(){let e=[],t=null,i=!1,n=!1,o=()=>{for(i=!1,t=e,e=[],n=!0;t.length>0;)t.sort(tu.sort),t.shift().execute();n=!1};Jd=(t,n=0)=>{let s=new tu(t,n);return e.push(s),i||(i=!0,function r(e){if(!eu){const e=e=>setTimeout(()=>e((new Date).getTime()),0);eu=self.requestAnimationFrame||self.msRequestAnimationFrame||self.webkitRequestAnimationFrame||self.mozRequestAnimationFrame||self.oRequestAnimationFrame||e}eu.call(self,e)}(o)),s},Qd=(e,i)=>{if(n){let n=new tu(e,i);return t.push(n),n}return Jd(e,i)}}();const iu=8,nu=function(e,t){return t};class ou extends C{constructor(e,t,i,n=nu,o=iu){super();let s=null,r=0,a=this._register(new Ua),l=()=>{r=(new Date).getTime(),i(s),s=null};this._register(jd(e,t,e=>{s=n(s,e);let t=(new Date).getTime()-r;t>=o?(a.cancel(),l()):a.setIfNotSet(l,o-t)}))}}function su(e,t,i,n,o){return new ou(e,t,i,n,o)}function ru(e){return document.defaultView.getComputedStyle(e,null)}function au(e){if(e!==document.body)return new hu(e.clientWidth,e.clientHeight);if(j&&window.visualViewport){const e=window.visualViewport.width,t=window.visualViewport.height-(ye?24:0);return new hu(e,t)}if(window.innerWidth&&window.innerHeight)return new hu(window.innerWidth,window.innerHeight);if(document.body&&document.body.clientWidth&&document.body.clientHeight)return new hu(document.body.clientWidth,document.body.clientHeight);if(document.documentElement&&document.documentElement.clientWidth&&document.documentElement.clientHeight)return new hu(document.documentElement.clientWidth,document.documentElement.clientHeight);throw new Error("Unable to figure out browser width and height")}class lu{static convertToPixels(e,t){return parseFloat(t)||0}static getDimension(e,t,i){let n=ru(e),o="0";return n&&(o=n.getPropertyValue?n.getPropertyValue(t):n.getAttribute(i)),lu.convertToPixels(e,o)}static getBorderLeftWidth(e){return lu.getDimension(e,"border-left-width","borderLeftWidth")}static getBorderRightWidth(e){return lu.getDimension(e,"border-right-width","borderRightWidth")}static getBorderTopWidth(e){return lu.getDimension(e,"border-top-width","borderTopWidth")}static getBorderBottomWidth(e){return lu.getDimension(e,"border-bottom-width","borderBottomWidth")}static getPaddingLeft(e){return lu.getDimension(e,"padding-left","paddingLeft")}static getPaddingRight(e){return lu.getDimension(e,"padding-right","paddingRight")}static getPaddingTop(e){return lu.getDimension(e,"padding-top","paddingTop")}static getPaddingBottom(e){return lu.getDimension(e,"padding-bottom","paddingBottom")}static getMarginLeft(e){return lu.getDimension(e,"margin-left","marginLeft")}static getMarginTop(e){return lu.getDimension(e,"margin-top","marginTop")}static getMarginRight(e){return lu.getDimension(e,"margin-right","marginRight")}static getMarginBottom(e){return lu.getDimension(e,"margin-bottom","marginBottom")}}class hu{constructor(e,t){this.width=e,this.height=t}with(e=this.width,t=this.height){return e!==this.width||t!==this.height?new hu(e,t):this}static is(e){return"object"==typeof e&&"number"==typeof e.height&&"number"==typeof e.width}static lift(e){return e instanceof hu?e:new hu(e.width,e.height)}static equals(e,t){return e===t||!(!e||!t)&&e.width===t.width&&e.height===t.height}}function cu(e){let t=e.getBoundingClientRect();return{left:t.left+du.scrollX,top:t.top+du.scrollY,width:t.width,height:t.height}}const du=new class{get scrollX(){return"number"==typeof window.scrollX?window.scrollX:document.body.scrollLeft+document.documentElement.scrollLeft}get scrollY(){return"number"==typeof window.scrollY?window.scrollY:document.body.scrollTop+document.documentElement.scrollTop}};function uu(e){let t=lu.getMarginLeft(e)+lu.getMarginRight(e);return e.offsetWidth+t}function gu(e){let t=lu.getBorderLeftWidth(e)+lu.getBorderRightWidth(e),i=lu.getPaddingLeft(e)+lu.getPaddingRight(e);return e.offsetWidth-t-i}function pu(e){let t=lu.getBorderTopWidth(e)+lu.getBorderBottomWidth(e),i=lu.getPaddingTop(e)+lu.getPaddingBottom(e);return e.offsetHeight-t-i}function mu(e){let t=lu.getMarginTop(e)+lu.getMarginBottom(e);return e.offsetHeight+t}function fu(e,t){for(;e;){if(e===t)return!0;e=e.parentNode}return!1}function _u(e,t,i){for(;e&&e.nodeType===e.ELEMENT_NODE;){if(e.classList.contains(t))return e;if(i)if("string"==typeof i){if(e.classList.contains(i))return null}else if(e===i)return null;e=e.parentNode}return null}function bu(e,t,i){return!!_u(e,t,i)}function vu(e){return e&&!!e.host&&!!e.mode}function Cu(e){return!!wu(e)}function wu(e){for(;e.parentNode;){if(e===document.body)return null;e=e.parentNode}return vu(e)?e:null}function yu(){let e=document.activeElement;for(;null==e?void 0:e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function Su(e=document.getElementsByTagName("head")[0]){let t=document.createElement("style");return t.type="text/css",t.media="screen",e.appendChild(t),t}let Lu=null;function Du(){return Lu||(Lu=Su()),Lu}function Eu(e,t,i=Du()){i&&t&&i.sheet.insertRule(e+"{"+t+"}",0)}function xu(e,t=Du()){if(!t)return;let i=function n(e){var t,i;return(null===(t=null==e?void 0:e.sheet)||void 0===t?void 0:t.rules)?e.sheet.rules:(null===(i=null==e?void 0:e.sheet)||void 0===i?void 0:i.cssRules)?e.sheet.cssRules:[]}(t),o=[];for(let t=0;t=0;e--)t.sheet.deleteRule(o[e])}function ku(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&1===e.nodeType&&"string"==typeof e.nodeName}const Nu={CLICK:"click",AUXCLICK:"auxclick",DBLCLICK:"dblclick",MOUSE_UP:"mouseup",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_MOVE:"mousemove",MOUSE_OUT:"mouseout",MOUSE_ENTER:"mouseenter",MOUSE_LEAVE:"mouseleave",MOUSE_WHEEL:"wheel",POINTER_UP:"pointerup",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",CONTEXT_MENU:"contextmenu",WHEEL:"wheel",KEY_DOWN:"keydown",KEY_PRESS:"keypress",KEY_UP:"keyup",LOAD:"load",BEFORE_UNLOAD:"beforeunload",UNLOAD:"unload",ABORT:"abort",ERROR:"error",RESIZE:"resize",SCROLL:"scroll",FULLSCREEN_CHANGE:"fullscreenchange",WK_FULLSCREEN_CHANGE:"webkitfullscreenchange",SELECT:"select",CHANGE:"change",SUBMIT:"submit",RESET:"reset",FOCUS:"focus",FOCUS_IN:"focusin",FOCUS_OUT:"focusout",BLUR:"blur",INPUT:"input",STORAGE:"storage",DRAG_START:"dragstart",DRAG:"drag",DRAG_ENTER:"dragenter",DRAG_LEAVE:"dragleave",DRAG_OVER:"dragover",DROP:"drop",DRAG_END:"dragend",ANIMATION_START:pe?"webkitAnimationStart":"animationstart",ANIMATION_END:pe?"webkitAnimationEnd":"animationend",ANIMATION_ITERATION:pe?"webkitAnimationIteration":"animationiteration"},Iu={stop:function(e,t){e.preventDefault?e.preventDefault():e.returnValue=!1,t&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)}};class Tu extends C{constructor(e){super(),this._onDidFocus=this._register(new oe),this.onDidFocus=this._onDidFocus.event,this._onDidBlur=this._register(new oe),this.onDidBlur=this._onDidBlur.event;let t=fu(document.activeElement,e),i=!1;const n=()=>{i=!1,t||(t=!0,this._onDidFocus.fire())},o=()=>{t&&(i=!0,window.setTimeout(()=>{i&&(i=!1,t=!1,this._onDidBlur.fire())},0))};this._refreshStateHandler=()=>{fu(document.activeElement,e)!==t&&(t?o():n())},this._register(Ed(e,Nu.FOCUS,!0)(n)),this._register(Ed(e,Nu.BLUR,!0)(o))}}function Au(e){return new Tu(e)}function Mu(e,...t){if(e.append(...t),1===t.length&&"string"!=typeof t[0])return t[0]}function Ou(e,...t){e.innerText="",Mu(e,...t)}const Ru=/([\w\-]+)?(#([\w\-]+))?((\.([\w\-]+))*)/;var Pu;function Fu(e,t,i,...n){let o=Ru.exec(t);if(!o)throw new Error("Bad use of emmet");i=Object.assign({},i||{});let s,r=o[1]||"div";return s=e!==Pu.HTML?document.createElementNS(e,r):document.createElement(r),o[3]&&(s.id=o[3]),o[4]&&(s.className=o[4].replace(/\./g," ").trim()),Object.keys(i).forEach(e=>{const t=i[e];void 0!==t&&(/^on\w+$/.test(e)?s[e]=t:"selected"===e?t&&s.setAttribute(e,"true"):s.setAttribute(e,t))}),s.append(...n),s}function Bu(e,t,...i){return Fu(Pu.HTML,e,t,...i)}function Wu(...e){for(let t of e)t.style.display="",t.removeAttribute("aria-hidden")}function Vu(...e){for(let t of e)t.style.display="none",t.setAttribute("aria-hidden","true")}function zu(e){return Array.prototype.slice.call(document.getElementsByTagName(e),0)}function Hu(e){const t=window.devicePixelRatio*e;return Math.max(1,Math.floor(t))/window.devicePixelRatio}function Uu(e){if(Ce||ve)window.open(e);else{let t=window.open();t&&(t.opener=null,t.location.href=e)}}function Ku(e){return e?`url('${ys.asBrowserUri(e).toString(!0).replace(/'/g,"%27")}')`:"url('')"}function $u(e){return`'${e.replace(/'/g,"%27")}'`}!function(e){e.HTML="http://www.w3.org/1999/xhtml",e.SVG="http://www.w3.org/2000/svg"}(Pu||(Pu={})),Bu.SVG=function(e,t,...i){return Fu(Pu.SVG,e,t,...i)},ws.setPreferredWebSchema(/^https:/.test(window.location.href)?"https":"http");class ju extends oe{constructor(){super(),this._subscriptions=new v,this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1},this._subscriptions.add(Ed(window,"keydown",!0)(e=>{const t=new Rd(e);if(6!==t.keyCode||!e.repeat){if(e.altKey&&!this._keyStatus.altKey)this._keyStatus.lastKeyPressed="alt";else if(e.ctrlKey&&!this._keyStatus.ctrlKey)this._keyStatus.lastKeyPressed="ctrl";else if(e.metaKey&&!this._keyStatus.metaKey)this._keyStatus.lastKeyPressed="meta";else if(e.shiftKey&&!this._keyStatus.shiftKey)this._keyStatus.lastKeyPressed="shift";else{if(6===t.keyCode)return;this._keyStatus.lastKeyPressed=void 0}this._keyStatus.altKey=e.altKey,this._keyStatus.ctrlKey=e.ctrlKey,this._keyStatus.metaKey=e.metaKey,this._keyStatus.shiftKey=e.shiftKey,this._keyStatus.lastKeyPressed&&(this._keyStatus.event=e,this.fire(this._keyStatus))}})),this._subscriptions.add(Ed(window,"keyup",!0)(e=>{this._keyStatus.lastKeyReleased=!e.altKey&&this._keyStatus.altKey?"alt":!e.ctrlKey&&this._keyStatus.ctrlKey?"ctrl":!e.metaKey&&this._keyStatus.metaKey?"meta":!e.shiftKey&&this._keyStatus.shiftKey?"shift":void 0,this._keyStatus.lastKeyPressed!==this._keyStatus.lastKeyReleased&&(this._keyStatus.lastKeyPressed=void 0),this._keyStatus.altKey=e.altKey,this._keyStatus.ctrlKey=e.ctrlKey,this._keyStatus.metaKey=e.metaKey,this._keyStatus.shiftKey=e.shiftKey,this._keyStatus.lastKeyReleased&&(this._keyStatus.event=e,this.fire(this._keyStatus))})),this._subscriptions.add(Ed(document.body,"mousedown",!0)(e=>{this._keyStatus.lastKeyPressed=void 0})),this._subscriptions.add(Ed(document.body,"mouseup",!0)(e=>{this._keyStatus.lastKeyPressed=void 0})),this._subscriptions.add(Ed(document.body,"mousemove",!0)(e=>{e.buttons&&(this._keyStatus.lastKeyPressed=void 0)})),this._subscriptions.add(Ed(window,"blur")(e=>{this.resetKeyStatus()}))}get keyStatus(){return this._keyStatus}resetKeyStatus(){this.doResetKeyStatus(),this.fire(this._keyStatus)}doResetKeyStatus(){this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1}}static getInstance(){return ju.instance||(ju.instance=new ju),ju.instance}dispose(){super.dispose(),this._subscriptions.dispose()}}class qu{constructor(e,t){this.chr=e,this.type=t,this.width=0}fulfill(e){this.width=e}}class Gu{constructor(e,t){this._bareFontInfo=e,this._requests=t,this._container=null,this._testElements=null}read(){this._createDomElements(),document.body.appendChild(this._container),this._readFromDomElements(),document.body.removeChild(this._container),this._container=null,this._testElements=null}_createDomElements(){const e=document.createElement("div");e.style.position="absolute",e.style.top="-50000px",e.style.width="50000px";const t=document.createElement("div");t.style.fontFamily=this._bareFontInfo.getMassagedFontFamily(),t.style.fontWeight=this._bareFontInfo.fontWeight,t.style.fontSize=this._bareFontInfo.fontSize+"px",t.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,t.style.lineHeight=this._bareFontInfo.lineHeight+"px",t.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",e.appendChild(t);const i=document.createElement("div");i.style.fontFamily=this._bareFontInfo.getMassagedFontFamily(),i.style.fontWeight="bold",i.style.fontSize=this._bareFontInfo.fontSize+"px",i.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,i.style.lineHeight=this._bareFontInfo.lineHeight+"px",i.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",e.appendChild(i);const n=document.createElement("div");n.style.fontFamily=this._bareFontInfo.getMassagedFontFamily(),n.style.fontWeight=this._bareFontInfo.fontWeight,n.style.fontSize=this._bareFontInfo.fontSize+"px",n.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,n.style.lineHeight=this._bareFontInfo.lineHeight+"px",n.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",n.style.fontStyle="italic",e.appendChild(n);const o=[];for(const e of this._requests){let s;0===e.type&&(s=t),2===e.type&&(s=i),1===e.type&&(s=n),s.appendChild(document.createElement("br"));const r=document.createElement("span");Gu._render(r,e),s.appendChild(r),o.push(r)}this._container=e,this._testElements=o}static _render(e,t){if(" "===t.chr){let t=" ";for(let e=0;e<8;e++)t+=t;e.innerText=t}else{let i=t.chr;for(let e=0;e<8;e++)i+=i;e.textContent=i}}_readFromDomElements(){for(let e=0,t=this._requests.length;e{e&&e[0]&&e[0].contentRect?this.observe({width:e[0].contentRect.width,height:e[0].contentRect.height}):this.observe()}),this.resizeObserver.observe(this.referenceDomElement)):-1===this.measureReferenceDomElementToken&&(this.measureReferenceDomElementToken=setInterval(()=>this.observe(),100))}stopObserving(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),-1!==this.measureReferenceDomElementToken&&(clearInterval(this.measureReferenceDomElementToken),this.measureReferenceDomElementToken=-1)}observe(e){this.measureReferenceDomElement(!0,e)}measureReferenceDomElement(e,t){let i=0,n=0;t?(i=t.width,n=t.height):this.referenceDomElement&&(i=this.referenceDomElement.clientWidth,n=this.referenceDomElement.clientHeight),i=Math.max(5,i),n=Math.max(5,n),this.width===i&&this.height===n||(this.width=i,this.height=n,e&&this.changeCallback())}}function Zu(e){if(!e||"object"!=typeof e)return e;if(e instanceof RegExp)return e;const t=Array.isArray(e)?[]:{};return Object.keys(e).forEach(i=>{t[i]=e[i]&&"object"==typeof e[i]?Zu(e[i]):e[i]}),t}const Xu=Object.prototype.hasOwnProperty;function Qu(e,t,i=!0){return Le(e)?(Le(t)&&Object.keys(t).forEach(n=>{n in e?i&&(Le(e[n])&&Le(t[n])?Qu(e[n],t[n],i):e[n]=t[n]):e[n]=t[n]}),e):t}function Ju(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(typeof e!=typeof t)return!1;if("object"!=typeof e)return!1;if(Array.isArray(e)!==Array.isArray(t))return!1;let i,n;if(Array.isArray(e)){if(e.length!==t.length)return!1;for(i=0;i0&&"#"===e.charAt(e.length-1)?e.substring(0,e.length-1):e}(e)]=t,this._onDidChangeSchema.fire(e)}notifySchemaChanged(e){this._onDidChangeSchema.fire(e)}};an.add("base.contributions.json",ag);const lg={Configuration:"base.contributions.configuration"},hg=an.as("base.contributions.json"),cg=new RegExp("\\[.*\\]$");function dg(e){return e.substring(1,e.length-1)}const ug=new class{constructor(){this.overrideIdentifiers=new Set,this._onDidSchemaChange=new oe,this._onDidUpdateConfiguration=new oe,this.defaultValues={},this.defaultLanguageConfigurationOverridesNode={id:"defaultOverrides",title:t(0,"Default Language Configuration Overrides"),properties:{}},this.configurationContributors=[this.defaultLanguageConfigurationOverridesNode],this.resourceLanguageSettingsSchema={properties:{},patternProperties:{},additionalProperties:!1,errorMessage:"Unknown editor configuration setting",allowTrailingCommas:!0,allowComments:!0},this.configurationProperties={},this.excludedConfigurationProperties={},hg.registerSchema("vscode://schemas/settings/resourceLanguage",this.resourceLanguageSettingsSchema)}registerConfiguration(e,t=!0){this.registerConfigurations([e],t)}registerConfigurations(e,t=!0){const i=[];e.forEach(e=>{i.push(...this.validateAndRegisterProperties(e,t)),this.configurationContributors.push(e),this.registerJSONConfiguration(e)}),hg.registerSchema("vscode://schemas/settings/resourceLanguage",this.resourceLanguageSettingsSchema),this._onDidSchemaChange.fire(),this._onDidUpdateConfiguration.fire(i)}registerOverrideIdentifiers(e){for(const t of e)this.overrideIdentifiers.add(t);this.updateOverridePropertyPatternKey()}validateAndRegisterProperties(e,t=!0,i=3){i=ke(e.scope)?i:e.scope;let n=[],o=e.properties;if(o)for(let e in o){if(t&&gg(e)){delete o[e];continue}const s=o[e];this.updatePropertyDefaultValue(e,s),s.scope=cg.test(e)?void 0:ke(s.scope)?i:s.scope,!o[e].hasOwnProperty("included")||o[e].included?(this.configurationProperties[e]=o[e],!o[e].deprecationMessage&&o[e].markdownDeprecationMessage&&(o[e].deprecationMessage=o[e].markdownDeprecationMessage),n.push(e)):(this.excludedConfigurationProperties[e]=o[e],delete o[e])}let s=e.allOf;if(s)for(let e of s)n.push(...this.validateAndRegisterProperties(e,t,i));return n}getConfigurationProperties(){return this.configurationProperties}registerJSONConfiguration(e){const t=e=>{let i=e.properties;if(i)for(const e in i)this.updateSchema(e,i[e]);let n=e.allOf;n&&n.forEach(t)};t(e)}updateSchema(e,t){switch(t.scope){case 1:case 2:case 6:case 3:case 4:break;case 5:this.resourceLanguageSettingsSchema.properties[e]=t}}updateOverridePropertyPatternKey(){for(const e of this.overrideIdentifiers.values()){const i=`[${e}]`,n={type:"object",description:t(0,"Configure editor settings to be overridden for a language."),errorMessage:t(0,"This setting does not support per-language configuration."),$ref:"vscode://schemas/settings/resourceLanguage"};this.updatePropertyDefaultValue(i,n)}this._onDidSchemaChange.fire()}updatePropertyDefaultValue(e,t){let i=this.defaultValues[e];xe(i)&&(i=t.default),xe(i)&&(i=function n(e){switch(Array.isArray(e)?e[0]:e){case"boolean":return!1;case"integer":case"number":return 0;case"string":return"";case"array":return[];case"object":return{};default:return null}}(t.type)),t.default=i}};function gg(e){return e.trim()?cg.test(e)?t(0,"Cannot register '{0}'. This matches property pattern '\\\\[.*\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.",e):void 0!==ug.getConfigurationProperties()[e]?t(0,"Cannot register '{0}'. This property is already registered.",e):null:t(0,"Cannot register an empty property")}an.add(lg.Configuration,ug);const pg=Object.prototype.hasOwnProperty;class mg{constructor(){this.map=new Map}add(e,t){let i=this.map.get(e);i||(i=new Set,this.map.set(e,i)),i.add(t)}delete(e,t){const i=this.map.get(e);i&&(i.delete(t),0===i.size&&this.map.delete(e))}forEach(e,t){const i=this.map.get(e);i&&i.forEach(t)}}const fg=new class{constructor(){this._tabFocus=!1,this._onDidChangeTabFocus=new oe,this.onDidChangeTabFocus=this._onDidChangeTabFocus.event}getTabFocusMode(){return this._tabFocus}setTabFocusMode(e){this._tabFocus!==e&&(this._tabFocus=e,this._onDidChangeTabFocus.fire(this._tabFocus))}},_g=Object.hasOwnProperty;class bg{constructor(){this._values=[]}_read(e){return this._values[e]}get(e){return this._values[e]}_write(e,t){this._values[e]=t}}class vg{constructor(){this._values=[]}_read(e){return this._values[e]}_write(e,t){this._values[e]=t}}class Cg{static readOptions(e){const t=e,i=new vg;for(const e of Fo)i._write(e.id,"_never_"===e.name?void 0:t[e.name]);return i}static validateOptions(e){const t=new _o;for(const i of Fo)t._write(i.id,i.validate(e._read(i.id)));return t}static computeOptions(e,t){const i=new bg;for(const n of Fo)i._write(n.id,n.compute(t,i,e._read(n.id)));return i}static _deepEquals(e,t){if("object"!=typeof e||"object"!=typeof t)return e===t;if(Array.isArray(e)||Array.isArray(t))return!(!Array.isArray(e)||!Array.isArray(t))&&Zr(e,t);for(let i in e)if(!Cg._deepEquals(e[i],t[i]))return!1;return!0}static checkEquals(e,t){const i=[];let n=!1;for(const o of Fo){const s=!Cg._deepEquals(e._read(o.id),t._read(o.id));i[o.id]=s,s&&(n=!0)}return n?new fo(i):null}}function wg(e){const t=Zu(e);return function i(e){const t=e.wordWrap;!0===t?e.wordWrap="on":!1===t&&(e.wordWrap="off");const i=e.lineNumbers;!0===i?e.lineNumbers="on":!1===i&&(e.lineNumbers="off"),!1===e.autoClosingBrackets&&(e.autoClosingBrackets="never",e.autoClosingQuotes="never",e.autoSurround="never"),"visible"===e.cursorBlinking&&(e.cursorBlinking="solid");const n=e.renderWhitespace;!0===n?e.renderWhitespace="boundary":!1===n&&(e.renderWhitespace="none");const o=e.renderLineHighlight;!0===o?e.renderLineHighlight="line":!1===o&&(e.renderLineHighlight="none");const s=e.acceptSuggestionOnEnter;!0===s?e.acceptSuggestionOnEnter="on":!1===s&&(e.acceptSuggestionOnEnter="off");const r=e.tabCompletion;!1===r?e.tabCompletion="off":!0===r&&(e.tabCompletion="onlySnippets");const a=e.suggest;a&&"object"==typeof a.filteredTypes&&a.filteredTypes&&function l(e,t){for(let i in e)if(pg.call(e,i)&&!1===t({key:i,value:e[i]},(function(){delete e[i]})))return}({method:"showMethods",function:"showFunctions",constructor:"showConstructors",field:"showFields",variable:"showVariables",class:"showClasses",struct:"showStructs",interface:"showInterfaces",module:"showModules",property:"showProperties",event:"showEvents",operator:"showOperators",unit:"showUnits",value:"showValues",constant:"showConstants",enum:"showEnums",enumMember:"showEnumMembers",keyword:"showKeywords",text:"showWords",color:"showColors",file:"showFiles",reference:"showReferences",folder:"showFolders",typeParameter:"showTypeParameters",snippet:"showSnippets"},e=>{const t=a.filteredTypes[e.key];!1===t&&(a[e.value]=t)});const h=e.hover;!0===h?e.hover={enabled:!0}:!1===h&&(e.hover={enabled:!1});const c=e.parameterHints;!0===c?e.parameterHints={enabled:!0}:!1===c&&(e.parameterHints={enabled:!1});const d=e.autoIndent;!0===d?e.autoIndent="full":!1===d&&(e.autoIndent="advanced");const u=e.matchBrackets;!0===u?e.matchBrackets="always":!1===u&&(e.matchBrackets="never")}(t),t}class yg extends C{constructor(e,t){super(),this._onDidChange=this._register(new oe),this.onDidChange=this._onDidChange.event,this._onDidChangeFast=this._register(new oe),this.onDidChangeFast=this._onDidChangeFast.event,this.isSimpleWidget=e,this._isDominatedByLongLines=!1,this._computeOptionsMemory=new bo,this._viewLineCount=1,this._lineNumbersDigitCount=1,this._rawOptions=wg(t),this._readOptions=Cg.readOptions(this._rawOptions),this._validatedOptions=Cg.validateOptions(this._readOptions),this._register(tg.onDidChangeZoomLevel(e=>this._recomputeOptions())),this._register(fg.onDidChangeTabFocus(e=>this._recomputeOptions()))}observeReferenceElement(e){}updatePixelRatio(){}_recomputeOptions(){const e=this.options,t=this._computeInternalOptions();if(e){const i=Cg.checkEquals(e,t);if(null===i)return;this.options=t,this._onDidChangeFast.fire(i),this._onDidChange.fire(i)}else this.options=t}getRawOptions(){return this._rawOptions}_computeInternalOptions(){const e=this._getEnvConfiguration(),t=og.createFromValidatedSettings(this._validatedOptions,e.zoomLevel,e.pixelRatio,this.isSimpleWidget),i={memory:this._computeOptionsMemory,outerWidth:e.outerWidth,outerHeight:e.outerHeight,fontInfo:this.readConfiguration(t),extraEditorClassName:e.extraEditorClassName,isDominatedByLongLines:this._isDominatedByLongLines,viewLineCount:this._viewLineCount,lineNumbersDigitCount:this._lineNumbersDigitCount,emptySelectionClipboard:e.emptySelectionClipboard,pixelRatio:e.pixelRatio,tabFocusMode:fg.getTabFocusMode(),accessibilitySupport:e.accessibilitySupport};return Cg.computeOptions(this._validatedOptions,i)}static _subsetEquals(e,t){for(const i in t)if(_g.call(t,i)){const n=t[i],o=e[i];if(o===n)continue;if(Array.isArray(o)&&Array.isArray(n)){if(!Zr(o,n))return!1;continue}if(o&&"object"==typeof o&&n&&"object"==typeof n){if(!this._subsetEquals(o,n))return!1;continue}return!1}return!0}updateOptions(e){if(void 0===e)return;const t=wg(e);yg._subsetEquals(this._rawOptions,t)||(this._rawOptions=Qu(this._rawOptions,t||{}),this._readOptions=Cg.readOptions(this._rawOptions),this._validatedOptions=Cg.validateOptions(this._readOptions),this._recomputeOptions())}setIsDominatedByLongLines(e){this._isDominatedByLongLines=e,this._recomputeOptions()}setMaxLineNumber(e){const t=yg._digitCount(e);this._lineNumbersDigitCount!==t&&(this._lineNumbersDigitCount=t,this._recomputeOptions())}setViewLineCount(e){this._viewLineCount!==e&&(this._viewLineCount=e,this._recomputeOptions())}static _digitCount(e){let t=0;for(;e;)e=Math.floor(e/10),t++;return t||1}}const Sg=Object.freeze({id:"editor",order:5,type:"object",title:t(0,"Editor"),scope:5}),Lg=an.as(lg.Configuration),Dg=Object.assign(Object.assign({},Sg),{properties:{"editor.tabSize":{type:"number",default:4,minimum:1,markdownDescription:t(0,"The number of spaces a tab is equal to. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.")},"editor.insertSpaces":{type:"boolean",default:!0,markdownDescription:t(0,"Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.")},"editor.detectIndentation":{type:"boolean",default:!0,markdownDescription:t(0,"Controls whether `#editor.tabSize#` and `#editor.insertSpaces#` will be automatically detected when a file is opened based on the file contents.")},"editor.trimAutoWhitespace":{type:"boolean",default:!0,description:t(0,"Remove trailing auto inserted whitespace.")},"editor.largeFileOptimizations":{type:"boolean",default:!0,description:t(0,"Special handling for large files to disable certain memory intensive features.")},"editor.wordBasedSuggestions":{type:"boolean",default:!0,description:t(0,"Controls whether completions should be computed based on words in the document.")},"editor.wordBasedSuggestionsMode":{enum:["currentDocument","matchingDocuments","allDocuments"],default:"matchingDocuments",enumDescriptions:[t(0,"Only suggest words from the active document."),t(0,"Suggest words from all open documents of the same language."),t(0,"Suggest words from all open documents.")],description:t(0,"Controls from what documents word based completions are computed.")},"editor.semanticHighlighting.enabled":{enum:[!0,!1,"configuredByTheme"],enumDescriptions:[t(0,"Semantic highlighting enabled for all color themes."),t(0,"Semantic highlighting disabled for all color themes."),t(0,"Semantic highlighting is configured by the current color theme's `semanticHighlighting` setting.")],default:"configuredByTheme",description:t(0,"Controls whether the semanticHighlighting is shown for the languages that support it.")},"editor.stablePeek":{type:"boolean",default:!1,markdownDescription:t(0,"Keep peek editors open even when double clicking their content or when hitting `Escape`.")},"editor.maxTokenizationLineLength":{type:"integer",default:2e4,description:t(0,"Lines above this length will not be tokenized for performance reasons")},"diffEditor.maxComputationTime":{type:"number",default:5e3,description:t(0,"Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.")},"diffEditor.renderSideBySide":{type:"boolean",default:!0,description:t(0,"Controls whether the diff editor shows the diff side by side or inline.")},"diffEditor.ignoreTrimWhitespace":{type:"boolean",default:!0,description:t(0,"When enabled, the diff editor ignores changes in leading or trailing whitespace.")},"diffEditor.renderIndicators":{type:"boolean",default:!0,description:t(0,"Controls whether the diff editor shows +/- indicators for added/removed changes.")},"diffEditor.codeLens":{type:"boolean",default:!1,description:t(0,"Controls whether the editor shows CodeLens.")},"diffEditor.wordWrap":{type:"string",enum:["off","on","inherit"],default:"inherit",markdownEnumDescriptions:[t(0,"Lines will never wrap."),t(0,"Lines will wrap at the viewport width."),t(0,"Lines will wrap according to the `#editor.wordWrap#` setting.")]}}});for(const e of Fo){const t=e.schema;if(void 0!==t)if(void 0!==(Eg=t).type||void 0!==Eg.anyOf)Dg.properties[`editor.${e.name}`]=t;else for(let e in t)_g.call(t,e)&&(Dg.properties[e]=t[e])}var Eg;let xg=null;function kg(){return null===xg&&(xg=Object.create(null),Object.keys(Dg.properties).forEach(e=>{xg[e]=!0})),xg}Lg.registerConfiguration(Dg);class Ng{constructor(){this._keys=Object.create(null),this._values=Object.create(null)}has(e){const t=e.getId();return!!this._values[t]}get(e){const t=e.getId();return this._values[t]}put(e,t){const i=e.getId();this._keys[i]=e,this._values[i]=t}remove(e){const t=e.getId();delete this._keys[t],delete this._values[t]}getValues(){return Object.keys(this._keys).map(e=>this._values[e])}}class Ig extends C{constructor(){super(),this._onDidChange=this._register(new oe),this.onDidChange=this._onDidChange.event,this._cache=new Ng,this._evictUntrustedReadingsTimeout=-1}dispose(){-1!==this._evictUntrustedReadingsTimeout&&(clearTimeout(this._evictUntrustedReadingsTimeout),this._evictUntrustedReadingsTimeout=-1),super.dispose()}clearCache(){this._cache=new Ng,this._onDidChange.fire()}_writeToCache(e,t){this._cache.put(e,t),t.isTrusted||-1!==this._evictUntrustedReadingsTimeout||(this._evictUntrustedReadingsTimeout=setTimeout(()=>{this._evictUntrustedReadingsTimeout=-1,this._evictUntrustedReadings()},5e3))}_evictUntrustedReadings(){const e=this._cache.getValues();let t=!1;for(const i of e)i.isTrusted||(t=!0,this._cache.remove(i));t&&this._onDidChange.fire()}readConfiguration(e){if(!this._cache.has(e)){let t=Ig._actualReadConfiguration(e);(t.typicalHalfwidthCharacterWidth<=2||t.typicalFullwidthCharacterWidth<=2||t.spaceWidth<=2||t.maxDigitWidth<=2)&&(t=new rg({zoomLevel:he(),pixelRatio:de(),fontFamily:t.fontFamily,fontWeight:t.fontWeight,fontSize:t.fontSize,fontFeatureSettings:t.fontFeatureSettings,lineHeight:t.lineHeight,letterSpacing:t.letterSpacing,isMonospace:t.isMonospace,typicalHalfwidthCharacterWidth:Math.max(t.typicalHalfwidthCharacterWidth,5),typicalFullwidthCharacterWidth:Math.max(t.typicalFullwidthCharacterWidth,5),canUseHalfwidthRightwardsArrow:t.canUseHalfwidthRightwardsArrow,spaceWidth:Math.max(t.spaceWidth,5),middotWidth:Math.max(t.middotWidth,5),wsmiddotWidth:Math.max(t.wsmiddotWidth,5),maxDigitWidth:Math.max(t.maxDigitWidth,5)},!1)),this._writeToCache(e,t)}return this._cache.get(e)}static createRequest(e,t,i,n){const o=new qu(e,t);return i.push(o),n&&n.push(o),o}static _actualReadConfiguration(e){const t=[],i=[],n=this.createRequest("n",0,t,i),o=this.createRequest("m",0,t,null),s=this.createRequest(" ",0,t,i),r=this.createRequest("0",0,t,i),a=this.createRequest("1",0,t,i),l=this.createRequest("2",0,t,i),h=this.createRequest("3",0,t,i),c=this.createRequest("4",0,t,i),d=this.createRequest("5",0,t,i),u=this.createRequest("6",0,t,i),g=this.createRequest("7",0,t,i),p=this.createRequest("8",0,t,i),m=this.createRequest("9",0,t,i),f=this.createRequest("→",0,t,i),_=this.createRequest("→",0,t,null),b=this.createRequest("·",0,t,i),v=this.createRequest(String.fromCharCode(11825),0,t,null);this.createRequest("|",0,t,i),this.createRequest("/",0,t,i),this.createRequest("-",0,t,i),this.createRequest("_",0,t,i),this.createRequest("i",0,t,i),this.createRequest("l",0,t,i),this.createRequest("m",0,t,i),this.createRequest("|",1,t,i),this.createRequest("_",1,t,i),this.createRequest("i",1,t,i),this.createRequest("l",1,t,i),this.createRequest("m",1,t,i),this.createRequest("n",1,t,i),this.createRequest("|",2,t,i),this.createRequest("_",2,t,i),this.createRequest("i",2,t,i),this.createRequest("l",2,t,i),this.createRequest("m",2,t,i),this.createRequest("n",2,t,i),function C(e,t){new Gu(e,t).read()}(e,t);const w=Math.max(r.width,a.width,l.width,h.width,c.width,d.width,u.width,g.width,p.width,m.width);let y=e.fontFeatureSettings===To.OFF;const S=i[0].width;for(let e=1,t=i.length;y&&e.001){y=!1;break}}let L=!0;y&&_.width!==S&&(L=!1),_.width>f.width&&(L=!1);const D=function E(){return le.INSTANCE.getTimeSinceLastZoomLevelChanged()}()>2e3;return new rg({zoomLevel:he(),pixelRatio:de(),fontFamily:e.fontFamily,fontWeight:e.fontWeight,fontSize:e.fontSize,fontFeatureSettings:e.fontFeatureSettings,lineHeight:e.lineHeight,letterSpacing:e.letterSpacing,isMonospace:y,typicalHalfwidthCharacterWidth:n.width,typicalFullwidthCharacterWidth:o.width,canUseHalfwidthRightwardsArrow:L,spaceWidth:s.width,middotWidth:b.width,wsmiddotWidth:v.width,maxDigitWidth:w},D)}}Ig.INSTANCE=new Ig;class Tg extends yg{constructor(e,t,i=null,n){super(e,t),this.accessibilityService=n,this._elementSizeObserver=this._register(new Yu(i,t.dimension,()=>this._recomputeOptions())),this._register(Ig.INSTANCE.onDidChange(()=>this._recomputeOptions())),this._validatedOptions.get(9)&&this._elementSizeObserver.startObserving(),this._register(ce(e=>this._recomputeOptions())),this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(()=>this._recomputeOptions())),this._recomputeOptions()}static applyFontInfoSlow(e,t){e.style.fontFamily=t.getMassagedFontFamily(),e.style.fontWeight=t.fontWeight,e.style.fontSize=t.fontSize+"px",e.style.fontFeatureSettings=t.fontFeatureSettings,e.style.lineHeight=t.lineHeight+"px",e.style.letterSpacing=t.letterSpacing+"px"}static applyFontInfo(e,t){e.setFontFamily(t.getMassagedFontFamily()),e.setFontWeight(t.fontWeight),e.setFontSize(t.fontSize),e.setFontFeatureSettings(t.fontFeatureSettings),e.setLineHeight(t.lineHeight),e.setLetterSpacing(t.letterSpacing)}observeReferenceElement(e){this._elementSizeObserver.observe(e)}updatePixelRatio(){this._recomputeOptions()}static _getExtraEditorClassName(){let e="";return fe||_e||(e+="no-user-select "),fe&&(e+="no-minimap-shadow "),H&&(e+="mac "),e}_getEnvConfiguration(){return{extraEditorClassName:Tg._getExtraEditorClassName(),outerWidth:this._elementSizeObserver.getWidth(),outerHeight:this._elementSizeObserver.getHeight(),emptySelectionClipboard:pe||ge,pixelRatio:de(),zoomLevel:he(),accessibilitySupport:this.accessibilityService.isScreenReaderOptimized()?2:this.accessibilityService.getAccessibilitySupport()}}readConfiguration(e){return Ig.INSTANCE.readConfiguration(e)}}class Ag{constructor(e){this.domNode=e,this._maxWidth=-1,this._width=-1,this._height=-1,this._top=-1,this._left=-1,this._bottom=-1,this._right=-1,this._fontFamily="",this._fontWeight="",this._fontSize=-1,this._fontFeatureSettings="",this._lineHeight=-1,this._letterSpacing=-100,this._className="",this._display="",this._position="",this._visibility="",this._backgroundColor="",this._layerHint=!1,this._contain="none",this._boxShadow=""}setMaxWidth(e){this._maxWidth!==e&&(this._maxWidth=e,this.domNode.style.maxWidth=this._maxWidth+"px")}setWidth(e){this._width!==e&&(this._width=e,this.domNode.style.width=this._width+"px")}setHeight(e){this._height!==e&&(this._height=e,this.domNode.style.height=this._height+"px")}setTop(e){this._top!==e&&(this._top=e,this.domNode.style.top=this._top+"px")}unsetTop(){-1!==this._top&&(this._top=-1,this.domNode.style.top="")}setLeft(e){this._left!==e&&(this._left=e,this.domNode.style.left=this._left+"px")}setBottom(e){this._bottom!==e&&(this._bottom=e,this.domNode.style.bottom=this._bottom+"px")}setRight(e){this._right!==e&&(this._right=e,this.domNode.style.right=this._right+"px")}setFontFamily(e){this._fontFamily!==e&&(this._fontFamily=e,this.domNode.style.fontFamily=this._fontFamily)}setFontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.domNode.style.fontWeight=this._fontWeight)}setFontSize(e){this._fontSize!==e&&(this._fontSize=e,this.domNode.style.fontSize=this._fontSize+"px")}setFontFeatureSettings(e){this._fontFeatureSettings!==e&&(this._fontFeatureSettings=e,this.domNode.style.fontFeatureSettings=this._fontFeatureSettings)}setLineHeight(e){this._lineHeight!==e&&(this._lineHeight=e,this.domNode.style.lineHeight=this._lineHeight+"px")}setLetterSpacing(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.domNode.style.letterSpacing=this._letterSpacing+"px")}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setDisplay(e){this._display!==e&&(this._display=e,this.domNode.style.display=this._display)}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setVisibility(e){this._visibility!==e&&(this._visibility=e,this.domNode.style.visibility=this._visibility)}setBackgroundColor(e){this._backgroundColor!==e&&(this._backgroundColor=e,this.domNode.style.backgroundColor=this._backgroundColor)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=this._layerHint?"translate3d(0px, 0px, 0px)":"")}setBoxShadow(e){this._boxShadow!==e&&(this._boxShadow=e,this.domNode.style.boxShadow=e)}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}removeAttribute(e){this.domNode.removeAttribute(e)}appendChild(e){this.domNode.appendChild(e.domNode)}removeChild(e){this.domNode.removeChild(e.domNode)}}function Mg(e){return new Ag(e)}let Og=0;function Rg(e,t,i){return function n(){const e=`$memoize${Og++}`;let t=void 0;const i=function i(n,o,s){let r=null,a=null;if("function"==typeof s.value?(r="value",0!==(a=s.value).length&&console.warn("Memoize should only be used in functions with zero parameters")):"function"==typeof s.get&&(r="get",a=s.get),!a)throw new Error("not supported");const l=`${e}:${o}`;s[r]=function(...e){return t=this,this.hasOwnProperty(l)||Object.defineProperty(this,l,{configurable:!0,enumerable:!1,writable:!0,value:a.apply(this,e)}),this[l]}};return i.clear=()=>{void 0!==t&&Object.getOwnPropertyNames(t).forEach(i=>{0===i.indexOf(e)&&delete t[i]})},i}()(e,t,i)}var Pg;!function(e){e.Tap="-monaco-gesturetap",e.Change="-monaco-gesturechange",e.Start="-monaco-gesturestart",e.End="-monaco-gesturesend",e.Contextmenu="-monaco-gesturecontextmenu"}(Pg||(Pg={}));class Fg extends C{constructor(){super(),this.dispatched=!1,this.activeTouches={},this.handle=null,this.targets=[],this.ignoreTargets=[],this._lastSetTapCountTime=0,this._register(jd(document,"touchstart",e=>this.onTouchStart(e),{passive:!1})),this._register(jd(document,"touchend",e=>this.onTouchEnd(e))),this._register(jd(document,"touchmove",e=>this.onTouchMove(e),{passive:!1}))}static addTarget(e){return Fg.isTouchDevice()?(Fg.INSTANCE||(Fg.INSTANCE=new Fg),Fg.INSTANCE.targets.push(e),{dispose:()=>{Fg.INSTANCE.targets=Fg.INSTANCE.targets.filter(t=>t!==e)}}):C.None}static ignoreTarget(e){return Fg.isTouchDevice()?(Fg.INSTANCE||(Fg.INSTANCE=new Fg),Fg.INSTANCE.ignoreTargets.push(e),{dispose:()=>{Fg.INSTANCE.ignoreTargets=Fg.INSTANCE.ignoreTargets.filter(t=>t!==e)}}):C.None}static isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0}dispose(){this.handle&&(this.handle.dispose(),this.handle=null),super.dispose()}onTouchStart(e){let t=Date.now();this.handle&&(this.handle.dispose(),this.handle=null);for(let i=0,n=e.targetTouches.length;i=Fg.HOLD_DELAY&&Math.abs(s.initialPageX-Yr(s.rollingPageX))<30&&Math.abs(s.initialPageY-Yr(s.rollingPageY))<30){let e=this.newGestureEvent(Pg.Contextmenu,s.initialTarget);e.pageX=Yr(s.rollingPageX),e.pageY=Yr(s.rollingPageY),this.dispatchEvent(e)}else if(1===i){let e=Yr(s.rollingPageX),i=Yr(s.rollingPageY),n=Yr(s.rollingTimestamps)-s.rollingTimestamps[0],o=e-s.rollingPageX[0],r=i-s.rollingPageY[0];const a=this.targets.filter(e=>s.initialTarget instanceof Node&&e.contains(s.initialTarget));this.inertia(a,t,Math.abs(o)/n,o>0?1:-1,e,Math.abs(r)/n,r>0?1:-1,i)}this.dispatchEvent(this.newGestureEvent(Pg.End,s.initialTarget)),delete this.activeTouches[o.identifier]}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}newGestureEvent(e,t){let i=document.createEvent("CustomEvent");return i.initEvent(e,!1,!0),i.initialTarget=t,i.tapCount=0,i}dispatchEvent(e){if(e.type===Pg.Tap){const t=(new Date).getTime();let i=0;i=t-this._lastSetTapCountTime>Fg.CLEAR_TAP_COUNT_TIME?1:2,this._lastSetTapCountTime=t,e.tapCount=i}else e.type!==Pg.Change&&e.type!==Pg.Contextmenu||(this._lastSetTapCountTime=0);for(let t=0;t{e.initialTarget instanceof Node&&t.contains(e.initialTarget)&&(t.dispatchEvent(e),this.dispatched=!0)})}inertia(e,t,i,n,o,s,r,a){this.handle=Jd(()=>{let l=Date.now(),h=l-t,c=0,d=0,u=!0;(i+=Fg.SCROLL_FRICTION*h)>0&&(u=!1,c=n*i*h),(s+=Fg.SCROLL_FRICTION*h)>0&&(u=!1,d=r*s*h);let g=this.newGestureEvent(Pg.Change);g.translationX=c,g.translationY=d,e.forEach(e=>e.dispatchEvent(g)),u||this.inertia(e,l,i,n,o+c,s,r,a+d)})}onTouchMove(e){let t=Date.now();for(let i=0,n=e.changedTouches.length;i3&&(o.rollingPageX.shift(),o.rollingPageY.shift(),o.rollingTimestamps.shift()),o.rollingPageX.push(n.pageX),o.rollingPageY.push(n.pageY),o.rollingTimestamps.push(t)}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}}function Bg(e,t){let i=new Vd(t);return i.preventDefault(),{leftButton:i.leftButton,buttons:i.buttons,posx:i.posx,posy:i.posy}}Fg.SCROLL_FRICTION=-.005,Fg.HOLD_DELAY=700,Fg.CLEAR_TAP_COUNT_TIME=400,function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);s>3&&r&&Object.defineProperty(t,i,r)}([Rg],Fg,"isTouchDevice",null);class Wg{constructor(){this._hooks=new v,this._mouseMoveEventMerger=null,this._mouseMoveCallback=null,this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(e,t){if(!this.isMonitoring())return;this._hooks.clear(),this._mouseMoveEventMerger=null,this._mouseMoveCallback=null;const i=this._onStopCallback;this._onStopCallback=null,e&&i&&i(t)}isMonitoring(){return!!this._mouseMoveEventMerger}startMonitoring(e,t,i,n,o){if(this.isMonitoring())return;this._mouseMoveEventMerger=i,this._mouseMoveCallback=n,this._onStopCallback=o;const s=Wd.getSameOriginWindowChain(),r=s.map(e=>e.window.document),a=wu(e);a&&r.unshift(a);for(const e of r)this._hooks.add(su(e,"mousemove",e=>{e.buttons===t?this._mouseMoveCallback(e):this.stopMonitoring(!0)},(e,t)=>this._mouseMoveEventMerger(e,t))),this._hooks.add(jd(e,"mouseup",e=>this.stopMonitoring(!0)));if(Wd.hasDifferentOriginAncestor()){let e=s[s.length-1];this._hooks.add(jd(e.window.document,"mouseout",e=>{"html"===new Vd(e).target.tagName.toLowerCase()&&this.stopMonitoring(!0)})),this._hooks.add(jd(e.window.document,"mouseover",e=>{"html"===new Vd(e).target.tagName.toLowerCase()&&this.stopMonitoring(!0)})),this._hooks.add(jd(e.window.document.body,"mouseleave",e=>{this.stopMonitoring(!0)}))}}}class Vg{constructor(e,t){this.x=e,this.y=t}toClientCoordinates(){return new zg(this.x-du.scrollX,this.y-du.scrollY)}}class zg{constructor(e,t){this.clientX=e,this.clientY=t}toPageCoordinates(){return new Vg(this.clientX+du.scrollX,this.clientY+du.scrollY)}}class Hg{constructor(e,t,i,n){this.x=e,this.y=t,this.width=i,this.height=n}}function Ug(e){const t=cu(e);return new Hg(t.left,t.top,t.width,t.height)}class Kg extends Vd{constructor(e,t){super(e),this.pos=new Vg(this.posx,this.posy),this.editorPos=Ug(t)}}class $g{constructor(e){this._editorViewDomNode=e}_create(e){return new Kg(e,this._editorViewDomNode)}onContextMenu(e,t){return jd(e,"contextmenu",e=>{t(this._create(e))})}onMouseUp(e,t){return jd(e,"mouseup",e=>{t(this._create(e))})}onMouseDown(e,t){return jd(e,"mousedown",e=>{t(this._create(e))})}onMouseLeave(e,t){return Xd(e,e=>{t(this._create(e))})}onMouseMoveThrottled(e,t,i,n){return su(e,"mousemove",t,(e,t)=>i(e,this._create(t)),n)}}class jg{constructor(e){this._editorViewDomNode=e}_create(e){return new Kg(e,this._editorViewDomNode)}onPointerUp(e,t){return jd(e,"pointerup",e=>{t(this._create(e))})}onPointerDown(e,t){return jd(e,"pointerdown",e=>{t(this._create(e))})}onPointerLeave(e,t){return function i(e,t){return jd(e,"pointerout",i=>{let n=i.relatedTarget;for(;n&&n!==e;)n=n.parentNode;n!==e&&t(i)})}(e,e=>{t(this._create(e))})}onPointerMoveThrottled(e,t,i,n){return su(e,"pointermove",t,(e,t)=>i(e,this._create(t)),n)}}class qg extends C{constructor(e){super(),this._editorViewDomNode=e,this._globalMouseMoveMonitor=this._register(new Wg),this._keydownListener=null}startMonitoring(e,t,i,n,o){this._keydownListener=Gd(document,"keydown",e=>{e.toKeybinding().isModifierKey()||this._globalMouseMoveMonitor.stopMonitoring(!0,e.browserEvent)},!0),this._globalMouseMoveMonitor.startMonitoring(e,t,(e,t)=>i(e,new Kg(t,this._editorViewDomNode)),n,e=>{this._keydownListener.dispose(),o(e)})}stopMonitoring(){this._globalMouseMoveMonitor.stopMonitoring(!0)}}class Gg extends C{constructor(){super(),this._shouldRender=!0}shouldRender(){return this._shouldRender}forceShouldRender(){this._shouldRender=!0}setShouldRender(){this._shouldRender=!0}onDidRender(){this._shouldRender=!1}onCompositionStart(e){return!1}onCompositionEnd(e){return!1}onConfigurationChanged(e){return!1}onCursorStateChanged(e){return!1}onDecorationsChanged(e){return!1}onFlushed(e){return!1}onFocusChanged(e){return!1}onLanguageConfigurationChanged(e){return!1}onLineMappingChanged(e){return!1}onLinesChanged(e){return!1}onLinesDeleted(e){return!1}onLinesInserted(e){return!1}onRevealRangeRequest(e){return!1}onScrollChanged(e){return!1}onThemeChanged(e){return!1}onTokensChanged(e){return!1}onTokensColorsChanged(e){return!1}onZonesChanged(e){return!1}handleEvents(e){let t=!1;for(let i=0,n=e.length;i=a?o=Math.max(o,a+l-n):(t[i++]=new ep(n,o),n=a,o=l)}return t[i++]=new ep(n,o),t}static _createHorizontalRangesFromClientRects(e,t){if(!e||0===e.length)return null;const i=[];for(let n=0,o=e.length;na)return null;if((t=Math.min(a,Math.max(0,t)))===(n=Math.min(a,Math.max(0,n)))&&i===o&&0===i){const i=e.children[t].getClientRects();return this._createHorizontalRangesFromClientRects(i,s)}t!==n&&n>0&&0===o&&(n--,o=1073741824);let l=e.children[t].firstChild,h=e.children[n].firstChild;if(l&&h||(!l&&0===i&&t>0&&(l=e.children[t-1].firstChild,i=1073741824),!h&&0===o&&n>0&&(h=e.children[n-1].firstChild,o=1073741824)),!l||!h)return null;i=Math.min(l.textContent.length,Math.max(0,i)),o=Math.min(h.textContent.length,Math.max(0,o));const c=this._readClientRects(l,i,h,o,r);return this._createHorizontalRangesFromClientRects(c,s)}}class sp{constructor(e,t,i,n){this.startColumn=e,this.endColumn=t,this.className=i,this.type=n}static _equals(e,t){return e.startColumn===t.startColumn&&e.endColumn===t.endColumn&&e.className===t.className&&e.type===t.type}static equalsArr(e,t){const i=e.length;if(i!==t.length)return!1;for(let n=0;n=o||(r[a++]=new sp(Math.max(1,t.startColumn-n+1),Math.min(s+1,t.endColumn-n+1),t.className,t.type));return r}static filter(e,t,i,n){if(0===e.length)return[];let o=[],s=0;for(let r=0,a=e.length;rt||(!l.isEmpty()||0!==a.type&&3!==a.type)&&(o[s++]=new sp(l.startLineNumber===t?l.startColumn:i,l.endLineNumber===t?l.endColumn:n,a.inlineClassName,a.type))}return o}static _typeCompare(e,t){const i=[2,0,1,3];return i[e]-i[t]}static compare(e,t){if(e.startColumn===t.startColumn){if(e.endColumn===t.endColumn){const i=sp._typeCompare(e.type,t.type);return 0===i?e.classNamet.className?1:0:i}return e.endColumn-t.endColumn}return e.startColumn-t.startColumn}}class rp{constructor(e,t,i,n){this.startOffset=e,this.endOffset=t,this.className=i,this.metadata=n}}class ap{constructor(){this.stopOffsets=[],this.classNames=[],this.metadata=[],this.count=0}static _metadata(e){let t=0;for(let i=0,n=e.length;i0&&this.stopOffsets[0]0&&t=e){this.stopOffsets.splice(n,0,e),this.classNames.splice(n,0,t),this.metadata.splice(n,0,i);break}this.count++}}class lp{static normalize(e,t){if(0===t.length)return[];let i=[];const n=new ap;let o=0;for(let s=0,r=t.length;s1&&di(e.charCodeAt(a-2))&&a--,l>1&&di(e.charCodeAt(l-2))&&l--;const d=a-1,u=l-2;o=n.consumeLowerThan(d,o,i),0===n.count&&(o=d),n.insert(u,h,c)}return n.consumeLowerThan(1073741824,o,i),i}}class hp{constructor(e,t,i){this.endIndex=e,this.type=t,this.metadata=i}isWhitespace(){return!!(1&this.metadata)}}class cp{constructor(e,t){this.startOffset=e,this.endOffset=t}equals(e){return this.startOffset===e.startOffset&&this.endOffset===e.endOffset}}class dp{constructor(e,t,i,n,o,s,r,a,l,h,c,d,u,g,p,m,f,_,b){this.useMonospaceOptimizations=e,this.canUseHalfwidthRightwardsArrow=t,this.lineContent=i,this.continuesWithWrappedLine=n,this.isBasicASCII=o,this.containsRTL=s,this.fauxIndentLength=r,this.lineTokens=a,this.lineDecorations=l.sort(sp.compare),this.tabSize=h,this.startVisibleColumn=c,this.spaceWidth=d,this.stopRenderingLineAfter=p,this.renderWhitespace="all"===m?4:"boundary"===m?1:"selection"===m?2:"trailing"===m?3:0,this.renderControlCharacters=f,this.fontLigatures=_,this.selectionsOnLine=b&&b.sort((e,t)=>e.startOffset>>16}static getCharIndex(e){return(65535&e)>>>0}setPartData(e,t,i,n){this._data[e]=(t<<16|i<<0)>>>0,this._absoluteOffsets[e]=n+i}getAbsoluteOffsets(){return this._absoluteOffsets}charOffsetToPartData(e){return 0===this.length?0:e<0?this._data[0]:e>=this.length?this._data[this.length-1]:this._data[e]}partDataToCharOffset(e,t,i){if(0===this.length)return 0;let n=(e<<16|i<<0)>>>0,o=0,s=this.length-1;for(;o+1>>1,t=this._data[e];if(t===n)return e;t>n?s=e:o=e}if(o===s)return o;let r=this._data[o],a=this._data[s];if(r===n)return o;if(a===n)return s;let l,h=up.getPartIndex(r);return i-up.getCharIndex(r)<=(l=h!==up.getPartIndex(a)?t:up.getCharIndex(a))-i?o:s}}class gp{constructor(e,t,i){this.characterMapping=e,this.containsRTL=t,this.containsForeignElements=i}}function pp(e,t){if(0===e.lineContent.length){let i=0,n="";if(e.lineDecorations.length>0){const t=[],o=[];for(let n=0,s=e.lineDecorations.length;n${t.length>0?``:""}${o.length>0?``:""}`)}return t.appendASCIIString(n),new gp(new up(0,0),!1,i)}return function n(e,t){const i=e.fontIsMonospace,n=e.canUseHalfwidthRightwardsArrow,o=e.containsForeignElements,s=e.lineContent,r=e.len,a=e.isOverflowing,l=e.parts,h=e.fauxIndentLength,c=e.tabSize,d=e.startVisibleColumn,u=e.containsRTL,g=e.spaceWidth,p=e.renderSpaceCharCode,m=e.renderWhitespace,f=e.renderControlCharacters,_=new up(r+1,l.length);let b=0,v=d,C=0,w=0,y=0,S=0;t.appendASCIIString(u?'':"");for(let e=0,r=l.length;e=h&&(t+=n)}}for(L&&(t.appendASCIIString(' style="width:'),t.appendASCIIString(String(g*i)),t.appendASCIIString('px"')),t.appendASCII(62);b1?8594:65515);for(let e=2;e<=i;e++)t.write1(160)}else i=1,t.write1(p);C+=i,b>=h&&(v+=i)}y=i}else{let i=0;for(t.appendASCII(62);b=h&&(v+=r)}y=i}D?w++:w=0,t.appendASCIIString("")}return _.setPartData(r,l.length-1,C,S),a&&t.appendASCIIString("…"),t.appendASCIIString(""),new gp(_,u,o)}(function i(e){const t=e.lineContent;let i,n;-1!==e.stopRenderingLineAfter&&e.stopRenderingLineAfter0&&(n[o++]=new hp(t,"",0));for(let s=0,r=e.getCount();s=i){n[o++]=new hp(i,a,0);break}n[o++]=new hp(r,a,0)}return n}(e.lineTokens,e.fauxIndentLength,n);(4===e.renderWhitespace||1===e.renderWhitespace||2===e.renderWhitespace&&e.selectionsOnLine||3===e.renderWhitespace)&&(o=function r(e,t,i,n){const o=e.continuesWithWrappedLine,s=e.fauxIndentLength,r=e.tabSize,a=e.startVisibleColumn,l=e.useMonospaceOptimizations,h=e.selectionsOnLine,c=1===e.renderWhitespace,d=3===e.renderWhitespace,u=e.renderSpaceWidth!==e.spaceWidth;let g=[],p=0,m=0,f=n[m].type,_=n[m].endIndex;const b=n.length;let v,C=!1,w=Zt(t);-1===w?(C=!0,w=i,v=i):v=Qt(t);let y=!1,S=0,L=h&&h[S],D=a%r;for(let e=s;e=L.endOffset&&(S++,L=h&&h[S]),ev)a=!0;else if(9===o)a=!0;else if(32===o)if(c)if(y)a=!0;else{const n=e+1e),a&&d&&(a=C||e>v),y){if(!a||!l&&D>=r){if(u)for(let t=(p>0?g[p-1].endIndex:s)+1;t<=e;t++)g[p++]=new hp(t,"mtkw",1);else g[p++]=new hp(e,"mtkw",1);D%=r}}else(e===_||a&&e>s)&&(g[p++]=new hp(e,f,0),D%=r);for(9===o?D=r:Li(o)?D+=2:D++,y=a;e===_;)++m0?t.charCodeAt(i-1):0,n=i>1?t.charCodeAt(i-2):0;32===e&&32!==n&&9!==n||(E=!0)}else E=!0;if(E)if(u)for(let e=(p>0?g[p-1].endIndex:s)+1;e<=i;e++)g[p++]=new hp(e,"mtkw",1);else g[p++]=new hp(i,"mtkw",1);else g[p++]=new hp(i,f,0);return g}(e,t,n,o));let a=0;if(e.lineDecorations.length>0){for(let t=0,i=e.lineDecorations.length;th&&(a[l++]=new hp(h=e.startOffset,c,d)),!(e.endOffset+1<=n)){a[l++]=new hp(h=n,c+" "+e.className,d|e.metadata);break}a[l++]=new hp(h=e.endOffset+1,c+" "+e.className,d|e.metadata),r++}n>h&&(a[l++]=new hp(h=n,c,d))}const c=i[i.length-1].endIndex;if(r=50&&(o[s++]=new hp(l+1,t,i),h=l+1,l=-1);h!==a&&(o[s++]=new hp(a,t,i))}else o[s++]=r;n=a}else for(let e=0,i=t.length;e50){const e=i.type,t=i.metadata,l=Math.ceil(a/50);for(let i=1;ie)continue;const t=i.startLineNumber===e?i.startColumn:o.minColumn,n=i.endLineNumber===e?i.endColumn:o.maxColumn;t');const h=pp(l,n);n.appendASCIIString("");let c=null;return vp&&bp&&o.isBasicASCII&&s.useMonospaceOptimizations&&0===h.containsForeignElements&&o.content.length<300&&l.lineTokens.getCount()<100&&(c=new Sp(this._renderedViewLine?this._renderedViewLine.domNode:null,l,h.characterMapping)),c||(c=Ep(this._renderedViewLine?this._renderedViewLine.domNode:null,l,h.characterMapping,h.containsRTL,h.containsForeignElements)),this._renderedViewLine=c,!0}layoutLine(e,t){this._renderedViewLine&&this._renderedViewLine.domNode&&(this._renderedViewLine.domNode.setTop(t),this._renderedViewLine.domNode.setHeight(this._options.lineHeight))}getWidth(){return this._renderedViewLine?this._renderedViewLine.getWidth():0}getWidthIsFast(){return!this._renderedViewLine||this._renderedViewLine.getWidthIsFast()}needsMonospaceFontCheck(){return!!this._renderedViewLine&&this._renderedViewLine instanceof Sp}monospaceAssumptionsAreValid(){return this._renderedViewLine&&this._renderedViewLine instanceof Sp?this._renderedViewLine.monospaceAssumptionsAreValid():vp}onMonospaceAssumptionsInvalidated(){this._renderedViewLine&&this._renderedViewLine instanceof Sp&&(this._renderedViewLine=this._renderedViewLine.toSlowRenderedLine())}getVisibleRangesForRange(e,t,i){if(!this._renderedViewLine)return null;e|=0,t|=0,e=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,e)),t=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,t));const n=0|this._renderedViewLine.input.stopRenderingLineAfter;let o=!1;-1!==n&&e>n+1&&t>n+1&&(o=!0),-1!==n&&e>n+1&&(e=n+1),-1!==n&&t>n+1&&(t=n+1);const s=this._renderedViewLine.getVisibleRangesForRange(e,t,i);return s&&s.length>0?new ip(o,s):null}getColumnOfNodeOffset(e,t,i){return this._renderedViewLine?this._renderedViewLine.getColumnOfNodeOffset(e,t,i):1}}yp.CLASS_NAME="view-line";class Sp{constructor(e,t,i){this.domNode=e,this.input=t,this._characterMapping=i,this._charWidth=t.spaceWidth}getWidth(){return this._getCharPosition(this._characterMapping.length)}getWidthIsFast(){return!0}monospaceAssumptionsAreValid(){if(!this.domNode)return vp;const e=this.getWidth();return Math.abs(e-this.domNode.domNode.firstChild.offsetWidth)>=2&&(console.warn("monospace assumptions have been violated, therefore disabling monospace optimizations!"),vp=!1),vp}toSlowRenderedLine(){return Ep(this.domNode,this.input,this._characterMapping,!1,0)}getVisibleRangesForRange(e,t,i){const n=this._getCharPosition(e),o=this._getCharPosition(t);return[new ep(n,o-n)]}_getCharPosition(e){const t=this._characterMapping.getAbsoluteOffsets();return 0===t.length?0:Math.round(this._charWidth*t[e-1])}getColumnOfNodeOffset(e,t,i){const n=t.textContent.length;let o=-1;for(;t;)t=t.previousSibling,o++;return this._characterMapping.partDataToCharOffset(o,n,i)+1}}class Lp{constructor(e,t,i,n,o){if(this.domNode=e,this.input=t,this._characterMapping=i,this._isWhitespaceOnly=/^\s*$/.test(t.lineContent),this._containsForeignElements=o,this._cachedWidth=-1,this._pixelOffsetCache=null,!n||0===this._characterMapping.length){this._pixelOffsetCache=new Int32Array(Math.max(2,this._characterMapping.length+1));for(let e=0,t=this._characterMapping.length;e<=t;e++)this._pixelOffsetCache[e]=-1}}_getReadingTarget(e){return e.domNode.firstChild}getWidth(){return this.domNode?(-1===this._cachedWidth&&(this._cachedWidth=this._getReadingTarget(this.domNode).offsetWidth),this._cachedWidth):0}getWidthIsFast(){return-1!==this._cachedWidth}getVisibleRangesForRange(e,t,i){if(!this.domNode)return null;if(null!==this._pixelOffsetCache){const n=this._readPixelOffset(this.domNode,e,i);if(-1===n)return null;const o=this._readPixelOffset(this.domNode,t,i);return-1===o?null:[new ep(n,o-n)]}return this._readVisibleRangesForRange(this.domNode,e,t,i)}_readVisibleRangesForRange(e,t,i,n){if(t===i){const i=this._readPixelOffset(e,t,n);return-1===i?null:[new ep(i,0)]}return this._readRawVisibleRangesForRange(e,t,i,n)}_readPixelOffset(e,t,i){if(0===this._characterMapping.length){if(0===this._containsForeignElements)return 0;if(2===this._containsForeignElements)return 0;if(1===this._containsForeignElements)return this.getWidth();const t=this._getReadingTarget(e);return t.firstChild?t.firstChild.offsetWidth:0}if(null!==this._pixelOffsetCache){const n=this._pixelOffsetCache[t];if(-1!==n)return n;const o=this._actualReadPixelOffset(e,t,i);return this._pixelOffsetCache[t]=o,o}return this._actualReadPixelOffset(e,t,i)}_actualReadPixelOffset(e,t,i){if(0===this._characterMapping.length){const t=op.readHorizontalRanges(this._getReadingTarget(e),0,0,0,0,i.clientRectDeltaLeft,i.endNode);return t&&0!==t.length?t[0].left:-1}if(t===this._characterMapping.length&&this._isWhitespaceOnly&&0===this._containsForeignElements)return this.getWidth();const n=this._characterMapping.charOffsetToPartData(t-1),o=up.getPartIndex(n),s=up.getCharIndex(n),r=op.readHorizontalRanges(this._getReadingTarget(e),o,s,o,s,i.clientRectDeltaLeft,i.endNode);if(!r||0===r.length)return-1;const a=r[0].left;if(this.input.isBasicASCII){const e=this._characterMapping.getAbsoluteOffsets(),i=Math.round(this.input.spaceWidth*e[t-1]);if(Math.abs(i-a)<=1)return i}return a}_readRawVisibleRangesForRange(e,t,i,n){if(1===t&&i===this._characterMapping.length)return[new ep(0,this.getWidth())];const o=this._characterMapping.charOffsetToPartData(t-1),s=up.getPartIndex(o),r=up.getCharIndex(o),a=this._characterMapping.charOffsetToPartData(i-1),l=up.getPartIndex(a),h=up.getCharIndex(a);return op.readHorizontalRanges(this._getReadingTarget(e),s,r,l,h,n.clientRectDeltaLeft,n.endNode)}getColumnOfNodeOffset(e,t,i){const n=t.textContent.length;let o=-1;for(;t;)t=t.previousSibling,o++;return this._characterMapping.partDataToCharOffset(o,n,i)+1}}class Dp extends Lp{_readVisibleRangesForRange(e,t,i,n){const o=super._readVisibleRangesForRange(e,t,i,n);if(!o||0===o.length||t===i||1===t&&i===this._characterMapping.length)return o;if(!this.input.containsRTL){const t=this._readPixelOffset(e,i,n);if(-1!==t){const e=o[o.length-1];e.left=4&&3===e[0]&&7===e[3]}static isStrictChildOfViewLines(e){return e.length>4&&3===e[0]&&7===e[3]}static isChildOfScrollableElement(e){return e.length>=2&&3===e[0]&&5===e[1]}static isChildOfMinimap(e){return e.length>=2&&3===e[0]&&8===e[1]}static isChildOfContentWidgets(e){return e.length>=4&&3===e[0]&&1===e[3]}static isChildOfOverflowingContentWidgets(e){return e.length>=1&&2===e[0]}static isChildOfOverlayWidgets(e){return e.length>=2&&3===e[0]&&4===e[1]}}class Ap{constructor(e,t,i){this.model=e.model;const n=e.configuration.options;this.layoutInfo=n.get(129),this.viewDomNode=t.viewDomNode,this.lineHeight=n.get(54),this.stickyTabStops=n.get(104),this.typicalHalfwidthCharacterWidth=n.get(38).typicalHalfwidthCharacterWidth,this.lastRenderData=i,this._context=e,this._viewHelper=t}getZoneAtCoord(e){return Ap.getZoneAtCoord(this._context,e)}static getZoneAtCoord(e,t){const i=e.viewLayout.getWhitespaceAtVerticalOffset(t);if(i){const n=i.verticalOffset+i.height/2,o=e.model.getLineCount();let s,r=null,a=null;return i.afterLineNumber!==o&&(a=new Tt(i.afterLineNumber+1,1)),i.afterLineNumber>0&&(r=new Tt(i.afterLineNumber,e.model.getLineMaxColumn(i.afterLineNumber))),{viewZoneId:i.id,afterLineNumber:i.afterLineNumber,positionBefore:r,positionAfter:a,position:s=null===a?r:null===r?a:t=e.layoutInfo.glyphMarginLeft,this.isInContentArea=!this.isInMarginArea,this.mouseColumn=Math.max(0,Fp._getMouseColumn(this.mouseContentHorizontalOffset,e.typicalHalfwidthCharacterWidth))}}class Op extends Mp{constructor(e,t,i,n){super(e,t,i),this._ctx=e,n?(this.target=n,this.targetPath=Zg.collect(n,e.viewDomNode)):(this.target=null,this.targetPath=new Uint8Array(0))}toString(){return`pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset}\n\ttarget: ${this.target?this.target.outerHTML:null}`}fulfill(e,t=null,i=null,n=null){let o=this.mouseColumn;return t&&t.columns.contentLeft+s.width)continue;const i=e.getVerticalOffsetForLineNumber(s.position.lineNumber);if(i<=o&&o<=i+s.height)return t.fulfill(6,s.position)}}return null}static _hitTestViewZone(e,t){const i=e.getZoneAtCoord(t.mouseVerticalOffset);return i?t.fulfill(t.isInContentArea?8:5,i.position,null,i):null}static _hitTestTextArea(e,t){return Tp.isTextArea(t.targetPath)?t.fulfill(e.lastRenderData.lastTextareaPosition?6:1,e.lastRenderData.lastTextareaPosition):null}static _hitTestMargin(e,t){if(t.isInMarginArea){const i=e.getFullLineRangeAtCoord(t.mouseVerticalOffset),n=i.range.getStartPosition();let o=Math.abs(t.pos.x-t.editorPos.x);const s={isAfterLines:i.isAfterLines,glyphMarginLeft:e.layoutInfo.glyphMarginLeft,glyphMarginWidth:e.layoutInfo.glyphMarginWidth,lineNumbersWidth:e.layoutInfo.lineNumbersWidth,offsetX:o};return(o-=e.layoutInfo.glyphMarginLeft)<=e.layoutInfo.glyphMarginWidth?t.fulfill(2,n,i.range,s):(o-=e.layoutInfo.glyphMarginWidth)<=e.layoutInfo.lineNumbersWidth?t.fulfill(3,n,i.range,s):(o-=e.layoutInfo.lineNumbersWidth,t.fulfill(4,n,i.range,s))}return null}static _hitTestViewLines(e,t,i){if(!Tp.isChildOfViewLines(t.targetPath))return null;if(e.isInTopPadding(t.mouseVerticalOffset))return t.fulfill(7,new Tt(1,1),void 0,Rp);if(e.isAfterLines(t.mouseVerticalOffset)||e.isInBottomPadding(t.mouseVerticalOffset)){const i=e.model.getLineCount(),n=e.model.getLineMaxColumn(i);return t.fulfill(7,new Tt(i,n),void 0,Rp)}if(i){if(Tp.isStrictChildOfViewLines(t.targetPath)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset);if(0===e.model.getLineLength(i)){const n=e.getLineWidth(i),o=Pp(t.mouseContentHorizontalOffset-n);return t.fulfill(7,new Tt(i,1),void 0,o)}const n=e.getLineWidth(i);if(t.mouseContentHorizontalOffset>=n){const o=Pp(t.mouseContentHorizontalOffset-n),s=new Tt(i,e.model.getLineMaxColumn(i));return t.fulfill(7,s,void 0,o)}}return t.fulfill(0)}const n=Fp._doHitTest(e,t);return n.position?Fp.createMouseTargetFromHitTestPosition(e,t,n.position.lineNumber,n.position.column):this._createMouseTarget(e,t.withTarget(n.hitTarget),!0)}static _hitTestMinimap(e,t){if(Tp.isChildOfMinimap(t.targetPath)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset),n=e.model.getLineMaxColumn(i);return t.fulfill(11,new Tt(i,n))}return null}static _hitTestScrollbarSlider(e,t){if(Tp.isChildOfScrollableElement(t.targetPath)&&t.target&&1===t.target.nodeType){const i=t.target.className;if(i&&/\b(slider|scrollbar)\b/.test(i)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset),n=e.model.getLineMaxColumn(i);return t.fulfill(11,new Tt(i,n))}}return null}static _hitTestScrollbar(e,t){if(Tp.isChildOfScrollableElement(t.targetPath)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset),n=e.model.getLineMaxColumn(i);return t.fulfill(11,new Tt(i,n))}return null}getMouseColumn(e,t){const i=this._context.configuration.options,n=i.get(129),o=this._context.viewLayout.getCurrentScrollLeft()+t.x-e.x-n.contentLeft;return Fp._getMouseColumn(o,i.get(38).typicalHalfwidthCharacterWidth)}static _getMouseColumn(e,t){return e<0?1:Math.round(e/t)+1}static createMouseTargetFromHitTestPosition(e,t,i,n){const o=new Tt(i,n),s=e.getLineWidth(i);if(t.mouseContentHorizontalOffset>s){const e=Pp(t.mouseContentHorizontalOffset-s);return t.fulfill(7,o,void 0,e)}const r=e.visibleRangeForPosition(i,n);if(!r)return t.fulfill(0,o);if(t.mouseContentHorizontalOffset===r.left)return t.fulfill(6,o);const a=[];if(a.push({offset:r.left,column:n}),n>1){const t=e.visibleRangeForPosition(i,n-1);t&&a.push({offset:t.left,column:n-1})}if(ne.offset-t.offset);for(let e=1;e=t.editorPos.y+e.layoutInfo.height&&(o=t.editorPos.y+e.layoutInfo.height-1);const s=new Vg(t.pos.x,o),r=this._actualDoHitTestWithCaretRangeFromPoint(e,s.toClientCoordinates());return r.position?r:this._actualDoHitTestWithCaretRangeFromPoint(e,t.pos.toClientCoordinates())}static _actualDoHitTestWithCaretRangeFromPoint(e,t){const i=wu(e.viewDomNode);let n;if(!(n=i?void 0===i.caretRangeFromPoint?function o(e,t,i){const n=document.createRange();let o=e.elementFromPoint(t,i);if(null!==o){for(;o&&o.firstChild&&o.firstChild.nodeType!==o.firstChild.TEXT_NODE&&o.lastChild&&o.lastChild.firstChild;)o=o.lastChild;const e=o.getBoundingClientRect(),i=window.getComputedStyle(o,null).getPropertyValue("font"),s=o.innerText;let r,a=e.left,l=0;if(t>e.left+e.width)l=s.length;else{const e=Bp.getInstance();for(let n=0;nthis._createMouseTarget(e,t),e=>this._getMouseColumn(e))),this.lastMouseLeaveTime=-1,this._height=this._context.configuration.options.get(129).height;const n=new $g(this.viewHelper.viewDomNode);this._register(n.onContextMenu(this.viewHelper.viewDomNode,e=>this._onContextMenu(e,!0))),this._register(n.onMouseMoveThrottled(this.viewHelper.viewDomNode,e=>this._onMouseMove(e),Wp(this.mouseTargetFactory),Vp.MOUSE_MOVE_MINIMUM_TIME)),this._register(n.onMouseUp(this.viewHelper.viewDomNode,e=>this._onMouseUp(e))),this._register(n.onMouseLeave(this.viewHelper.viewDomNode,e=>this._onMouseLeave(e))),this._register(n.onMouseDown(this.viewHelper.viewDomNode,e=>this._onMouseDown(e))),this._register(jd(this.viewHelper.viewDomNode,Nu.MOUSE_WHEEL,e=>{if(this.viewController.emitMouseWheel(e),!this._context.configuration.options.get(63))return;const t=new zd(e);if(H?(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey:e.ctrlKey&&!e.metaKey&&!e.shiftKey&&!e.altKey){const e=tg.getZoomLevel();tg.setZoomLevel(e+(t.deltaY>0?1:-1)),t.preventDefault(),t.stopPropagation()}},{capture:!0,passive:!1})),this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}onConfigurationChanged(e){if(e.hasChanged(129)){const e=this._context.configuration.options.get(129).height;this._height!==e&&(this._height=e,this._mouseDownOperation.onHeightChanged())}return!1}onCursorStateChanged(e){return this._mouseDownOperation.onCursorStateChanged(e),!1}onFocusChanged(e){return!1}onScrollChanged(e){return this._mouseDownOperation.onScrollChanged(),!1}getTargetAtClientPoint(e,t){const i=new zg(e,t).toPageCoordinates(),n=Ug(this.viewHelper.viewDomNode);return i.yn.y+n.height||i.xn.x+n.width?null:this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),n,i,null)}_createMouseTarget(e,t){return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),e.editorPos,e.pos,t?e.target:null)}_getMouseColumn(e){return this.mouseTargetFactory.getMouseColumn(e.editorPos,e.pos)}_onContextMenu(e,t){this.viewController.emitContextMenu({event:e,target:this._createMouseTarget(e,t)})}_onMouseMove(e){this._mouseDownOperation.isActive()||e.timestamp{e.preventDefault(),this.viewHelper.focusTextArea()};l&&(i||o&&s)?(h(),this._mouseDownOperation.start(t.type,e)):n?e.preventDefault():r?this.viewHelper.shouldSuppressMouseDownOnViewZone(t.detail.viewZoneId)&&(h(),this._mouseDownOperation.start(t.type,e),e.preventDefault()):a&&this.viewHelper.shouldSuppressMouseDownOnWidget(t.detail)&&(h(),e.preventDefault()),this.viewController.emitMouseDown({event:e,target:t})}}Vp.MOUSE_MOVE_MINIMUM_TIME=100;class zp extends C{constructor(e,t,i,n,o){super(),this._context=e,this._viewController=t,this._viewHelper=i,this._createMouseTarget=n,this._getMouseColumn=o,this._mouseMoveMonitor=this._register(new qg(this._viewHelper.viewDomNode)),this._onScrollTimeout=this._register(new Ua),this._mouseState=new Hp,this._currentSelection=new ao(1,1,1,1),this._isActive=!1,this._lastMouseEvent=null}dispose(){super.dispose()}isActive(){return this._isActive}_onMouseDownThenMove(e){this._lastMouseEvent=e,this._mouseState.setModifiers(e);const t=this._findMousePosition(e,!0);t&&(this._mouseState.isDragAndDrop?this._viewController.emitMouseDrag({event:e,target:t}):this._dispatchMouse(t,!0))}start(e,t){this._lastMouseEvent=t,this._mouseState.setStartedOnLineNumbers(3===e),this._mouseState.setStartButtons(t),this._mouseState.setModifiers(t);const i=this._findMousePosition(t,!0);if(!i||!i.position)return;this._mouseState.trySetCount(t.detail,i.position),t.detail=this._mouseState.count;const n=this._context.configuration.options;if(!n.get(77)&&n.get(27)&&!n.get(15)&&!this._mouseState.altKey&&t.detail<2&&!this._isActive&&!this._currentSelection.isEmpty()&&6===i.type&&i.position&&this._currentSelection.containsPosition(i.position))return this._mouseState.isDragAndDrop=!0,this._isActive=!0,void this._mouseMoveMonitor.startMonitoring(t.target,t.buttons,Wp(null),e=>this._onMouseDownThenMove(e),e=>{const t=this._findMousePosition(this._lastMouseEvent,!0);e&&e instanceof KeyboardEvent?this._viewController.emitMouseDropCanceled():this._viewController.emitMouseDrop({event:this._lastMouseEvent,target:t?this._createMouseTarget(this._lastMouseEvent,!0):null}),this._stop()});this._mouseState.isDragAndDrop=!1,this._dispatchMouse(i,t.shiftKey),this._isActive||(this._isActive=!0,this._mouseMoveMonitor.startMonitoring(t.target,t.buttons,Wp(null),e=>this._onMouseDownThenMove(e),()=>this._stop()))}_stop(){this._isActive=!1,this._onScrollTimeout.cancel()}onHeightChanged(){this._mouseMoveMonitor.stopMonitoring()}onScrollChanged(){this._isActive&&this._onScrollTimeout.setIfNotSet(()=>{if(!this._lastMouseEvent)return;const e=this._findMousePosition(this._lastMouseEvent,!1);e&&(this._mouseState.isDragAndDrop||this._dispatchMouse(e,!0))},10)}onCursorStateChanged(e){this._currentSelection=e.selections[0]}_getPositionOutsideEditor(e){const t=e.editorPos,i=this._context.model,n=this._context.viewLayout,o=this._getMouseColumn(e);if(e.posyt.y+t.height){const s=n.getCurrentScrollTop()+(e.posy-t.y),r=Ap.getZoneAtCoord(this._context,s);if(r){const e=this._helpPositionJumpOverViewZone(r);if(e)return new Ip(null,13,o,e)}const a=n.getLineNumberAtVerticalOffset(s);return new Ip(null,13,o,new Tt(a,i.getLineMaxColumn(a)))}const s=n.getLineNumberAtVerticalOffset(n.getCurrentScrollTop()+(e.posy-t.y));return e.posxt.x+t.width?new Ip(null,13,o,new Tt(s,i.getLineMaxColumn(s))):null}_findMousePosition(e,t){const i=this._getPositionOutsideEditor(e);if(i)return i;const n=this._createMouseTarget(e,t);if(!n.position)return null;if(8===n.type||5===n.type){const e=this._helpPositionJumpOverViewZone(n.detail);if(e)return new Ip(n.element,n.type,n.mouseColumn,e,null,n.detail)}return n}_helpPositionJumpOverViewZone(e){const t=new Tt(this._currentSelection.selectionStartLineNumber,this._currentSelection.selectionStartColumn),i=e.positionBefore,n=e.positionAfter;return i&&n?i.isBefore(t)?i:n:null}_dispatchMouse(e,t){e.position&&this._viewController.dispatchMouse({position:e.position,mouseColumn:e.mouseColumn,startedOnLineNumbers:this._mouseState.startedOnLineNumbers,inSelectionMode:t,mouseDownCount:this._mouseState.count,altKey:this._mouseState.altKey,ctrlKey:this._mouseState.ctrlKey,metaKey:this._mouseState.metaKey,shiftKey:this._mouseState.shiftKey,leftButton:this._mouseState.leftButton,middleButton:this._mouseState.middleButton})}}class Hp{constructor(){this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._leftButton=!1,this._middleButton=!1,this._startedOnLineNumbers=!1,this._lastMouseDownPosition=null,this._lastMouseDownPositionEqualCount=0,this._lastMouseDownCount=0,this._lastSetMouseDownCountTime=0,this.isDragAndDrop=!1}get altKey(){return this._altKey}get ctrlKey(){return this._ctrlKey}get metaKey(){return this._metaKey}get shiftKey(){return this._shiftKey}get leftButton(){return this._leftButton}get middleButton(){return this._middleButton}get startedOnLineNumbers(){return this._startedOnLineNumbers}get count(){return this._lastMouseDownCount}setModifiers(e){this._altKey=e.altKey,this._ctrlKey=e.ctrlKey,this._metaKey=e.metaKey,this._shiftKey=e.shiftKey}setStartButtons(e){this._leftButton=e.leftButton,this._middleButton=e.middleButton}setStartedOnLineNumbers(e){this._startedOnLineNumbers=e}trySetCount(e,t){const i=(new Date).getTime();i-this._lastSetMouseDownCountTime>Hp.CLEAR_MOUSE_DOWN_COUNT_TIME&&(e=1),this._lastSetMouseDownCountTime=i,e>this._lastMouseDownCount+1&&(e=this._lastMouseDownCount+1),this._lastMouseDownPosition&&this._lastMouseDownPosition.equals(t)?this._lastMouseDownPositionEqualCount++:this._lastMouseDownPositionEqualCount=1,this._lastMouseDownPosition=t,this._lastMouseDownCount=Math.min(e,this._lastMouseDownPositionEqualCount)}}Hp.CLEAR_MOUSE_DOWN_COUNT_TIME=400;class Up{constructor(e,t,i,n,o){this.value=e,this.selectionStart=t,this.selectionEnd=i,this.selectionStartPosition=n,this.selectionEndPosition=o}toString(){return"[ <"+this.value+">, selectionStart: "+this.selectionStart+", selectionEnd: "+this.selectionEnd+"]"}static readFromTextArea(e){return new Up(e.getValue(),e.getSelectionStart(),e.getSelectionEnd(),null,null)}collapseSelection(){return new Up(this.value,this.value.length,this.value.length,null,null)}writeToTextArea(e,t,i){t.setValue(e,this.value),i&&t.setSelectionRange(e,this.selectionStart,this.selectionEnd)}deduceEditorPosition(e){if(e<=this.selectionStart){const t=this.value.substring(e,this.selectionStart);return this._finishDeduceEditorPosition(this.selectionStartPosition,t,-1)}if(e>=this.selectionEnd){const t=this.value.substring(this.selectionEnd,e);return this._finishDeduceEditorPosition(this.selectionEndPosition,t,1)}const t=this.value.substring(this.selectionStart,e);if(-1===t.indexOf(String.fromCharCode(8230)))return this._finishDeduceEditorPosition(this.selectionStartPosition,t,1);const i=this.value.substring(e,this.selectionEnd);return this._finishDeduceEditorPosition(this.selectionEndPosition,i,-1)}_finishDeduceEditorPosition(e,t,i){let n=0,o=-1;for(;-1!==(o=t.indexOf("\n",o+1));)n++;return[e,i*t.length,n]}static selectedText(e){return new Up(e,0,e.length,null,null)}static deduceInput(e,t,i){if(!e)return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};let n=e.value,o=e.selectionStart,s=e.selectionEnd,r=t.value,a=t.selectionStart,l=t.selectionEnd;const h=ci(n.substring(s),r.substring(l));r=r.substring(0,r.length-h);const c=(n=n.substring(0,n.length-h)).substring(0,o),d=hi(c,r.substring(0,a));if(r=r.substring(d),n=n.substring(d),a-=d,o-=d,l-=d,s-=d,i&&a===l&&n.length>0){let e=null;if(a===r.length?r.startsWith(n)&&(e=r.substring(n.length)):r.endsWith(n)&&(e=r.substring(0,r.length-n.length)),null!==e&&e.length>0&&(/\uFE0F/.test(e)||function u(e){return vi.test(e)}(e)))return{text:e,replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0}}return a===l?n===r&&0===o&&s===n.length&&a===r.length&&-1===r.indexOf("\n")&&function g(e){for(let t=0,i=e.length;te&&(c=c.substring(c.length-e,c.length)),m.length>e&&(m=m.substring(0,e)),p.length>2*e&&(p=p.substring(0,e)+String.fromCharCode(8230)+p.substring(p.length-e,p.length))}return new Up(c+p+m,c.length,c.length+p.length,new Tt(i.startLineNumber,i.startColumn),new Tt(i.endLineNumber,i.endColumn))}}var $p;!function(e){e.Tap="-monaco-textarea-synthetic-tap"}($p||($p={}));const jp={forceCopyWithSyntaxHighlighting:!1};class qp{constructor(){this._lastState=null}set(e,t){this._lastState={lastCopiedValue:e,data:t}}get(e){return this._lastState&&this._lastState.lastCopiedValue===e?this._lastState.data:(this._lastState=null,null)}}qp.INSTANCE=new qp;class Gp extends C{constructor(e,t){super(),this.textArea=t,this._onFocus=this._register(new oe),this.onFocus=this._onFocus.event,this._onBlur=this._register(new oe),this.onBlur=this._onBlur.event,this._onKeyDown=this._register(new oe),this.onKeyDown=this._onKeyDown.event,this._onKeyUp=this._register(new oe),this.onKeyUp=this._onKeyUp.event,this._onCut=this._register(new oe),this.onCut=this._onCut.event,this._onPaste=this._register(new oe),this.onPaste=this._onPaste.event,this._onType=this._register(new oe),this.onType=this._onType.event,this._onCompositionStart=this._register(new oe),this.onCompositionStart=this._onCompositionStart.event,this._onCompositionUpdate=this._register(new oe),this.onCompositionUpdate=this._onCompositionUpdate.event,this._onCompositionEnd=this._register(new oe),this.onCompositionEnd=this._onCompositionEnd.event,this._onSelectionChangeRequest=this._register(new oe),this.onSelectionChangeRequest=this._onSelectionChangeRequest.event,this._host=e,this._textArea=this._register(new Zp(t)),this._asyncTriggerCut=this._register(new $a(()=>this._onCut.fire(),0)),this._asyncFocusGainWriteScreenReaderContent=this._register(new $a(()=>this.writeScreenReaderContent("asyncFocusGain"),0)),this._textAreaState=Up.EMPTY,this._selectionChangeListener=null,this.writeScreenReaderContent("ctor"),this._hasFocus=!1,this._isDoingComposition=!1,this._nextCommand=0;let i=null;this._register(Gd(t.domNode,"keydown",e=>{(109===e.keyCode||this._isDoingComposition&&1===e.keyCode)&&e.stopPropagation(),e.equals(9)&&e.preventDefault(),i=e,this._onKeyDown.fire(e)})),this._register(Gd(t.domNode,"keyup",e=>{this._onKeyUp.fire(e)})),this._register(jd(t.domNode,"compositionstart",e=>{if(!this._isDoingComposition){if(this._isDoingComposition=!0,H&&i&&i.equals(109)&&this._textAreaState.selectionStart===this._textAreaState.selectionEnd&&this._textAreaState.selectionStart>0&&this._textAreaState.value.substr(this._textAreaState.selectionStart-1,1)===e.data&&("ArrowRight"===i.code||"ArrowLeft"===i.code))return this._textAreaState=new Up(this._textAreaState.value,this._textAreaState.selectionStart-1,this._textAreaState.selectionEnd,this._textAreaState.selectionStartPosition?new Tt(this._textAreaState.selectionStartPosition.lineNumber,this._textAreaState.selectionStartPosition.column-1):null,this._textAreaState.selectionEndPosition),void this._onCompositionStart.fire({revealDeltaColumns:-1});we?this._onCompositionStart.fire({revealDeltaColumns:-this._textAreaState.selectionStart}):(this._setAndWriteTextAreaState("compositionstart",Up.EMPTY),this._onCompositionStart.fire({revealDeltaColumns:0}))}}));const n=e=>{const t=this._textAreaState,i=Up.readFromTextArea(this._textArea);return[i,Up.deduceInput(t,i,e)]},o=()=>{const e=this._textAreaState,t=Up.readFromTextArea(this._textArea);return[t,Up.deduceAndroidCompositionInput(e,t)]},s=e=>{const t=this._textAreaState,i=Up.selectedText(e);return[i,{text:i.value,replacePrevCharCnt:t.selectionEnd-t.selectionStart,replaceNextCharCnt:0,positionDelta:0}]};this._register(jd(t.domNode,"compositionupdate",e=>{if(we){const[t,i]=o();return this._textAreaState=t,this._onType.fire(i),void this._onCompositionUpdate.fire(e)}const[t,i]=s(e.data||"");this._textAreaState=t,this._onType.fire(i),this._onCompositionUpdate.fire(e)})),this._register(jd(t.domNode,"compositionend",e=>{if(!this._isDoingComposition)return;if(this._isDoingComposition=!1,we){const[e,t]=o();return this._textAreaState=e,this._onType.fire(t),void this._onCompositionEnd.fire()}const[t,i]=s(e.data||"");this._textAreaState=t,this._onType.fire(i),(me||ge)&&(this._textAreaState=Up.readFromTextArea(this._textArea)),this._onCompositionEnd.fire()})),this._register(jd(t.domNode,"input",()=>{if(this._textArea.setIgnoreSelectionChangeTime("received input event"),this._isDoingComposition)return;const[e,t]=n(H);0===t.replacePrevCharCnt&&1===t.text.length&&di(t.text.charCodeAt(0))||(this._textAreaState=e,0===this._nextCommand?""===t.text&&0===t.replacePrevCharCnt||this._onType.fire(t):(""===t.text&&0===t.replacePrevCharCnt||this._firePaste(t.text,null),this._nextCommand=0))})),this._register(jd(t.domNode,"cut",e=>{this._textArea.setIgnoreSelectionChangeTime("received cut event"),this._ensureClipboardGetsEditorSelection(e),this._asyncTriggerCut.schedule()})),this._register(jd(t.domNode,"copy",e=>{this._ensureClipboardGetsEditorSelection(e)})),this._register(jd(t.domNode,"paste",e=>{if(this._textArea.setIgnoreSelectionChangeTime("received paste event"),Yp.canUseTextData(e)){const[t,i]=Yp.getTextData(e);""!==t&&this._firePaste(t,i)}else this._textArea.getSelectionStart()!==this._textArea.getSelectionEnd()&&this._setAndWriteTextAreaState("paste",Up.EMPTY),this._nextCommand=1})),this._register(jd(t.domNode,"focus",()=>{const e=this._hasFocus;this._setHasFocus(!0),fe&&!e&&this._hasFocus&&this._asyncFocusGainWriteScreenReaderContent.schedule()})),this._register(jd(t.domNode,"blur",()=>{this._isDoingComposition&&(this._isDoingComposition=!1,this.writeScreenReaderContent("blurWithoutCompositionEnd"),this._onCompositionEnd.fire()),this._setHasFocus(!1)})),this._register(jd(t.domNode,$p.Tap,()=>{we&&this._isDoingComposition&&(this._isDoingComposition=!1,this.writeScreenReaderContent("tapWithoutCompositionEnd"),this._onCompositionEnd.fire())}))}_installSelectionChangeListener(){let e=0;return jd(document,"selectionchange",t=>{if(!this._hasFocus)return;if(this._isDoingComposition)return;if(!me)return;const i=Date.now(),n=i-e;if(e=i,n<5)return;const o=i-this._textArea.getIgnoreSelectionChangeTime();if(this._textArea.resetSelectionChangeTime(),o<100)return;if(!this._textAreaState.selectionStartPosition||!this._textAreaState.selectionEndPosition)return;const s=this._textArea.getValue();if(this._textAreaState.value!==s)return;const r=this._textArea.getSelectionStart(),a=this._textArea.getSelectionEnd();if(this._textAreaState.selectionStart===r&&this._textAreaState.selectionEnd===a)return;const l=this._textAreaState.deduceEditorPosition(r),h=this._host.deduceModelPosition(l[0],l[1],l[2]),c=this._textAreaState.deduceEditorPosition(a),d=this._host.deduceModelPosition(c[0],c[1],c[2]),u=new ao(h.lineNumber,h.column,d.lineNumber,d.column);this._onSelectionChangeRequest.fire(u)})}dispose(){super.dispose(),this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null)}focusTextArea(){this._setHasFocus(!0),this.refreshFocusState()}isFocused(){return this._hasFocus}refreshFocusState(){const e=wu(this.textArea.domNode);e?this._setHasFocus(e.activeElement===this.textArea.domNode):Kd(this.textArea.domNode)?this._setHasFocus(document.activeElement===this.textArea.domNode):this._setHasFocus(!1)}_setHasFocus(e){this._hasFocus!==e&&(this._hasFocus=e,this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null),this._hasFocus&&(this._selectionChangeListener=this._installSelectionChangeListener()),this._hasFocus&&this.writeScreenReaderContent("focusgain"),this._hasFocus?this._onFocus.fire():this._onBlur.fire())}_setAndWriteTextAreaState(e,t){this._hasFocus||(t=t.collapseSelection()),t.writeToTextArea(e,this._textArea,this._hasFocus),this._textAreaState=t}writeScreenReaderContent(e){this._isDoingComposition||this._setAndWriteTextAreaState(e,this._host.getScreenReaderContent(this._textAreaState))}_ensureClipboardGetsEditorSelection(e){const t=this._host.getDataToCopy(Yp.canUseTextData(e)),i={version:1,isFromEmptySelection:t.isFromEmptySelection,multicursorText:t.multicursorText,mode:t.mode};qp.INSTANCE.set(ge?t.text.replace(/\r\n/g,"\n"):t.text,i),Yp.canUseTextData(e)?Yp.setTextData(e,t.text,t.html,i):this._setAndWriteTextAreaState("copy or cut",Up.selectedText(t.text))}_firePaste(e,t){t||(t=qp.INSTANCE.get(e)),this._onPaste.fire({text:e,metadata:t})}}class Yp{static canUseTextData(e){return!!e.clipboardData||!!window.clipboardData}static getTextData(e){if(e.clipboardData){e.preventDefault();const t=e.clipboardData.getData("text/plain");let i=null;const n=e.clipboardData.getData("vscode-editor-data");if("string"==typeof n)try{1!==(i=JSON.parse(n)).version&&(i=null)}catch(e){}return[t,i]}if(window.clipboardData)return e.preventDefault(),[window.clipboardData.getData("Text"),null];throw new Error("ClipboardEventUtils.getTextData: Cannot use text data!")}static setTextData(e,t,i,n){if(e.clipboardData)return e.clipboardData.setData("text/plain",t),"string"==typeof i&&e.clipboardData.setData("text/html",i),e.clipboardData.setData("vscode-editor-data",JSON.stringify(n)),void e.preventDefault();if(window.clipboardData)return window.clipboardData.setData("Text",t),void e.preventDefault();throw new Error("ClipboardEventUtils.setTextData: Cannot use text data!")}}class Zp extends C{constructor(e){super(),this._actual=e,this._ignoreSelectionChangeTime=0}setIgnoreSelectionChangeTime(e){this._ignoreSelectionChangeTime=Date.now()}getIgnoreSelectionChangeTime(){return this._ignoreSelectionChangeTime}resetSelectionChangeTime(){this._ignoreSelectionChangeTime=0}getValue(){return this._actual.domNode.value}setValue(e,t){const i=this._actual.domNode;i.value!==t&&(this.setIgnoreSelectionChangeTime("setValue"),i.value=t)}getSelectionStart(){return"backward"===this._actual.domNode.selectionDirection?this._actual.domNode.selectionEnd:this._actual.domNode.selectionStart}getSelectionEnd(){return"backward"===this._actual.domNode.selectionDirection?this._actual.domNode.selectionStart:this._actual.domNode.selectionEnd}setSelectionRange(e,t,i){const n=this._actual.domNode;let o=null;const s=wu(n),r=(o=s?s.activeElement:document.activeElement)===n;if(r&&n.selectionStart===t&&n.selectionEnd===i)ge&&window.parent!==window&&n.focus();else{if(r)return this.setIgnoreSelectionChangeTime("setSelectionRange"),n.setSelectionRange(t,i),void(ge&&window.parent!==window&&n.focus());try{const e=function a(e){let t=[];for(let i=0;e&&e.nodeType===e.ELEMENT_NODE;i++)t[i]=e.scrollTop,e=e.parentNode;return t}(n);this.setIgnoreSelectionChangeTime("setSelectionRange"),n.focus(),n.setSelectionRange(t,i),function l(e,t){for(let i=0;e&&e.nodeType===e.ELEMENT_NODE;i++)e.scrollTop!==t[i]&&(e.scrollTop=t[i]),e=e.parentNode}(n,e)}catch(e){}}}}class Xp extends Vp{constructor(e,t,i){super(e,t,i),this._register(Fg.addTarget(this.viewHelper.linesContentDomNode)),this._register(jd(this.viewHelper.linesContentDomNode,Pg.Tap,e=>this.onTap(e))),this._register(jd(this.viewHelper.linesContentDomNode,Pg.Change,e=>this.onChange(e))),this._register(jd(this.viewHelper.linesContentDomNode,Pg.Contextmenu,e=>this._onContextMenu(new Kg(e,this.viewHelper.viewDomNode),!1))),this._lastPointerType="mouse",this._register(jd(this.viewHelper.linesContentDomNode,"pointerdown",e=>{const t=e.pointerType;this._lastPointerType="mouse"!==t?"touch"===t?"touch":"pen":"mouse"}));const n=new jg(this.viewHelper.viewDomNode);this._register(n.onPointerMoveThrottled(this.viewHelper.viewDomNode,e=>this._onMouseMove(e),Wp(this.mouseTargetFactory),Vp.MOUSE_MOVE_MINIMUM_TIME)),this._register(n.onPointerUp(this.viewHelper.viewDomNode,e=>this._onMouseUp(e))),this._register(n.onPointerLeave(this.viewHelper.viewDomNode,e=>this._onMouseLeave(e))),this._register(n.onPointerDown(this.viewHelper.viewDomNode,e=>this._onMouseDown(e)))}onTap(e){if(!e.initialTarget||!this.viewHelper.linesContentDomNode.contains(e.initialTarget))return;e.preventDefault(),this.viewHelper.focusTextArea();const t=this._createMouseTarget(new Kg(e,this.viewHelper.viewDomNode),!1);t.position&&this.viewController.dispatchMouse({position:t.position,mouseColumn:t.position.column,startedOnLineNumbers:!1,mouseDownCount:e.tapCount,inSelectionMode:!1,altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1,leftButton:!1,middleButton:!1})}onChange(e){"touch"===this._lastPointerType&&this._context.model.deltaScrollNow(-e.translationX,-e.translationY)}_onMouseDown(e){"touch"!==e.browserEvent.pointerType&&super._onMouseDown(e)}}class Qp extends Vp{constructor(e,t,i){super(e,t,i),this._register(Fg.addTarget(this.viewHelper.linesContentDomNode)),this._register(jd(this.viewHelper.linesContentDomNode,Pg.Tap,e=>this.onTap(e))),this._register(jd(this.viewHelper.linesContentDomNode,Pg.Change,e=>this.onChange(e))),this._register(jd(this.viewHelper.linesContentDomNode,Pg.Contextmenu,e=>this._onContextMenu(new Kg(e,this.viewHelper.viewDomNode),!1)))}onTap(e){e.preventDefault(),this.viewHelper.focusTextArea();const t=this._createMouseTarget(new Kg(e,this.viewHelper.viewDomNode),!1);if(t.position){const e=document.createEvent("CustomEvent");e.initEvent($p.Tap,!1,!0),this.viewHelper.dispatchTextAreaEvent(e),this.viewController.moveTo(t.position)}}onChange(e){this._context.model.deltaScrollNow(-e.translationX,-e.translationY)}}class Jp extends C{constructor(e,t,i){super(),this.handler=j&&Hd.pointerEvents?this._register(new Xp(e,t,i)):window.TouchEvent?this._register(new Qp(e,t,i)):this._register(new Vp(e,t,i))}getTargetAtClientPoint(e,t){return this.handler.getTargetAtClientPoint(e,t)}}class em extends Gg{}const tm=new class{constructor(){this._onDidChangeSchema=new oe,this.onDidChangeSchema=this._onDidChangeSchema.event,this.colorSchema={type:"object",properties:{}},this.colorReferenceSchema={type:"string",enum:[],enumDescriptions:[]},this.colorsById={}}registerColor(e,t,i,n=!1,o){this.colorsById[e]={id:e,description:i,defaults:t,needsTransparency:n,deprecationMessage:o};let s={type:"string",description:i,format:"color-hex",defaultSnippets:[{body:"${1:#ff0000}"}]};return o&&(s.deprecationMessage=o),this.colorSchema.properties[e]=s,this.colorReferenceSchema.enum.push(e),this.colorReferenceSchema.enumDescriptions.push(i),this._onDidChangeSchema.fire(),e}resolveDefaultColor(e,t){const i=this.colorsById[e];if(i&&i.defaults)return f_(i.defaults[t.type],t)}getColorSchema(){return this.colorSchema}toString(){return Object.keys(this.colorsById).sort((e,t)=>{let i=-1===e.indexOf(".")?0:1,n=-1===t.indexOf(".")?0:1;return i!==n?i-n:e.localeCompare(t)}).map(e=>`- \`${e}\`: ${this.colorsById[e].description}`).join("\n")}};function im(e,t,i,n,o){return tm.registerColor(e,t,i,n,o)}an.add("base.contributions.colors",tm);const nm=im("foreground",{dark:"#CCCCCC",light:"#616161",hc:"#FFFFFF"},t(0,"Overall foreground color. This color is only used if not overridden by a component.")),om=(im("errorForeground",{dark:"#F48771",light:"#A1260D",hc:"#F48771"},t(0,"Overall foreground color for error messages. This color is only used if not overridden by a component.")),im("icon.foreground",{dark:"#C5C5C5",light:"#424242",hc:"#FFFFFF"},t(0,"The default color for icons in the workbench.")),im("focusBorder",{dark:"#007FD4",light:"#0090F1",hc:"#F38518"},t(0,"Overall border color for focused elements. This color is only used if not overridden by a component."))),sm=im("contrastBorder",{light:null,dark:null,hc:"#6FC3DF"},t(0,"An extra border around elements to separate them from others for greater contrast.")),rm=im("contrastActiveBorder",{light:null,dark:null,hc:om},t(0,"An extra border around active elements to separate them from others for greater contrast.")),am=im("textLink.foreground",{light:"#006AB1",dark:"#3794FF",hc:"#3794FF"},t(0,"Foreground color for links in text.")),lm=im("textCodeBlock.background",{light:"#dcdcdc66",dark:"#0a0a0a66",hc:uc.black},t(0,"Background color for code blocks in text.")),hm=im("widget.shadow",{dark:g_(uc.black,.36),light:g_(uc.black,.16),hc:null},t(0,"Shadow color of widgets such as find/replace inside the editor.")),cm=im("input.background",{dark:"#3C3C3C",light:uc.white,hc:uc.black},t(0,"Input box background.")),dm=im("input.foreground",{dark:nm,light:nm,hc:nm},t(0,"Input box foreground.")),um=im("input.border",{dark:null,light:null,hc:sm},t(0,"Input box border.")),gm=(im("inputOption.activeBorder",{dark:"#007ACC00",light:"#007ACC00",hc:sm},t(0,"Border color of activated options in input fields.")),im("inputOption.activeBackground",{dark:g_(om,.4),light:g_(om,.2),hc:uc.transparent},t(0,"Background color of activated options in input fields.")),im("inputOption.activeForeground",{dark:uc.white,light:uc.black,hc:null},t(0,"Foreground color of activated options in input fields.")),im("inputValidation.infoBackground",{dark:"#063B49",light:"#D6ECF2",hc:uc.black},t(0,"Input validation background color for information severity."))),pm=im("inputValidation.infoForeground",{dark:null,light:null,hc:null},t(0,"Input validation foreground color for information severity.")),mm=im("inputValidation.infoBorder",{dark:"#007acc",light:"#007acc",hc:sm},t(0,"Input validation border color for information severity.")),fm=im("inputValidation.warningBackground",{dark:"#352A05",light:"#F6F5D2",hc:uc.black},t(0,"Input validation background color for warning severity.")),_m=im("inputValidation.warningForeground",{dark:null,light:null,hc:null},t(0,"Input validation foreground color for warning severity.")),bm=im("inputValidation.warningBorder",{dark:"#B89500",light:"#B89500",hc:sm},t(0,"Input validation border color for warning severity.")),vm=im("inputValidation.errorBackground",{dark:"#5A1D1D",light:"#F2DEDE",hc:uc.black},t(0,"Input validation background color for error severity.")),Cm=im("inputValidation.errorForeground",{dark:null,light:null,hc:null},t(0,"Input validation foreground color for error severity.")),wm=im("inputValidation.errorBorder",{dark:"#BE1100",light:"#BE1100",hc:sm},t(0,"Input validation border color for error severity.")),ym=im("dropdown.background",{dark:"#3C3C3C",light:uc.white,hc:uc.black},t(0,"Dropdown background.")),Sm=im("dropdown.foreground",{dark:"#F0F0F0",light:null,hc:uc.white},t(0,"Dropdown foreground.")),Lm=im("button.foreground",{dark:uc.white,light:uc.white,hc:uc.white},t(0,"Button foreground color.")),Dm=im("button.background",{dark:"#0E639C",light:"#007ACC",hc:null},t(0,"Button background color.")),Em=im("button.hoverBackground",{dark:u_(Dm,.2),light:d_(Dm,.2),hc:null},t(0,"Button background color when hovering.")),xm=im("badge.background",{dark:"#4D4D4D",light:"#C4C4C4",hc:uc.black},t(0,"Badge background color. Badges are small information labels, e.g. for search results count.")),km=im("badge.foreground",{dark:uc.white,light:"#333",hc:uc.white},t(0,"Badge foreground color. Badges are small information labels, e.g. for search results count.")),Nm=im("scrollbar.shadow",{dark:"#000000",light:"#DDDDDD",hc:null},t(0,"Scrollbar shadow to indicate that the view is scrolled.")),Im=im("scrollbarSlider.background",{dark:uc.fromHex("#797979").transparent(.4),light:uc.fromHex("#646464").transparent(.4),hc:g_(sm,.6)},t(0,"Scrollbar slider background color.")),Tm=im("scrollbarSlider.hoverBackground",{dark:uc.fromHex("#646464").transparent(.7),light:uc.fromHex("#646464").transparent(.7),hc:g_(sm,.8)},t(0,"Scrollbar slider background color when hovering.")),Am=im("scrollbarSlider.activeBackground",{dark:uc.fromHex("#BFBFBF").transparent(.4),light:uc.fromHex("#000000").transparent(.6),hc:sm},t(0,"Scrollbar slider background color when clicked on.")),Mm=im("progressBar.background",{dark:uc.fromHex("#0E70C0"),light:uc.fromHex("#0E70C0"),hc:sm},t(0,"Background color of the progress bar that can show for long running operations.")),Om=im("editorError.background",{dark:null,light:null,hc:null},t(0,"Background color of error text in the editor. The color must not be opaque so as not to hide underlying decorations."),!0),Rm=im("editorError.foreground",{dark:"#F48771",light:"#E51400",hc:null},t(0,"Foreground color of error squigglies in the editor.")),Pm=im("editorError.border",{dark:null,light:null,hc:uc.fromHex("#E47777").transparent(.8)},t(0,"Border color of error boxes in the editor.")),Fm=im("editorWarning.background",{dark:null,light:null,hc:null},t(0,"Background color of warning text in the editor. The color must not be opaque so as not to hide underlying decorations."),!0),Bm=im("editorWarning.foreground",{dark:"#CCA700",light:"#BF8803",hc:null},t(0,"Foreground color of warning squigglies in the editor.")),Wm=im("editorWarning.border",{dark:null,light:null,hc:uc.fromHex("#FFCC00").transparent(.8)},t(0,"Border color of warning boxes in the editor.")),Vm=im("editorInfo.background",{dark:null,light:null,hc:null},t(0,"Background color of info text in the editor. The color must not be opaque so as not to hide underlying decorations."),!0),zm=im("editorInfo.foreground",{dark:"#75BEFF",light:"#75BEFF",hc:null},t(0,"Foreground color of info squigglies in the editor.")),Hm=im("editorInfo.border",{dark:null,light:null,hc:uc.fromHex("#75BEFF").transparent(.8)},t(0,"Border color of info boxes in the editor.")),Um=im("editorHint.foreground",{dark:uc.fromHex("#eeeeee").transparent(.7),light:"#6c6c6c",hc:null},t(0,"Foreground color of hint squigglies in the editor.")),Km=im("editorHint.border",{dark:null,light:null,hc:uc.fromHex("#eeeeee").transparent(.8)},t(0,"Border color of hint boxes in the editor.")),$m=im("editor.background",{light:"#fffffe",dark:"#1E1E1E",hc:uc.black},t(0,"Editor background color.")),jm=im("editor.foreground",{light:"#333333",dark:"#BBBBBB",hc:uc.white},t(0,"Editor default foreground color.")),qm=im("editorWidget.background",{dark:"#252526",light:"#F3F3F3",hc:"#0C141F"},t(0,"Background color of editor widgets, such as find/replace.")),Gm=im("editorWidget.foreground",{dark:nm,light:nm,hc:nm},t(0,"Foreground color of editor widgets, such as find/replace.")),Ym=im("editorWidget.border",{dark:"#454545",light:"#C8C8C8",hc:sm},t(0,"Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.")),Zm=(im("editorWidget.resizeBorder",{light:null,dark:null,hc:null},t(0,"Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.")),im("quickInput.background",{dark:qm,light:qm,hc:qm},t(0,"Quick picker background color. The quick picker widget is the container for pickers like the command palette."))),Xm=im("quickInput.foreground",{dark:Gm,light:Gm,hc:Gm},t(0,"Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.")),Qm=im("quickInputTitle.background",{dark:new uc(new hc(255,255,255,.105)),light:new uc(new hc(0,0,0,.06)),hc:"#000000"},t(0,"Quick picker title background color. The quick picker widget is the container for pickers like the command palette.")),Jm=im("quickInput.list.focusBackground",{dark:"#062F4A",light:"#D6EBFF",hc:null},t(0,"Quick picker background color for the focused item.")),ef=im("pickerGroup.foreground",{dark:"#3794FF",light:"#0066BF",hc:uc.white},t(0,"Quick picker color for grouping labels.")),tf=im("pickerGroup.border",{dark:"#3F3F46",light:"#CCCEDB",hc:uc.white},t(0,"Quick picker color for grouping borders.")),nf=im("editor.selectionBackground",{light:"#ADD6FF",dark:"#264F78",hc:"#f3f518"},t(0,"Color of the editor selection.")),of=im("editor.selectionForeground",{light:null,dark:null,hc:"#000000"},t(0,"Color of the selected text for high contrast.")),sf=im("editor.inactiveSelectionBackground",{light:g_(nf,.5),dark:g_(nf,.5),hc:g_(nf,.5)},t(0,"Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations."),!0),rf=im("editor.selectionHighlightBackground",{light:m_(nf,$m,.3,.6),dark:m_(nf,$m,.3,.6),hc:null},t(0,"Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations."),!0),af=im("editor.selectionHighlightBorder",{light:null,dark:null,hc:rm},t(0,"Border color for regions with the same content as the selection.")),lf=(im("editor.findMatchBackground",{light:"#A8AC94",dark:"#515C6A",hc:null},t(0,"Color of the current search match.")),im("editor.findMatchHighlightBackground",{light:"#EA5C0055",dark:"#EA5C0055",hc:null},t(0,"Color of the other search matches. The color must not be opaque so as not to hide underlying decorations."),!0)),hf=(im("editor.findRangeHighlightBackground",{dark:"#3a3d4166",light:"#b4b4b44d",hc:null},t(0,"Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations."),!0),im("editor.findMatchBorder",{light:null,dark:null,hc:rm},t(0,"Border color of the current search match.")),im("editor.findMatchHighlightBorder",{light:null,dark:null,hc:rm},t(0,"Border color of the other search matches.")),im("editor.findRangeHighlightBorder",{dark:null,light:null,hc:g_(rm,.4)},t(0,"Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations."),!0),im("editor.hoverHighlightBackground",{light:"#ADD6FF26",dark:"#264f7840",hc:"#ADD6FF26"},t(0,"Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations."),!0)),cf=im("editorHoverWidget.background",{light:qm,dark:qm,hc:qm},t(0,"Background color of the editor hover.")),df=im("editorHoverWidget.foreground",{light:Gm,dark:Gm,hc:Gm},t(0,"Foreground color of the editor hover.")),uf=im("editorHoverWidget.border",{light:Ym,dark:Ym,hc:Ym},t(0,"Border color of the editor hover.")),gf=im("editorHoverWidget.statusBarBackground",{dark:u_(cf,.2),light:d_(cf,.05),hc:qm},t(0,"Background color of the editor hover status bar.")),pf=im("editorLink.activeForeground",{dark:"#4E94CE",light:uc.blue,hc:uc.cyan},t(0,"Color of active links.")),mf=(im("editorInlineHint.foreground",{dark:qm,light:Gm,hc:qm},t(0,"Foreground color of inline hints")),im("editorInlineHint.background",{dark:Gm,light:qm,hc:Gm},t(0,"Background color of inline hints")),im("editorLightBulb.foreground",{dark:"#FFCC00",light:"#DDB100",hc:"#FFCC00"},t(0,"The color used for the lightbulb actions icon."))),ff=im("editorLightBulbAutoFix.foreground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},t(0,"The color used for the lightbulb auto fix actions icon.")),_f=new uc(new hc(155,185,85,.2)),bf=new uc(new hc(255,0,0,.2)),vf=im("diffEditor.insertedTextBackground",{dark:_f,light:_f,hc:null},t(0,"Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations."),!0),Cf=im("diffEditor.removedTextBackground",{dark:bf,light:bf,hc:null},t(0,"Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations."),!0),wf=im("diffEditor.insertedTextBorder",{dark:null,light:null,hc:"#33ff2eff"},t(0,"Outline color for the text that got inserted.")),yf=im("diffEditor.removedTextBorder",{dark:null,light:null,hc:"#FF008F"},t(0,"Outline color for text that got removed.")),Sf=im("diffEditor.border",{dark:null,light:null,hc:sm},t(0,"Border color between the two text editors.")),Lf=im("diffEditor.diagonalFill",{dark:"#cccccc33",light:"#22222233",hc:null},t(0,"Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.")),Df=im("list.focusBackground",{dark:null,light:null,hc:null},t(0,"List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),Ef=im("list.focusForeground",{dark:null,light:null,hc:null},t(0,"List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),xf=im("list.focusOutline",{dark:om,light:om,hc:rm},t(0,"List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),kf=im("list.activeSelectionBackground",{dark:"#094771",light:"#0060C0",hc:null},t(0,"List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),Nf=im("list.activeSelectionForeground",{dark:uc.white,light:uc.white,hc:null},t(0,"List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),If=im("list.inactiveSelectionBackground",{dark:"#37373D",light:"#E4E6F1",hc:null},t(0,"List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),Tf=im("list.inactiveSelectionForeground",{dark:null,light:null,hc:null},t(0,"List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),Af=im("list.inactiveFocusBackground",{dark:null,light:null,hc:null},t(0,"List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),Mf=im("list.inactiveFocusOutline",{dark:null,light:null,hc:null},t(0,"List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),Of=im("list.hoverBackground",{dark:"#2A2D2E",light:"#F0F0F0",hc:null},t(0,"List/Tree background when hovering over items using the mouse.")),Rf=im("list.hoverForeground",{dark:null,light:null,hc:null},t(0,"List/Tree foreground when hovering over items using the mouse.")),Pf=im("list.dropBackground",{dark:Df,light:Df,hc:null},t(0,"List/Tree drag and drop background when moving items around using the mouse.")),Ff=im("list.highlightForeground",{dark:"#0097fb",light:"#0066BF",hc:om},t(0,"List/Tree foreground color of the match highlights when searching inside the list/tree.")),Bf=im("listFilterWidget.background",{light:"#efc1ad",dark:"#653723",hc:uc.black},t(0,"Background color of the type filter widget in lists and trees.")),Wf=im("listFilterWidget.outline",{dark:uc.transparent,light:uc.transparent,hc:"#f38518"},t(0,"Outline color of the type filter widget in lists and trees.")),Vf=im("listFilterWidget.noMatchesOutline",{dark:"#BE1100",light:"#BE1100",hc:sm},t(0,"Outline color of the type filter widget in lists and trees, when there are no matches.")),zf=im("tree.indentGuidesStroke",{dark:"#585858",light:"#a9a9a9",hc:"#a9a9a9"},t(0,"Tree stroke color for the indentation guides.")),Hf=im("tree.tableColumnsBorder",{dark:"#CCCCCC20",light:"#61616120",hc:null},t(0,"Tree stroke color for the indentation guides.")),Uf=im("menu.border",{dark:null,light:null,hc:sm},t(0,"Border color of menus.")),Kf=im("menu.foreground",{dark:Sm,light:nm,hc:Sm},t(0,"Foreground color of menu items.")),$f=im("menu.background",{dark:ym,light:ym,hc:ym},t(0,"Background color of menu items.")),jf=im("menu.selectionForeground",{dark:Nf,light:Nf,hc:Nf},t(0,"Foreground color of the selected menu item in menus.")),qf=im("menu.selectionBackground",{dark:kf,light:kf,hc:kf},t(0,"Background color of the selected menu item in menus.")),Gf=im("menu.selectionBorder",{dark:null,light:null,hc:rm},t(0,"Border color of the selected menu item in menus.")),Yf=im("menu.separatorBackground",{dark:"#BBBBBB",light:"#888888",hc:sm},t(0,"Color of a separator menu item in menus.")),Zf=im("editor.snippetTabstopHighlightBackground",{dark:new uc(new hc(124,124,124,.3)),light:new uc(new hc(10,50,100,.2)),hc:new uc(new hc(124,124,124,.3))},t(0,"Highlight background color of a snippet tabstop.")),Xf=im("editor.snippetTabstopHighlightBorder",{dark:null,light:null,hc:null},t(0,"Highlight border color of a snippet tabstop.")),Qf=im("editor.snippetFinalTabstopHighlightBackground",{dark:null,light:null,hc:null},t(0,"Highlight background color of the final tabstop of a snippet.")),Jf=im("editor.snippetFinalTabstopHighlightBorder",{dark:"#525252",light:new uc(new hc(10,50,100,.5)),hc:"#525252"},t(0,"Highlight border color of the final tabstop of a snippet.")),e_=(im("editorOverviewRuler.findMatchForeground",{dark:"#d186167e",light:"#d186167e",hc:"#AB5A00"},t(0,"Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations."),!0),im("editorOverviewRuler.selectionHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hc:"#A0A0A0CC"},t(0,"Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations."),!0)),t_=(im("minimap.findMatchHighlight",{light:"#d18616",dark:"#d18616",hc:"#AB5A00"},t(0,"Minimap marker color for find matches."),!0),im("minimap.selectionHighlight",{light:"#ADD6FF",dark:"#264F78",hc:"#ffffff"},t(0,"Minimap marker color for the editor selection."),!0)),i_=im("minimap.errorHighlight",{dark:new uc(new hc(255,18,18,.7)),light:new uc(new hc(255,18,18,.7)),hc:new uc(new hc(255,50,50,1))},t(0,"Minimap marker color for errors.")),n_=im("minimap.warningHighlight",{dark:Bm,light:Bm,hc:Wm},t(0,"Minimap marker color for warnings.")),o_=im("minimap.background",{dark:null,light:null,hc:null},t(0,"Minimap background color.")),s_=im("minimapSlider.background",{light:g_(Im,.5),dark:g_(Im,.5),hc:g_(Im,.5)},t(0,"Minimap slider background color.")),r_=im("minimapSlider.hoverBackground",{light:g_(Tm,.5),dark:g_(Tm,.5),hc:g_(Tm,.5)},t(0,"Minimap slider background color when hovering.")),a_=im("minimapSlider.activeBackground",{light:g_(Am,.5),dark:g_(Am,.5),hc:g_(Am,.5)},t(0,"Minimap slider background color when clicked on.")),l_=im("problemsErrorIcon.foreground",{dark:Rm,light:Rm,hc:Rm},t(0,"The color used for the problems error icon.")),h_=im("problemsWarningIcon.foreground",{dark:Bm,light:Bm,hc:Bm},t(0,"The color used for the problems warning icon.")),c_=im("problemsInfoIcon.foreground",{dark:zm,light:zm,hc:zm},t(0,"The color used for the problems info icon."));function d_(e,t){return i=>{let n=f_(e,i);if(n)return n.darken(t)}}function u_(e,t){return i=>{let n=f_(e,i);if(n)return n.lighten(t)}}function g_(e,t){return i=>{let n=f_(e,i);if(n)return n.transparent(t)}}function p_(...e){return t=>{for(let i of e){let e=f_(i,t);if(e)return e}}}function m_(e,t,i,n){return o=>{let s=f_(e,o);if(s){let e=f_(t,o);return e?s.isDarkerThan(e)?uc.getLighterColor(s,e,i).transparent(n):uc.getDarkerColor(s,e,i).transparent(n):s.transparent(i*n)}}}function f_(e,t){if(null!==e)return"string"==typeof e?"#"===e[0]?uc.fromHex(e):t.getColor(e):e instanceof uc?e:"function"==typeof e?e(t):void 0}let __=an.as("base.contributions.json");__.registerSchema("vscode://schemas/workbench-colors",tm.getColorSchema());const b_=new $a(()=>__.notifySchemaChanged("vscode://schemas/workbench-colors"),200);tm.onDidChangeSchema(()=>{b_.isScheduled()||b_.schedule()});const v_=im("editor.lineHighlightBackground",{dark:null,light:null,hc:null},t(0,"Background color for the highlight of line at the cursor position.")),C_=im("editor.lineHighlightBorder",{dark:"#282828",light:"#eeeeee",hc:"#f38518"},t(0,"Background color for the border around the line at the cursor position.")),w_=im("editor.rangeHighlightBackground",{dark:"#ffffff0b",light:"#fdff0033",hc:null},t(0,"Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations."),!0),y_=im("editor.rangeHighlightBorder",{dark:null,light:null,hc:rm},t(0,"Background color of the border around highlighted ranges."),!0),S_=im("editor.symbolHighlightBackground",{dark:lf,light:lf,hc:null},t(0,"Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations."),!0),L_=im("editor.symbolHighlightBorder",{dark:null,light:null,hc:rm},t(0,"Background color of the border around highlighted symbols."),!0),D_=im("editorCursor.foreground",{dark:"#AEAFAD",light:uc.black,hc:uc.white},t(0,"Color of the editor cursor.")),E_=im("editorCursor.background",null,t(0,"The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.")),x_=im("editorWhitespace.foreground",{dark:"#e3e4e229",light:"#33333333",hc:"#e3e4e229"},t(0,"Color of whitespace characters in the editor.")),k_=im("editorIndentGuide.background",{dark:x_,light:x_,hc:x_},t(0,"Color of the editor indentation guides.")),N_=im("editorIndentGuide.activeBackground",{dark:x_,light:x_,hc:x_},t(0,"Color of the active editor indentation guides.")),I_=im("editorLineNumber.foreground",{dark:"#858585",light:"#237893",hc:uc.white},t(0,"Color of editor line numbers.")),T_=im("editorActiveLineNumber.foreground",{dark:"#c6c6c6",light:"#0B216F",hc:rm},t(0,"Color of editor active line number"),!1,t(0,"Id is deprecated. Use 'editorLineNumber.activeForeground' instead.")),A_=im("editorLineNumber.activeForeground",{dark:T_,light:T_,hc:T_},t(0,"Color of editor active line number")),M_=im("editorRuler.foreground",{dark:"#5A5A5A",light:uc.lightgrey,hc:uc.white},t(0,"Color of the editor rulers.")),O_=im("editorCodeLens.foreground",{dark:"#999999",light:"#999999",hc:"#999999"},t(0,"Foreground color of editor CodeLens")),R_=im("editorBracketMatch.background",{dark:"#0064001a",light:"#0064001a",hc:"#0064001a"},t(0,"Background color behind matching brackets")),P_=im("editorBracketMatch.border",{dark:"#888",light:"#B9B9B9",hc:sm},t(0,"Color for matching brackets boxes")),F_=im("editorOverviewRuler.border",{dark:"#7f7f7f4d",light:"#7f7f7f4d",hc:"#7f7f7f4d"},t(0,"Color of the overview ruler border.")),B_=im("editorOverviewRuler.background",null,t(0,"Background color of the editor overview ruler. Only used when the minimap is enabled and placed on the right side of the editor.")),W_=im("editorGutter.background",{dark:$m,light:$m,hc:$m},t(0,"Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.")),V_=im("editorUnnecessaryCode.border",{dark:null,light:null,hc:uc.fromHex("#fff").transparent(.8)},t(0,"Border color of unnecessary (unused) source code in the editor.")),z_=im("editorUnnecessaryCode.opacity",{dark:uc.fromHex("#000a"),light:uc.fromHex("#0007"),hc:null},t(0,"Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the 'editorUnnecessaryCode.border' theme color to underline unnecessary code instead of fading it out.")),H_=new uc(new hc(0,122,204,.6)),U_=(im("editorOverviewRuler.rangeHighlightForeground",{dark:H_,light:H_,hc:H_},t(0,"Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations."),!0),im("editorOverviewRuler.errorForeground",{dark:new uc(new hc(255,18,18,.7)),light:new uc(new hc(255,18,18,.7)),hc:new uc(new hc(255,50,50,1))},t(0,"Overview ruler marker color for errors."))),K_=im("editorOverviewRuler.warningForeground",{dark:Bm,light:Bm,hc:Wm},t(0,"Overview ruler marker color for warnings.")),$_=im("editorOverviewRuler.infoForeground",{dark:zm,light:zm,hc:Hm},t(0,"Overview ruler marker color for infos."));Cn((e,t)=>{const i=e.getColor($m);i&&t.addRule(`.monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { background-color: ${i}; }`);const n=e.getColor(jm);n&&t.addRule(`.monaco-editor, .monaco-editor .inputarea.ime-input { color: ${n}; }`);const o=e.getColor(W_);o&&t.addRule(`.monaco-editor .margin { background-color: ${o}; }`);const s=e.getColor(w_);s&&t.addRule(`.monaco-editor .rangeHighlight { background-color: ${s}; }`);const r=e.getColor(y_);r&&t.addRule(`.monaco-editor .rangeHighlight { border: 1px ${"hc"===e.type?"dotted":"solid"} ${r}; }`);const a=e.getColor(S_);a&&t.addRule(`.monaco-editor .symbolHighlight { background-color: ${a}; }`);const l=e.getColor(L_);l&&t.addRule(`.monaco-editor .symbolHighlight { border: 1px ${"hc"===e.type?"dotted":"solid"} ${l}; }`);const h=e.getColor(x_);h&&(t.addRule(`.monaco-editor .mtkw { color: ${h} !important; }`),t.addRule(`.monaco-editor .mtkz { color: ${h} !important; }`))});class j_ extends em{constructor(e){super(),this._context=e,this._readConfig(),this._lastCursorModelPosition=new Tt(1,1),this._renderResult=null,this._activeLineNumber=1,this._context.addEventHandler(this)}_readConfig(){const e=this._context.configuration.options;this._lineHeight=e.get(54);const t=e.get(55);this._renderLineNumbers=t.renderType,this._renderCustomLineNumbers=t.renderFn,this._renderFinalNewline=e.get(81);const i=e.get(129);this._lineNumbersLeft=i.lineNumbersLeft,this._lineNumbersWidth=i.lineNumbersWidth}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){return this._readConfig(),!0}onCursorStateChanged(e){const t=e.selections[0].getPosition();this._lastCursorModelPosition=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(t);let i=!1;return this._activeLineNumber!==t.lineNumber&&(this._activeLineNumber=t.lineNumber,i=!0),2!==this._renderLineNumbers&&3!==this._renderLineNumbers||(i=!0),i}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_getLineRenderLineNumber(e){const t=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Tt(e,1));if(1!==t.column)return"";const i=t.lineNumber;if(this._renderCustomLineNumbers)return this._renderCustomLineNumbers(i);if(2===this._renderLineNumbers){const e=Math.abs(this._lastCursorModelPosition.lineNumber-i);return 0===e?''+i+"":String(e)}return 3===this._renderLineNumbers?this._lastCursorModelPosition.lineNumber===i?String(i):i%10==0?String(i):"":String(i)}prepareRender(e){if(0===this._renderLineNumbers)return void(this._renderResult=null);const t=U?this._lineHeight%2==0?" lh-even":" lh-odd":"",i=e.visibleRange.startLineNumber,n=e.visibleRange.endLineNumber,o='

":""}this._renderResult=r}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}j_.CLASS_NAME="line-numbers",Cn((e,t)=>{const i=e.getColor(I_);i&&t.addRule(`.monaco-editor .line-numbers { color: ${i}; }`);const n=e.getColor(A_);n&&t.addRule(`.monaco-editor .line-numbers.active-line-number { color: ${n}; }`)});class q_ extends Yg{constructor(e){super(e);const t=this._context.configuration.options,i=t.get(129);this._canUseLayerHinting=!t.get(25),this._contentLeft=i.contentLeft,this._glyphMarginLeft=i.glyphMarginLeft,this._glyphMarginWidth=i.glyphMarginWidth,this._domNode=Mg(document.createElement("div")),this._domNode.setClassName(q_.OUTER_CLASS_NAME),this._domNode.setPosition("absolute"),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true"),this._glyphMarginBackgroundDomNode=Mg(document.createElement("div")),this._glyphMarginBackgroundDomNode.setClassName(q_.CLASS_NAME),this._domNode.appendChild(this._glyphMarginBackgroundDomNode)}dispose(){super.dispose()}getDomNode(){return this._domNode}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._canUseLayerHinting=!t.get(25),this._contentLeft=i.contentLeft,this._glyphMarginLeft=i.glyphMarginLeft,this._glyphMarginWidth=i.glyphMarginWidth,!0}onScrollChanged(e){return super.onScrollChanged(e)||e.scrollTopChanged}prepareRender(e){}render(e){this._domNode.setLayerHinting(this._canUseLayerHinting),this._domNode.setContain("strict"),this._domNode.setTop(-(e.scrollTop-e.bigNumbersDelta));const t=Math.min(e.scrollHeight,1e6);this._domNode.setHeight(t),this._domNode.setWidth(this._contentLeft),this._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft),this._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth),this._glyphMarginBackgroundDomNode.setHeight(t)}}q_.CLASS_NAME="glyph-margin",q_.OUTER_CLASS_NAME="margin";const G_="monaco-mouse-cursor-text";class Y_{constructor(e,t,i){this.top=e,this.left=t,this.width=i}setWidth(e){return new Y_(this.top,this.left,e)}}const Z_=ge;class X_ extends Yg{constructor(e,i,n){super(e),this._primaryCursorPosition=new Tt(1,1),this._primaryCursorVisibleRange=null,this._viewController=i,this._viewHelper=n,this._scrollLeft=0,this._scrollTop=0;const o=this._context.configuration.options,s=o.get(129);this._setAccessibilityOptions(o),this._contentLeft=s.contentLeft,this._contentWidth=s.contentWidth,this._contentHeight=s.height,this._fontInfo=o.get(38),this._lineHeight=o.get(54),this._emptySelectionClipboard=o.get(28),this._copyWithSyntaxHighlighting=o.get(18),this._visibleTextArea=null,this._selections=[new ao(1,1,1,1)],this._modelSelections=[new ao(1,1,1,1)],this._lastRenderPosition=null,this.textArea=Mg(document.createElement("textarea")),Zg.write(this.textArea,6),this.textArea.setClassName(`inputarea ${G_}`),this.textArea.setAttribute("wrap","off"),this.textArea.setAttribute("autocorrect","off"),this.textArea.setAttribute("autocapitalize","off"),this.textArea.setAttribute("autocomplete","off"),this.textArea.setAttribute("spellcheck","false"),this.textArea.setAttribute("aria-label",this._getAriaLabel(o)),this.textArea.setAttribute("tabindex",String(o.get(112))),this.textArea.setAttribute("role","textbox"),this.textArea.setAttribute("aria-roledescription",t(0,"editor")),this.textArea.setAttribute("aria-multiline","true"),this.textArea.setAttribute("aria-haspopup","false"),this.textArea.setAttribute("aria-autocomplete","both"),$&&o.get(77)&&this.textArea.setAttribute("readonly","true"),this.textAreaCover=Mg(document.createElement("div")),this.textAreaCover.setPosition("absolute");const r={getLineCount:()=>this._context.model.getLineCount(),getLineMaxColumn:e=>this._context.model.getLineMaxColumn(e),getValueInRange:(e,t)=>this._context.model.getValueInRange(e,t)};this._textAreaInput=this._register(new Gp({getDataToCopy:e=>{const t=this._context.model.getPlainTextToCopy(this._modelSelections,this._emptySelectionClipboard,z),i=this._context.model.getEOL(),n=this._emptySelectionClipboard&&1===this._modelSelections.length&&this._modelSelections[0].isEmpty(),o=Array.isArray(t)?t:null,s=Array.isArray(t)?t.join(i):t;let r=void 0,a=null;if(e&&(jp.forceCopyWithSyntaxHighlighting||this._copyWithSyntaxHighlighting&&s.length<65536)){const e=this._context.model.getRichTextToCopy(this._modelSelections,this._emptySelectionClipboard);e&&(r=e.html,a=e.mode)}return{isFromEmptySelection:n,multicursorText:o,text:s,html:r,mode:a}},getScreenReaderContent:e=>{if(1===this._accessibilitySupport){if(H){const e=this._selections[0];if(e.isEmpty()){const t=e.getStartPosition();let i=this._getWordBeforePosition(t);if(0===i.length&&(i=this._getCharacterBeforePosition(t)),i.length>0)return new Up(i,i.length,i.length,t,t)}}return Up.EMPTY}if(we){const e=this._selections[0];if(e.isEmpty()){const t=e.getStartPosition(),[i,n]=this._getAndroidWordAtPosition(t);if(i.length>0)return new Up(i,n,n,t,t)}return Up.EMPTY}return Kp.fromEditorSelection(e,r,this._selections[0],this._accessibilityPageSize,0===this._accessibilitySupport)},deduceModelPosition:(e,t,i)=>this._context.model.deduceModelPositionRelativeToViewPosition(e,t,i)},this.textArea)),this._register(this._textAreaInput.onKeyDown(e=>{this._viewController.emitKeyDown(e)})),this._register(this._textAreaInput.onKeyUp(e=>{this._viewController.emitKeyUp(e)})),this._register(this._textAreaInput.onPaste(e=>{let t=!1,i=null,n=null;e.metadata&&(t=this._emptySelectionClipboard&&!!e.metadata.isFromEmptySelection,i=void 0!==e.metadata.multicursorText?e.metadata.multicursorText:null,n=e.metadata.mode),this._viewController.paste(e.text,t,i,n)})),this._register(this._textAreaInput.onCut(()=>{this._viewController.cut()})),this._register(this._textAreaInput.onType(e=>{e.replacePrevCharCnt||e.replaceNextCharCnt||e.positionDelta?this._viewController.compositionType(e.text,e.replacePrevCharCnt,e.replaceNextCharCnt,e.positionDelta):this._viewController.type(e.text)})),this._register(this._textAreaInput.onSelectionChangeRequest(e=>{this._viewController.setSelection(e)})),this._register(this._textAreaInput.onCompositionStart(e=>{const t=this._selections[0].startLineNumber,i=this._selections[0].startColumn+e.revealDeltaColumns;this._context.model.revealRange("keyboard",!0,new ro(t,i,t,i),0,1);const n=this._viewHelper.visibleRangeForPositionRelativeToEditor(t,i);n&&(this._visibleTextArea=new Y_(this._context.viewLayout.getVerticalOffsetForLineNumber(t),n.left,Z_?0:1),this._render()),this.textArea.setClassName(`inputarea ${G_} ime-input`),this._viewController.compositionStart(),this._context.model.onCompositionStart()})),this._register(this._textAreaInput.onCompositionUpdate(e=>{this._visibleTextArea&&(this._visibleTextArea=this._visibleTextArea.setWidth(function t(e,i){const n=document.createElement("canvas").getContext("2d");n.font=function o(e){return function t(e,i,n,o,s){return`${e} normal ${i} ${n}px / ${o}px ${s}`}("normal",e.fontWeight,e.fontSize,e.lineHeight,e.fontFamily)}(i);const s=n.measureText(e);return ge?s.width+2:s.width}(e.data,this._fontInfo)),this._render())})),this._register(this._textAreaInput.onCompositionEnd(()=>{this._visibleTextArea=null,this._render(),this.textArea.setClassName(`inputarea ${G_}`),this._viewController.compositionEnd(),this._context.model.onCompositionEnd()})),this._register(this._textAreaInput.onFocus(()=>{this._context.model.setHasFocus(!0)})),this._register(this._textAreaInput.onBlur(()=>{this._context.model.setHasFocus(!1)}))}dispose(){super.dispose()}_getAndroidWordAtPosition(e){const t=this._context.model.getLineContent(e.lineNumber),i=Ir('`~!@#$%^&*()-=+[{]}\\|;:",.<>/?');let n=!0,o=e.column,s=!0,r=e.column,a=0;for(;a<50&&(n||s);){if(n&&o<=1&&(n=!1),n){const e=t.charCodeAt(o-2);0!==i.get(e)?n=!1:o--}if(s&&r>t.length&&(s=!1),s){const e=t.charCodeAt(r-1);0!==i.get(e)?s=!1:r++}a++}return[t.substring(o-1,r-1),e.column-o]}_getWordBeforePosition(e){const t=this._context.model.getLineContent(e.lineNumber),i=Ir(this._context.configuration.options.get(115));let n=e.column,o=0;for(;n>1;){const s=t.charCodeAt(n-2);if(0!==i.get(s)||o>50)return t.substring(n-1,e.column-1);o++,n--}return t.substring(0,e.column-1)}_getCharacterBeforePosition(e){if(e.column>1){const t=this._context.model.getLineContent(e.lineNumber).charAt(e.column-2);if(!di(t.charCodeAt(0)))return t}return""}_getAriaLabel(e){return 1===e.get(2)?t(0,"The editor is not accessible at this time. Press {0} for options.",U?"Shift+Alt+F1":"Alt+F1"):e.get(4)}_setAccessibilityOptions(e){this._accessibilitySupport=e.get(2);const t=e.get(3);this._accessibilityPageSize=2===this._accessibilitySupport&&t===Wo.accessibilityPageSize.defaultValue?100:t}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._setAccessibilityOptions(t),this._contentLeft=i.contentLeft,this._contentWidth=i.contentWidth,this._contentHeight=i.height,this._fontInfo=t.get(38),this._lineHeight=t.get(54),this._emptySelectionClipboard=t.get(28),this._copyWithSyntaxHighlighting=t.get(18),this.textArea.setAttribute("aria-label",this._getAriaLabel(t)),this.textArea.setAttribute("tabindex",String(t.get(112))),$&&e.hasChanged(77)&&(t.get(77)?this.textArea.setAttribute("readonly","true"):this.textArea.removeAttribute("readonly")),e.hasChanged(2)&&this._textAreaInput.writeScreenReaderContent("strategy changed"),!0}onCursorStateChanged(e){return this._selections=e.selections.slice(0),this._modelSelections=e.modelSelections.slice(0),this._textAreaInput.writeScreenReaderContent("selection changed"),!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return this._scrollLeft=e.scrollLeft,this._scrollTop=e.scrollTop,!0}onZonesChanged(e){return!0}isFocused(){return this._textAreaInput.isFocused()}focusTextArea(){this._textAreaInput.focusTextArea()}getLastRenderData(){return this._lastRenderPosition}setAriaOptions(e){e.activeDescendant?(this.textArea.setAttribute("aria-haspopup","true"),this.textArea.setAttribute("aria-autocomplete","list"),this.textArea.setAttribute("aria-activedescendant",e.activeDescendant)):(this.textArea.setAttribute("aria-haspopup","false"),this.textArea.setAttribute("aria-autocomplete","both"),this.textArea.removeAttribute("aria-activedescendant")),e.role&&this.textArea.setAttribute("role",e.role)}prepareRender(e){this._primaryCursorPosition=new Tt(this._selections[0].positionLineNumber,this._selections[0].positionColumn),this._primaryCursorVisibleRange=e.visibleRangeForPosition(this._primaryCursorPosition)}render(e){this._textAreaInput.writeScreenReaderContent("render"),this._render()}_render(){if(this._visibleTextArea)return void this._renderInsideEditor(null,this._visibleTextArea.top-this._scrollTop,this._contentLeft+this._visibleTextArea.left-this._scrollLeft,this._visibleTextArea.width,this._lineHeight);if(!this._primaryCursorVisibleRange)return void this._renderAtTopLeft();const e=this._contentLeft+this._primaryCursorVisibleRange.left-this._scrollLeft;if(ethis._contentLeft+this._contentWidth)return void this._renderAtTopLeft();const t=this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber)-this._scrollTop;t<0||t>this._contentHeight?this._renderAtTopLeft():this._renderInsideEditor(this._primaryCursorPosition,t,e,Z_?0:1,H?this._lineHeight:Z_?0:1)}_renderInsideEditor(e,t,i,n,o){this._lastRenderPosition=e;const s=this.textArea,r=this.textAreaCover;Tg.applyFontInfo(s,this._fontInfo),s.setTop(t),s.setLeft(i),s.setWidth(n),s.setHeight(o),r.setTop(0),r.setLeft(0),r.setWidth(0),r.setHeight(0)}_renderAtTopLeft(){this._lastRenderPosition=null;const e=this.textArea,t=this.textAreaCover;if(Tg.applyFontInfo(e,this._fontInfo),e.setTop(0),e.setLeft(0),t.setTop(0),t.setLeft(0),Z_)return e.setWidth(0),e.setHeight(0),t.setWidth(0),void t.setHeight(0);e.setWidth(1),e.setHeight(1),t.setWidth(1),t.setHeight(1);const i=this._context.configuration.options;i.get(44)?t.setClassName("monaco-editor-background textAreaCover "+q_.OUTER_CLASS_NAME):0!==i.get(55).renderType?t.setClassName("monaco-editor-background textAreaCover "+j_.CLASS_NAME):t.setClassName("monaco-editor-background textAreaCover")}}class Q_{constructor(e,t,i,n){this.configuration=e,this.viewModel=t,this.userInputEvents=i,this.commandDelegate=n}paste(e,t,i,n){this.commandDelegate.paste(e,t,i,n)}type(e){this.commandDelegate.type(e)}compositionType(e,t,i,n){this.commandDelegate.compositionType(e,t,i,n)}compositionStart(){this.commandDelegate.startComposition()}compositionEnd(){this.commandDelegate.endComposition()}cut(){this.commandDelegate.cut()}setSelection(e){md.SetSelection.runCoreEditorCommand(this.viewModel,{source:"keyboard",selection:e})}_validateViewColumn(e){const t=this.viewModel.getLineMinColumn(e.lineNumber);return e.column=4?this._selectAll():3===e.mouseDownCount?this._hasMulticursorModifier(e)?e.inSelectionMode?this._lastCursorLineSelectDrag(e.position):this._lastCursorLineSelect(e.position):e.inSelectionMode?this._lineSelectDrag(e.position):this._lineSelect(e.position):2===e.mouseDownCount?this._hasMulticursorModifier(e)?this._lastCursorWordSelect(e.position):e.inSelectionMode?this._wordSelectDrag(e.position):this._wordSelect(e.position):this._hasMulticursorModifier(e)?this._hasNonMulticursorModifier(e)||(e.shiftKey?this._columnSelect(e.position,e.mouseColumn,!0):e.inSelectionMode?this._lastCursorMoveToSelect(e.position):this._createCursor(e.position,!1)):e.inSelectionMode?e.altKey?this._columnSelect(e.position,e.mouseColumn,!0):n?this._columnSelect(e.position,e.mouseColumn,!0):this._moveToSelect(e.position):this.moveTo(e.position)}_usualArgs(e){return e=this._validateViewColumn(e),{source:"mouse",position:this._convertViewToModelPosition(e),viewPosition:e}}moveTo(e){md.MoveTo.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_moveToSelect(e){md.MoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_columnSelect(e,t,i){e=this._validateViewColumn(e),md.ColumnSelect.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(e),viewPosition:e,mouseColumn:t,doColumnSelect:i})}_createCursor(e,t){e=this._validateViewColumn(e),md.CreateCursor.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(e),viewPosition:e,wholeLine:t})}_lastCursorMoveToSelect(e){md.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_wordSelect(e){md.WordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_wordSelectDrag(e){md.WordSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lastCursorWordSelect(e){md.LastCursorWordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lineSelect(e){md.LineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lineSelectDrag(e){md.LineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lastCursorLineSelect(e){md.LastCursorLineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lastCursorLineSelectDrag(e){md.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_selectAll(){md.SelectAll.runCoreEditorCommand(this.viewModel,{source:"mouse"})}_convertViewToModelPosition(e){return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(e)}emitKeyDown(e){this.userInputEvents.emitKeyDown(e)}emitKeyUp(e){this.userInputEvents.emitKeyUp(e)}emitContextMenu(e){this.userInputEvents.emitContextMenu(e)}emitMouseMove(e){this.userInputEvents.emitMouseMove(e)}emitMouseLeave(e){this.userInputEvents.emitMouseLeave(e)}emitMouseUp(e){this.userInputEvents.emitMouseUp(e)}emitMouseDown(e){this.userInputEvents.emitMouseDown(e)}emitMouseDrag(e){this.userInputEvents.emitMouseDrag(e)}emitMouseDrop(e){this.userInputEvents.emitMouseDrop(e)}emitMouseDropCanceled(){this.userInputEvents.emitMouseDropCanceled()}emitMouseWheel(e){this.userInputEvents.emitMouseWheel(e)}}class J_{constructor(e){this.onKeyDown=null,this.onKeyUp=null,this.onContextMenu=null,this.onMouseMove=null,this.onMouseLeave=null,this.onMouseDown=null,this.onMouseUp=null,this.onMouseDrag=null,this.onMouseDrop=null,this.onMouseDropCanceled=null,this.onMouseWheel=null,this._coordinatesConverter=e}emitKeyDown(e){this.onKeyDown&&this.onKeyDown(e)}emitKeyUp(e){this.onKeyUp&&this.onKeyUp(e)}emitContextMenu(e){this.onContextMenu&&this.onContextMenu(this._convertViewToModelMouseEvent(e))}emitMouseMove(e){this.onMouseMove&&this.onMouseMove(this._convertViewToModelMouseEvent(e))}emitMouseLeave(e){this.onMouseLeave&&this.onMouseLeave(this._convertViewToModelMouseEvent(e))}emitMouseDown(e){this.onMouseDown&&this.onMouseDown(this._convertViewToModelMouseEvent(e))}emitMouseUp(e){this.onMouseUp&&this.onMouseUp(this._convertViewToModelMouseEvent(e))}emitMouseDrag(e){this.onMouseDrag&&this.onMouseDrag(this._convertViewToModelMouseEvent(e))}emitMouseDrop(e){this.onMouseDrop&&this.onMouseDrop(this._convertViewToModelMouseEvent(e))}emitMouseDropCanceled(){this.onMouseDropCanceled&&this.onMouseDropCanceled()}emitMouseWheel(e){this.onMouseWheel&&this.onMouseWheel(e)}_convertViewToModelMouseEvent(e){return e.target?{event:e.event,target:this._convertViewToModelMouseTarget(e.target)}:e}_convertViewToModelMouseTarget(e){return J_.convertViewToModelMouseTarget(e,this._coordinatesConverter)}static convertViewToModelMouseTarget(e,t){return new eb(e.element,e.type,e.mouseColumn,e.position?t.convertViewPositionToModelPosition(e.position):null,e.range?t.convertViewRangeToModelRange(e.range):null,e.detail)}}class eb{constructor(e,t,i,n,o,s){this.element=e,this.type=t,this.mouseColumn=i,this.position=n,this.range=o,this.detail=s}toString(){return Ip.toString(this)}}var tb;class ib{constructor(e){this._createLine=e,this._set(1,[])}flush(){this._set(1,[])}_set(e,t){this._lines=t,this._rendLineNumberStart=e}_get(){return{rendLineNumberStart:this._rendLineNumberStart,lines:this._lines}}getStartLineNumber(){return this._rendLineNumberStart}getEndLineNumber(){return this._rendLineNumberStart+this._lines.length-1}getCount(){return this._lines.length}getLine(e){const t=e-this._rendLineNumberStart;if(t<0||t>=this._lines.length)throw new Error("Illegal value for lineNumber");return this._lines[t]}onLinesDeleted(e,t){if(0===this.getCount())return null;const i=this.getStartLineNumber(),n=this.getEndLineNumber();if(tn)return null;let o=0,s=0;for(let r=i;r<=n;r++){const i=r-this._rendLineNumberStart;e<=r&&r<=t&&(0===s?(o=i,s=1):s++)}if(e=i&&s<=n&&(this._lines[s-this._rendLineNumberStart].onContentChanged(),o=!0);return o}onLinesInserted(e,t){if(0===this.getCount())return null;const i=t-e+1,n=this.getStartLineNumber(),o=this.getEndLineNumber();if(e<=n)return this._rendLineNumberStart+=i,null;if(e>o)return null;if(i+e>o)return this._lines.splice(e-this._rendLineNumberStart,o-e+1);const s=[];for(let e=0;ei)continue;const r=Math.max(t,s.fromLineNumber),a=Math.min(i,s.toLineNumber);for(let e=r;e<=a;e++)this._lines[e-this._rendLineNumberStart].onTokensChanged(),n=!0}return n}}class nb{constructor(e){this._host=e,this.domNode=this._createDomNode(),this._linesCollection=new ib(()=>this._host.createVisibleLine())}_createDomNode(){const e=Mg(document.createElement("div"));return e.setClassName("view-layer"),e.setPosition("absolute"),e.domNode.setAttribute("role","presentation"),e.domNode.setAttribute("aria-hidden","true"),e}onConfigurationChanged(e){return!!e.hasChanged(129)}onFlushed(e){return this._linesCollection.flush(),!0}onLinesChanged(e){return this._linesCollection.onLinesChanged(e.fromLineNumber,e.toLineNumber)}onLinesDeleted(e){const t=this._linesCollection.onLinesDeleted(e.fromLineNumber,e.toLineNumber);if(t)for(let e=0,i=t.length;et){const e=t,s=Math.min(i,o.rendLineNumberStart-1);e<=s&&(this._insertLinesBefore(o,e,s,n,t),o.linesLength+=s-e+1)}else if(o.rendLineNumberStart0&&(this._removeLinesBefore(o,e),o.linesLength-=e)}if(o.rendLineNumberStart=t,o.rendLineNumberStart+o.linesLength-1i){const e=Math.max(0,i-o.rendLineNumberStart+1),t=o.linesLength-1-e+1;t>0&&(this._removeLinesAfter(o,t),o.linesLength-=t)}return this._finishRendering(o,!1,n),o}_renderUntouchedLines(e,t,i,n,o){const s=e.rendLineNumberStart,r=e.lines;for(let e=t;e<=i;e++){const t=s+e;r[e].layoutLine(t,n[t-o])}}_insertLinesBefore(e,t,i,n,o){const s=[];let r=0;for(let e=t;e<=i;e++)s[r++]=this.host.createVisibleLine();e.lines=s.concat(e.lines)}_removeLinesBefore(e,t){for(let i=0;i=0;t--){const i=e.lines[t];n[t]&&(i.setDomNode(s),s=s.previousSibling)}}_finishRenderingInvalidLines(e,t,i){const n=document.createElement("div");ob._ttPolicy&&(t=ob._ttPolicy.createHTML(t)),n.innerHTML=t;for(let t=0;te}),ob._sb=cs(1e5);class sb extends Yg{constructor(e){super(e),this._visibleLines=new nb(this),this.domNode=this._visibleLines.domNode,this._dynamicOverlays=[],this._isFocused=!1,this.domNode.setClassName("view-overlays")}shouldRender(){if(super.shouldRender())return!0;for(let e=0,t=this._dynamicOverlays.length;ee.shouldRender());for(let i=0,n=t.length;i'),n.appendASCIIString(o),n.appendASCIIString(""),!0)}layoutLine(e,t){this._domNode&&(this._domNode.setTop(t),this._domNode.setHeight(this._lineHeight))}}class ab extends sb{constructor(e){super(e);const t=this._context.configuration.options.get(129);this._contentWidth=t.contentWidth,this.domNode.setHeight(0)}onConfigurationChanged(e){const t=this._context.configuration.options.get(129);return this._contentWidth=t.contentWidth,super.onConfigurationChanged(e)||!0}onScrollChanged(e){return super.onScrollChanged(e)||e.scrollWidthChanged}_viewOverlaysRender(e){super._viewOverlaysRender(e),this.domNode.setWidth(Math.max(e.scrollWidth,this._contentWidth))}}class lb extends sb{constructor(e){super(e);const t=this._context.configuration.options,i=t.get(129);this._contentLeft=i.contentLeft,this.domNode.setClassName("margin-view-overlays"),this.domNode.setWidth(1),Tg.applyFontInfo(this.domNode,t.get(38))}onConfigurationChanged(e){const t=this._context.configuration.options;Tg.applyFontInfo(this.domNode,t.get(38));const i=t.get(129);return this._contentLeft=i.contentLeft,super.onConfigurationChanged(e)||!0}onScrollChanged(e){return super.onScrollChanged(e)||e.scrollHeightChanged}_viewOverlaysRender(e){super._viewOverlaysRender(e);const t=Math.min(e.scrollHeight,1e6);this.domNode.setHeight(t),this.domNode.setWidth(this._contentLeft)}}class hb{constructor(e,t){this.top=e,this.left=t}}class cb extends Yg{constructor(e,t){super(e),this._viewDomNode=t,this._widgets={},this.domNode=Mg(document.createElement("div")),Zg.write(this.domNode,1),this.domNode.setClassName("contentWidgets"),this.domNode.setPosition("absolute"),this.domNode.setTop(0),this.overflowingContentWidgetsDomNode=Mg(document.createElement("div")),Zg.write(this.overflowingContentWidgetsDomNode,2),this.overflowingContentWidgetsDomNode.setClassName("overflowingContentWidgets")}dispose(){super.dispose(),this._widgets={}}onConfigurationChanged(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].onConfigurationChanged(e);return!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLineMappingChanged(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].onLineMappingChanged(e);return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return!0}onZonesChanged(e){return!0}addWidget(e){const t=new db(this._context,this._viewDomNode,e);this._widgets[t.id]=t,t.allowEditorOverflow?this.overflowingContentWidgetsDomNode.appendChild(t.domNode):this.domNode.appendChild(t.domNode),this.setShouldRender()}setWidgetPosition(e,t,i){this._widgets[e.getId()].setPosition(t,i),this.setShouldRender()}removeWidget(e){const t=e.getId();if(this._widgets.hasOwnProperty(t)){const e=this._widgets[t];delete this._widgets[t];const i=e.domNode.domNode;i.parentNode.removeChild(i),i.removeAttribute("monaco-visible-content-widget"),this.setShouldRender()}}shouldSuppressMouseDownOnWidget(e){return!!this._widgets.hasOwnProperty(e)&&this._widgets[e].suppressMouseDown}onBeforeRender(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].onBeforeRender(e)}prepareRender(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].prepareRender(e)}render(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].render(e)}}class db{constructor(e,t,i){this._context=e,this._viewDomNode=t,this._actual=i,this.domNode=Mg(this._actual.getDomNode()),this.id=this._actual.getId(),this.allowEditorOverflow=this._actual.allowEditorOverflow||!1,this.suppressMouseDown=this._actual.suppressMouseDown||!1;const n=this._context.configuration.options,o=n.get(129);this._fixedOverflowWidgets=n.get(32),this._contentWidth=o.contentWidth,this._contentLeft=o.contentLeft,this._lineHeight=n.get(54),this._topPadding=n.get(131),this._range=null,this._viewRange=null,this._preference=[],this._cachedDomNodeClientWidth=-1,this._cachedDomNodeClientHeight=-1,this._maxWidth=this._getMaxWidth(),this._isVisible=!1,this._renderData=null,this.domNode.setPosition(this._fixedOverflowWidgets&&this.allowEditorOverflow?"fixed":"absolute"),this.domNode.setVisibility("hidden"),this.domNode.setAttribute("widgetId",this.id),this.domNode.setMaxWidth(this._maxWidth)}onConfigurationChanged(e){const t=this._context.configuration.options;if(this._lineHeight=t.get(54),this._topPadding=t.get(131),e.hasChanged(129)){const e=t.get(129);this._contentLeft=e.contentLeft,this._contentWidth=e.contentWidth,this._maxWidth=this._getMaxWidth()}}onLineMappingChanged(e){this._setPosition(this._range)}_setPosition(e){if(this._range=e,this._viewRange=null,this._range){const e=this._context.model.validateModelRange(this._range);(this._context.model.coordinatesConverter.modelPositionIsVisible(e.getStartPosition())||this._context.model.coordinatesConverter.modelPositionIsVisible(e.getEndPosition()))&&(this._viewRange=this._context.model.coordinatesConverter.convertModelRangeToViewRange(e))}}_getMaxWidth(){return this.allowEditorOverflow?window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth:this._contentWidth}setPosition(e,t){this._setPosition(e),this._preference=t,this._cachedDomNodeClientWidth=-1,this._cachedDomNodeClientHeight=-1}_layoutBoxInViewport(e,t,i,n,o){const s=e.top,r=t.top+this._lineHeight;let a=e.left,l=t.left;return a+i>o.scrollLeft+o.viewportWidth&&(a=o.scrollLeft+o.viewportWidth-i),l+i>o.scrollLeft+o.viewportWidth&&(l=o.scrollLeft+o.viewportWidth-i),a=n,aboveTop:s-n,aboveLeft:a,fitsBelow:o.viewportHeight-r>=n,belowTop:r,belowLeft:l}}_layoutHorizontalSegmentInPage(e,t,i,n){const o=Math.max(0,t.left-n),s=Math.min(t.left+t.width+n,e.width);let r=t.left+i-du.scrollX;if(r+n>s){const e=r-(s-n);r-=e,i-=e}if(r=m,_=h+n<=c.height-22;return this._fixedOverflowWidgets?{fitsAbove:f,aboveTop:Math.max(l,m),aboveLeft:u,fitsBelow:_,belowTop:h,belowLeft:p}:{fitsAbove:f,aboveTop:s,aboveLeft:d,fitsBelow:_,belowTop:r,belowLeft:g}}_prepareRenderWidgetAtExactPositionOverflowing(e){return new hb(e.top,e.left+this._contentLeft)}_getTopAndBottomLeft(e){if(!this._viewRange)return[null,null];const t=e.linesVisibleRangesForRange(this._viewRange,!1);if(!t||0===t.length)return[null,null];let i=t[0],n=t[0];for(const e of t)e.lineNumbern.lineNumber&&(n=e);let o=1073741824;for(const e of i.ranges)e.lefte.endLineNumber||this.domNode.setMaxWidth(this._maxWidth))}prepareRender(e){this._renderData=this._prepareRenderWidget(e)}render(e){if(!this._renderData)return this._isVisible&&(this.domNode.removeAttribute("monaco-visible-content-widget"),this._isVisible=!1,this.domNode.setVisibility("hidden")),void("function"==typeof this._actual.afterRender&&ub(this._actual.afterRender,this._actual,null));this.allowEditorOverflow?(this.domNode.setTop(this._renderData.coordinate.top),this.domNode.setLeft(this._renderData.coordinate.left)):(this.domNode.setTop(this._renderData.coordinate.top+e.scrollTop-e.bigNumbersDelta),this.domNode.setLeft(this._renderData.coordinate.left)),this._isVisible||(this.domNode.setVisibility("inherit"),this.domNode.setAttribute("monaco-visible-content-widget","true"),this._isVisible=!0),"function"==typeof this._actual.afterRender&&ub(this._actual.afterRender,this._actual,this._renderData.position)}}function ub(e,t,...i){try{return e.call(t,...i)}catch(e){return null}}let gb=!0;class pb extends em{constructor(e){super(),this._context=e;const t=this._context.configuration.options,i=t.get(129);this._lineHeight=t.get(54),this._renderLineHighlight=t.get(82),this._renderLineHighlightOnlyWhenFocus=t.get(83),this._contentLeft=i.contentLeft,this._contentWidth=i.contentWidth,this._selectionIsEmpty=!0,this._focused=!1,this._cursorLineNumbers=[1],this._selections=[new ao(1,1,1,1)],this._renderData=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}_readFromSelections(){let e=!1;const t=gb?this._selections.slice(0,1):this._selections,i=t.map(e=>e.positionLineNumber);i.sort((e,t)=>e-t),Zr(this._cursorLineNumbers,i)||(this._cursorLineNumbers=i,e=!0);const n=t.every(e=>e.isEmpty());return this._selectionIsEmpty!==n&&(this._selectionIsEmpty=n,e=!0),e}onThemeChanged(e){return this._readFromSelections()}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._lineHeight=t.get(54),this._renderLineHighlight=t.get(82),this._renderLineHighlightOnlyWhenFocus=t.get(83),this._contentLeft=i.contentLeft,this._contentWidth=i.contentWidth,!0}onCursorStateChanged(e){return this._selections=e.selections,this._readFromSelections()}onFlushed(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollWidthChanged||e.scrollTopChanged}onZonesChanged(e){return!0}onFocusChanged(e){return!!this._renderLineHighlightOnlyWhenFocus&&(this._focused=e.isFocused,!0)}prepareRender(e){if(!this._shouldRenderThis())return void(this._renderData=null);const t=this._renderOne(e),i=e.visibleRange.startLineNumber,n=e.visibleRange.endLineNumber,o=this._cursorLineNumbers.length;let s=0;const r=[];for(let e=i;e<=n;e++){const n=e-i;for(;s=this._renderData.length?"":this._renderData[i]}}class mb extends pb{_renderOne(e){return`
`}_shouldRenderThis(){return("line"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderOther(){return("gutter"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}class fb extends pb{_renderOne(e){return`
`}_shouldRenderMargin(){return("gutter"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderThis(){return!0}_shouldRenderOther(){return("line"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}Cn((e,t)=>{gb=!1;const i=e.getColor(v_);if(i&&(t.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${i}; }`),t.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${i}; border: none; }`)),!i||i.isTransparent()||e.defines(C_)){const i=e.getColor(C_);i&&(gb=!0,t.addRule(`.monaco-editor .view-overlays .current-line { border: 2px solid ${i}; }`),t.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { border: 2px solid ${i}; }`),"hc"===e.type&&(t.addRule(".monaco-editor .view-overlays .current-line { border-width: 1px; }"),t.addRule(".monaco-editor .margin-view-overlays .current-line-margin { border-width: 1px; }")))}});class _b extends em{constructor(e){super(),this._context=e;const t=this._context.configuration.options;this._lineHeight=t.get(54),this._typicalHalfwidthCharacterWidth=t.get(38).typicalHalfwidthCharacterWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return this._lineHeight=t.get(54),this._typicalHalfwidthCharacterWidth=t.get(38).typicalHalfwidthCharacterWidth,!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged||e.scrollWidthChanged}onZonesChanged(e){return!0}prepareRender(e){const t=e.getDecorationsInViewport();let i=[],n=0;for(let e=0,o=t.length;e{if(e.options.zIndext.options.zIndex)return 1;const i=e.options.className,n=t.options.className;return in?1:ro.compareRangesUsingStarts(e.range,t.range)});const o=e.visibleRange.startLineNumber,s=e.visibleRange.endLineNumber,r=[];for(let e=o;e<=s;e++)r[e-o]="";this._renderWholeLineDecorations(e,i,r),this._renderNormalDecorations(e,i,r),this._renderResult=r}_renderWholeLineDecorations(e,t,i){const n=String(this._lineHeight),o=e.visibleRange.startLineNumber,s=e.visibleRange.endLineNumber;for(let e=0,r=t.length;e',l=Math.max(r.range.startLineNumber,o),h=Math.min(r.range.endLineNumber,s);for(let e=l;e<=h;e++)i[e-o]+=a}}_renderNormalDecorations(e,t,i){const n=String(this._lineHeight),o=e.visibleRange.startLineNumber;let s=null,r=!1,a=null;for(let l=0,h=t.length;l';r[l]+=s}}}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}class bb extends C{onclick(e,t){this._register(jd(e,Nu.CLICK,e=>t(new Vd(e))))}onmousedown(e,t){this._register(jd(e,Nu.MOUSE_DOWN,e=>t(new Vd(e))))}onmouseup(e,t){this._register(jd(e,Nu.MOUSE_UP,e=>t(new Vd(e))))}onmousemove(e,t){this._register(jd(e,Nu.MOUSE_MOVE,e=>t(new Vd(e))))}onmouseover(e,t){this._register(jd(e,Nu.MOUSE_OVER,e=>t(new Vd(e))))}onnonbubblingmouseout(e,t){this._register(Xd(e,e=>t(new Vd(e))))}onkeydown(e,t){this._register(jd(e,Nu.KEY_DOWN,e=>t(new Rd(e))))}onkeyup(e,t){this._register(jd(e,Nu.KEY_UP,e=>t(new Rd(e))))}oninput(e,t){this._register(jd(e,Nu.INPUT,t))}onblur(e,t){return this._register(jd(e,Nu.BLUR,t))}onfocus(e,t){return this._register(jd(e,Nu.FOCUS,t))}ignoreGesture(e){Fg.ignoreTarget(e)}}const vb=11;class Cb extends bb{constructor(e){super(),this._onActivate=e.onActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=e.bgWidth+"px",this.bgDomNode.style.height=e.bgHeight+"px",void 0!==e.top&&(this.bgDomNode.style.top="0px"),void 0!==e.left&&(this.bgDomNode.style.left="0px"),void 0!==e.bottom&&(this.bgDomNode.style.bottom="0px"),void 0!==e.right&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=e.className,this.domNode.classList.add(...e.icon.classNamesArray),this.domNode.style.position="absolute",this.domNode.style.width=vb+"px",this.domNode.style.height=vb+"px",void 0!==e.top&&(this.domNode.style.top=e.top+"px"),void 0!==e.left&&(this.domNode.style.left=e.left+"px"),void 0!==e.bottom&&(this.domNode.style.bottom=e.bottom+"px"),void 0!==e.right&&(this.domNode.style.right=e.right+"px"),this._mouseMoveMonitor=this._register(new Wg),this.onmousedown(this.bgDomNode,e=>this._arrowMouseDown(e)),this.onmousedown(this.domNode,e=>this._arrowMouseDown(e)),this._mousedownRepeatTimer=this._register(new Ka),this._mousedownScheduleRepeatTimer=this._register(new Ua)}_arrowMouseDown(e){this._onActivate(),this._mousedownRepeatTimer.cancel(),this._mousedownScheduleRepeatTimer.cancelAndSet(()=>{this._mousedownRepeatTimer.cancelAndSet(()=>this._onActivate(),1e3/24)},200),this._mouseMoveMonitor.startMonitoring(e.target,e.buttons,Bg,e=>{},()=>{this._mousedownRepeatTimer.cancel(),this._mousedownScheduleRepeatTimer.cancel()}),e.preventDefault()}}class wb extends C{constructor(e,t,i){super(),this._visibility=e,this._visibleClassName=t,this._invisibleClassName=i,this._domNode=null,this._isVisible=!1,this._isNeeded=!1,this._shouldBeVisible=!1,this._revealTimer=this._register(new Ua)}applyVisibilitySetting(e){return 2!==this._visibility&&(3===this._visibility||e)}setShouldBeVisible(e){const t=this.applyVisibilitySetting(e);this._shouldBeVisible!==t&&(this._shouldBeVisible=t,this.ensureVisibility())}setIsNeeded(e){this._isNeeded!==e&&(this._isNeeded=e,this.ensureVisibility())}setDomNode(e){this._domNode=e,this._domNode.setClassName(this._invisibleClassName),this.setShouldBeVisible(!1)}ensureVisibility(){this._isNeeded?this._shouldBeVisible?this._reveal():this._hide(!0):this._hide(!1)}_reveal(){this._isVisible||(this._isVisible=!0,this._revealTimer.setIfNotSet(()=>{this._domNode&&this._domNode.setClassName(this._visibleClassName)},0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode&&this._domNode.setClassName(this._invisibleClassName+(e?" fade":"")))}}const yb=140;class Sb extends bb{constructor(e){super(),this._lazyRender=e.lazyRender,this._host=e.host,this._scrollable=e.scrollable,this._scrollByPage=e.scrollByPage,this._scrollbarState=e.scrollbarState,this._visibilityController=this._register(new wb(e.visibility,"visible scrollbar "+e.extraScrollbarClassName,"invisible scrollbar "+e.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._mouseMoveMonitor=this._register(new Wg),this._shouldRender=!0,this.domNode=Mg(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this.onmousedown(this.domNode.domNode,e=>this._domNodeMouseDown(e))}_createArrow(e){const t=this._register(new Cb(e));this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode)}_createSlider(e,t,i,n){this.slider=Mg(document.createElement("div")),this.slider.setClassName("slider"),this.slider.setPosition("absolute"),this.slider.setTop(e),this.slider.setLeft(t),"number"==typeof i&&this.slider.setWidth(i),"number"==typeof n&&this.slider.setHeight(n),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this.onmousedown(this.slider.domNode,e=>{e.leftButton&&(e.preventDefault(),this._sliderMouseDown(e,()=>{}))}),this.onclick(this.slider.domNode,e=>{e.leftButton&&e.stopPropagation()})}_onElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodeMouseDown(e){e.target===this.domNode.domNode&&this._onMouseDown(e)}delegateMouseDown(e){const t=this.domNode.domNode.getClientRects()[0].top,i=t+this._scrollbarState.getSliderPosition(),n=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),o=this._sliderMousePosition(e);i<=o&&o<=n?e.leftButton&&(e.preventDefault(),this._sliderMouseDown(e,()=>{})):this._onMouseDown(e)}_onMouseDown(e){let t,i;if(e.target===this.domNode.domNode&&"number"==typeof e.browserEvent.offsetX&&"number"==typeof e.browserEvent.offsetY)t=e.browserEvent.offsetX,i=e.browserEvent.offsetY;else{const n=cu(this.domNode.domNode);t=e.posx-n.left,i=e.posy-n.top}const n=this._mouseDownRelativePosition(t,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(n):this._scrollbarState.getDesiredScrollPositionFromOffset(n)),e.leftButton&&(e.preventDefault(),this._sliderMouseDown(e,()=>{}))}_sliderMouseDown(e,t){const i=this._sliderMousePosition(e),n=this._sliderOrthogonalMousePosition(e),o=this._scrollbarState.clone();this.slider.toggleClassName("active",!0),this._mouseMoveMonitor.startMonitoring(e.target,e.buttons,Bg,e=>{const t=this._sliderOrthogonalMousePosition(e),s=Math.abs(t-n);if(z&&s>yb)return void this._setDesiredScrollPositionNow(o.getScrollPosition());const r=this._sliderMousePosition(e);this._setDesiredScrollPositionNow(o.getDesiredScrollPositionFromDelta(r-i))},()=>{this.slider.toggleClassName("active",!1),this._host.onDragEnd(),t()}),this._host.onDragStart()}_setDesiredScrollPositionNow(e){const t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}const Lb=20;class Db{constructor(e,t,i,n,o,s){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(e),this._visibleSize=n,this._scrollSize=o,this._scrollPosition=s,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new Db(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){const t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){const t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){const t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=e}static _computeValues(e,t,i,n,o){const s=Math.max(0,i-e),r=Math.max(0,s-2*t),a=n>0&&n>i;if(!a)return{computedAvailableSize:Math.round(s),computedIsNeeded:a,computedSliderSize:Math.round(r),computedSliderRatio:0,computedSliderPosition:0};const l=Math.round(Math.max(Lb,Math.floor(i*r/n))),h=(r-l)/(n-i),c=o*h;return{computedAvailableSize:Math.round(s),computedIsNeeded:a,computedSliderSize:Math.round(l),computedSliderRatio:h,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){const e=Db._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=e.computedAvailableSize,this._computedIsNeeded=e.computedIsNeeded,this._computedSliderSize=e.computedSliderSize,this._computedSliderRatio=e.computedSliderRatio,this._computedSliderPosition=e.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){return this._computedIsNeeded?Math.round((e-this._arrowSize-this._computedSliderSize/2)/this._computedSliderRatio):0}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;let t=this._scrollPosition;return e-this._arrowSizethis._host.onMouseWheel(new zd(null,1,0))}),this._createArrow({className:"scra",icon:xb,top:i,left:void 0,bottom:void 0,right:e,bgWidth:t.arrowSize,bgHeight:t.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new zd(null,-1,0))})}this._createSlider(Math.floor((t.horizontalScrollbarSize-t.horizontalSliderSize)/2),0,void 0,t.horizontalSliderSize)}_updateSlider(e,t){this.slider.setWidth(e),this.slider.setLeft(t)}_renderDomNode(e,t){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setLeft(0),this.domNode.setBottom(0)}onDidScroll(e){return this._shouldRender=this._onElementScrollSize(e.scrollWidth)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(e.scrollLeft)||this._shouldRender,this._shouldRender=this._onElementSize(e.width)||this._shouldRender,this._shouldRender}_mouseDownRelativePosition(e,t){return e}_sliderMousePosition(e){return e.posx}_sliderOrthogonalMousePosition(e){return e.posy}_updateScrollbarSize(e){this.slider.setHeight(e)}writeScrollPosition(e,t){e.scrollLeft=t}}const Nb=dn("scrollbar-button-up",un.triangleUp),Ib=dn("scrollbar-button-down",un.triangleDown);class Tb extends Sb{constructor(e,t,i){const n=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new Db(t.verticalHasArrows?t.arrowSize:0,2===t.vertical?0:t.verticalScrollbarSize,0,n.height,n.scrollHeight,o.scrollTop),visibility:t.vertical,extraScrollbarClassName:"vertical",scrollable:e,scrollByPage:t.scrollByPage}),t.verticalHasArrows){const e=(t.arrowSize-vb)/2,i=(t.verticalScrollbarSize-vb)/2;this._createArrow({className:"scra",icon:Nb,top:e,left:i,bottom:void 0,right:void 0,bgWidth:t.verticalScrollbarSize,bgHeight:t.arrowSize,onActivate:()=>this._host.onMouseWheel(new zd(null,0,1))}),this._createArrow({className:"scra",icon:Ib,top:void 0,left:i,bottom:e,right:void 0,bgWidth:t.verticalScrollbarSize,bgHeight:t.arrowSize,onActivate:()=>this._host.onMouseWheel(new zd(null,0,-1))})}this._createSlider(0,Math.floor((t.verticalScrollbarSize-t.verticalSliderSize)/2),t.verticalSliderSize,void 0)}_updateSlider(e,t){this.slider.setHeight(e),this.slider.setTop(t)}_renderDomNode(e,t){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setRight(0),this.domNode.setTop(0)}onDidScroll(e){return this._shouldRender=this._onElementScrollSize(e.scrollHeight)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(e.scrollTop)||this._shouldRender,this._shouldRender=this._onElementSize(e.height)||this._shouldRender,this._shouldRender}_mouseDownRelativePosition(e,t){return t}_sliderMousePosition(e){return e.posy}_sliderOrthogonalMousePosition(e){return e.posx}_updateScrollbarSize(e){this.slider.setWidth(e)}writeScrollPosition(e,t){e.scrollTop=t}}class Ab{constructor(e,t,i,n,o,s){e|=0,t|=0,n|=0,o|=0,s|=0,this.rawScrollLeft=i|=0,this.rawScrollTop=s,e<0&&(e=0),i+e>t&&(i=t-e),i<0&&(i=0),n<0&&(n=0),s+n>o&&(s=o-n),s<0&&(s=0),this.width=e,this.scrollWidth=t,this.scrollLeft=i,this.height=n,this.scrollHeight=o,this.scrollTop=s}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(e,t){return new Ab(void 0!==e.width?e.width:this.width,void 0!==e.scrollWidth?e.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,void 0!==e.height?e.height:this.height,void 0!==e.scrollHeight?e.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(e){return new Ab(this.width,this.scrollWidth,void 0!==e.scrollLeft?e.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,void 0!==e.scrollTop?e.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:this.width!==e.width,scrollWidthChanged:this.scrollWidth!==e.scrollWidth,scrollLeftChanged:this.scrollLeft!==e.scrollLeft,heightChanged:this.height!==e.height,scrollHeightChanged:this.scrollHeight!==e.scrollHeight,scrollTopChanged:this.scrollTop!==e.scrollTop}}}class Mb extends C{constructor(e,t){super(),this._onScroll=this._register(new oe),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e,this._scheduleAtNextAnimationFrame=t,this._state=new Ab(0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){const i=this._state.withScrollDimensions(e,t);this._setState(i,Boolean(this._smoothScrolling)),this._smoothScrolling&&this._smoothScrolling.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){const t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(0===this._smoothScrollDuration)return this.setScrollPositionNow(e);if(this._smoothScrolling){const i=this._state.withScrollPosition(e={scrollLeft:void 0===e.scrollLeft?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:void 0===e.scrollTop?this._smoothScrolling.to.scrollTop:e.scrollTop});if(this._smoothScrolling.to.scrollLeft===i.scrollLeft&&this._smoothScrolling.to.scrollTop===i.scrollTop)return;let n;n=t?new Pb(this._smoothScrolling.from,i,this._smoothScrolling.startTime,this._smoothScrolling.duration):this._smoothScrolling.combine(this._state,i,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=n}else{const t=this._state.withScrollPosition(e);this._smoothScrolling=Pb.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}_performSmoothScrolling(){if(!this._smoothScrolling)return;const e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);return this._setState(t,!0),this._smoothScrolling?e.isDone?(this._smoothScrolling.dispose(),void(this._smoothScrolling=null)):void(this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})):void 0}_setState(e,t){const i=this._state;i.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(i,t)))}}class Ob{constructor(e,t,i){this.scrollLeft=e,this.scrollTop=t,this.isDone=i}}function Rb(e,t){const i=t-e;return function(t){return e+i*function n(e){return 1-function t(e){return Math.pow(e,3)}(1-e)}(t)}}class Pb{constructor(e,t,i,n){this.from=e,this.to=t,this.duration=n,this.startTime=i,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this.scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this.scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(e,t,i){if(Math.abs(e-t)>2.5*i){let n,o;return e0&&Math.abs(e.deltaY)>0)return 1;let t=.5;return this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(t+=.25),Math.min(Math.max(t,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}}Vb.INSTANCE=new Vb;class zb extends bb{constructor(e,t,i){super(),this._onScroll=this._register(new oe),this.onScroll=this._onScroll.event,this._onWillScroll=this._register(new oe),e.style.overflow="hidden",this._options=function n(e){const t={lazyRender:void 0!==e.lazyRender&&e.lazyRender,className:void 0!==e.className?e.className:"",useShadows:void 0===e.useShadows||e.useShadows,handleMouseWheel:void 0===e.handleMouseWheel||e.handleMouseWheel,flipAxes:void 0!==e.flipAxes&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:void 0!==e.consumeMouseWheelIfScrollbarIsNeeded&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:void 0!==e.alwaysConsumeMouseWheel&&e.alwaysConsumeMouseWheel,scrollYToX:void 0!==e.scrollYToX&&e.scrollYToX,mouseWheelScrollSensitivity:void 0!==e.mouseWheelScrollSensitivity?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:void 0!==e.fastScrollSensitivity?e.fastScrollSensitivity:5,scrollPredominantAxis:void 0===e.scrollPredominantAxis||e.scrollPredominantAxis,mouseWheelSmoothScroll:void 0===e.mouseWheelSmoothScroll||e.mouseWheelSmoothScroll,arrowSize:void 0!==e.arrowSize?e.arrowSize:11,listenOnDomNode:void 0!==e.listenOnDomNode?e.listenOnDomNode:null,horizontal:void 0!==e.horizontal?e.horizontal:1,horizontalScrollbarSize:void 0!==e.horizontalScrollbarSize?e.horizontalScrollbarSize:10,horizontalSliderSize:void 0!==e.horizontalSliderSize?e.horizontalSliderSize:0,horizontalHasArrows:void 0!==e.horizontalHasArrows&&e.horizontalHasArrows,vertical:void 0!==e.vertical?e.vertical:1,verticalScrollbarSize:void 0!==e.verticalScrollbarSize?e.verticalScrollbarSize:10,verticalHasArrows:void 0!==e.verticalHasArrows&&e.verticalHasArrows,verticalSliderSize:void 0!==e.verticalSliderSize?e.verticalSliderSize:0,scrollByPage:void 0!==e.scrollByPage&&e.scrollByPage};return t.horizontalSliderSize=void 0!==e.horizontalSliderSize?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=void 0!==e.verticalSliderSize?e.verticalSliderSize:t.verticalScrollbarSize,H&&(t.className+=" mac"),t}(t),this._scrollable=i,this._register(this._scrollable.onScroll(e=>{this._onWillScroll.fire(e),this._onDidScroll(e),this._onScroll.fire(e)}));const o={onMouseWheel:e=>this._onMouseWheel(e),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new Tb(this._scrollable,this._options,o)),this._horizontalScrollbar=this._register(new kb(this._scrollable,this._options,o)),this._domNode=document.createElement("div"),this._domNode.className="monaco-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.style.overflow="hidden",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=Mg(document.createElement("div")),this._leftShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=Mg(document.createElement("div")),this._topShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=Mg(document.createElement("div")),this._topLeftShadowDomNode.setClassName("shadow top-left-corner"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,e=>this._onMouseOver(e)),this.onnonbubblingmouseout(this._listenOnDomNode,e=>this._onMouseOut(e)),this._hideTimeout=this._register(new Ua),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=f(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarMouseDown(e){this._verticalScrollbar.delegateMouseDown(e)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}updateClassName(e){this._options.className=e,H&&(this._options.className+=" mac"),this._domNode.className="monaco-scrollable-element "+this._options.className}updateOptions(e){void 0!==e.handleMouseWheel&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),void 0!==e.mouseWheelScrollSensitivity&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),void 0!==e.fastScrollSensitivity&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),void 0!==e.scrollPredominantAxis&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),void 0!==e.horizontalScrollbarSize&&this._horizontalScrollbar.updateScrollbarSize(e.horizontalScrollbarSize),this._options.lazyRender||this._render()}_setListeningToMouseWheel(e){this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=f(this._mouseWheelToDispose),e)&&this._mouseWheelToDispose.push(jd(this._listenOnDomNode,Nu.MOUSE_WHEEL,e=>{this._onMouseWheel(new zd(e))},{passive:!1}))}_onMouseWheel(e){const t=Vb.INSTANCE;{const i=window.devicePixelRatio/function i(){return le.INSTANCE.getZoomFactor()}();z||U?t.accept(Date.now(),e.deltaX/i,e.deltaY/i):t.accept(Date.now(),e.deltaX,e.deltaY)}let n=!1;if(e.deltaY||e.deltaX){let i=e.deltaY*this._options.mouseWheelScrollSensitivity,o=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(Math.abs(i)>=Math.abs(o)?o=0:i=0),this._options.flipAxes&&([i,o]=[o,i]);const s=!H&&e.browserEvent&&e.browserEvent.shiftKey;!this._options.scrollYToX&&!s||o||(o=i,i=0),e.browserEvent&&e.browserEvent.altKey&&(o*=this._options.fastScrollSensitivity,i*=this._options.fastScrollSensitivity);const r=this._scrollable.getFutureScrollPosition();let a={};i&&this._verticalScrollbar.writeScrollPosition(a,r.scrollTop-Bb*i),o&&this._horizontalScrollbar.writeScrollPosition(a,r.scrollLeft-Bb*o),a=this._scrollable.validateScrollPosition(a),(r.scrollLeft!==a.scrollLeft||r.scrollTop!==a.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(a):this._scrollable.setScrollPositionNow(a),n=!0)}let o=n;!o&&this._options.alwaysConsumeMouseWheel&&(o=!0),!o&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(o=!0),o&&(e.preventDefault(),e.stopPropagation())}_onDidScroll(e){this._shouldRender=this._horizontalScrollbar.onDidScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,i=e.scrollLeft>0;this._leftShadowDomNode.setClassName("shadow"+(i?" left":"")),this._topShadowDomNode.setClassName("shadow"+(t?" top":"")),this._topLeftShadowDomNode.setClassName("shadow top-left-corner"+(t?" top":"")+(i?" left":""))}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseOut(e){this._mouseIsOver=!1,this._hide()}_onMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){this._mouseIsOver||this._isDragging||(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){this._mouseIsOver||this._isDragging||this._hideTimeout.cancelAndSet(()=>this._hide(),Fb)}}class Hb extends zb{constructor(e,t){(t=t||{}).mouseWheelSmoothScroll=!1;const i=new Mb(0,e=>Jd(e));super(e,t,i),this._register(i)}setScrollPosition(e){this._scrollable.setScrollPositionNow(e)}}class Ub extends zb{constructor(e,t,i){super(e,t,i)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}}class Kb extends Hb{constructor(e,t){super(e,t),this._element=e,this.onScroll(e=>{e.scrollTopChanged&&(this._element.scrollTop=e.scrollTop),e.scrollLeftChanged&&(this._element.scrollLeft=e.scrollLeft)}),this.scanDomNode()}scanDomNode(){this.setScrollDimensions({width:this._element.clientWidth,scrollWidth:this._element.scrollWidth,height:this._element.clientHeight,scrollHeight:this._element.scrollHeight}),this.setScrollPosition({scrollLeft:this._element.scrollLeft,scrollTop:this._element.scrollTop})}}class $b extends Yg{constructor(e,t,i,n){super(e);const o=this._context.configuration.options,s=o.get(90),r=o.get(62),a=o.get(30),l=o.get(93),h={listenOnDomNode:i.domNode,className:"editor-scrollable "+bn(e.theme.type),useShadows:!1,lazyRender:!0,vertical:s.vertical,horizontal:s.horizontal,verticalHasArrows:s.verticalHasArrows,horizontalHasArrows:s.horizontalHasArrows,verticalScrollbarSize:s.verticalScrollbarSize,verticalSliderSize:s.verticalSliderSize,horizontalScrollbarSize:s.horizontalScrollbarSize,horizontalSliderSize:s.horizontalSliderSize,handleMouseWheel:s.handleMouseWheel,alwaysConsumeMouseWheel:s.alwaysConsumeMouseWheel,arrowSize:s.arrowSize,mouseWheelScrollSensitivity:r,fastScrollSensitivity:a,scrollPredominantAxis:l,scrollByPage:s.scrollByPage};this.scrollbar=this._register(new Ub(t.domNode,h,this._context.viewLayout.getScrollable())),Zg.write(this.scrollbar.getDomNode(),5),this.scrollbarDomNode=Mg(this.scrollbar.getDomNode()),this.scrollbarDomNode.setPosition("absolute"),this._setLayout();const c=(e,t,i)=>{const n={};if(t){const t=e.scrollTop;t&&(n.scrollTop=this._context.viewLayout.getCurrentScrollTop()+t,e.scrollTop=0)}if(i){const t=e.scrollLeft;t&&(n.scrollLeft=this._context.viewLayout.getCurrentScrollLeft()+t,e.scrollLeft=0)}this._context.model.setScrollPosition(n,1)};this._register(jd(i.domNode,"scroll",e=>c(i.domNode,!0,!0))),this._register(jd(t.domNode,"scroll",e=>c(t.domNode,!0,!1))),this._register(jd(n.domNode,"scroll",e=>c(n.domNode,!0,!1))),this._register(jd(this.scrollbarDomNode.domNode,"scroll",e=>c(this.scrollbarDomNode.domNode,!0,!1)))}dispose(){super.dispose()}_setLayout(){const e=this._context.configuration.options,t=e.get(129);this.scrollbarDomNode.setLeft(t.contentLeft);const i=e.get(60);this.scrollbarDomNode.setWidth("right"===i.side?t.contentWidth+t.minimap.minimapWidth:t.contentWidth),this.scrollbarDomNode.setHeight(t.height)}getOverviewRulerLayoutInfo(){return this.scrollbar.getOverviewRulerLayoutInfo()}getDomNode(){return this.scrollbarDomNode}delegateVerticalScrollbarMouseDown(e){this.scrollbar.delegateVerticalScrollbarMouseDown(e)}onConfigurationChanged(e){if(e.hasChanged(90)||e.hasChanged(62)||e.hasChanged(30)){const e=this._context.configuration.options,t=e.get(90),i=e.get(62),n=e.get(30),o=e.get(93);this.scrollbar.updateOptions({handleMouseWheel:t.handleMouseWheel,mouseWheelScrollSensitivity:i,fastScrollSensitivity:n,scrollPredominantAxis:o})}return e.hasChanged(129)&&this._setLayout(),!0}onScrollChanged(e){return!0}onThemeChanged(e){return this.scrollbar.updateClassName("editor-scrollable "+bn(this._context.theme.type)),!0}prepareRender(e){}render(e){this.scrollbar.renderNow()}}class jb{constructor(e,t,i){this.startLineNumber=+e,this.endLineNumber=+t,this.className=String(i)}}class qb extends em{_render(e,t,i){const n=[];for(let i=e;i<=t;i++)n[i-e]=[];if(0===i.length)return n;i.sort((e,t)=>e.className===t.className?e.startLineNumber===t.startLineNumber?e.endLineNumber-t.endLineNumber:e.startLineNumber-t.startLineNumber:e.className',r=[];for(let e=t;e<=i;e++){const i=e-t,o=n[i];r[i]=0===o.length?"":'
=this._renderResult.length?"":this._renderResult[i]}}class Yb extends em{constructor(e){super(),this._context=e,this._primaryLineNumber=0;const t=this._context.configuration.options,i=t.get(130),n=t.get(38);this._lineHeight=t.get(54),this._spaceWidth=n.spaceWidth,this._enabled=t.get(80),this._activeIndentEnabled=t.get(47),this._maxIndentLeft=-1===i.wrappingColumn?-1:i.wrappingColumn*n.typicalHalfwidthCharacterWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(130),n=t.get(38);return this._lineHeight=t.get(54),this._spaceWidth=n.spaceWidth,this._enabled=t.get(80),this._activeIndentEnabled=t.get(47),this._maxIndentLeft=-1===i.wrappingColumn?-1:i.wrappingColumn*n.typicalHalfwidthCharacterWidth,!0}onCursorStateChanged(e){const t=e.selections[0],i=t.isEmpty()?t.positionLineNumber:0;return this._primaryLineNumber!==i&&(this._primaryLineNumber=i,!0)}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}onLanguageConfigurationChanged(e){return!0}prepareRender(e){if(!this._enabled)return void(this._renderResult=null);const t=e.visibleRange.startLineNumber,i=e.visibleRange.endLineNumber,{indentSize:n}=this._context.model.getTextModelOptions(),o=n*this._spaceWidth,s=e.scrollWidth,r=this._lineHeight,a=this._context.model.getLinesIndentGuides(t,i);let l=0,h=0,c=0;if(this._activeIndentEnabled&&this._primaryLineNumber){const e=this._context.model.getActiveIndentGuide(this._primaryLineNumber,t,i);l=e.startLineNumber,h=e.endLineNumber,c=e.indent}const d=[];for(let n=t;n<=i;n++){const i=l<=n&&n<=h,u=n-t,g=a[u];let p="";if(g>=1){const t=e.visibleRangeForPosition(new Tt(n,1));let a=t?t.left:0;for(let e=1;e<=g&&(p+=`
`,!((a+=o)>s||this._maxIndentLeft>0&&a>this._maxIndentLeft));e++);}d[u]=p}this._renderResult=d}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}Cn((e,t)=>{const i=e.getColor(k_);i&&t.addRule(`.monaco-editor .lines-content .cigr { box-shadow: 1px 0 0 0 ${i} inset; }`);const n=e.getColor(N_)||i;n&&t.addRule(`.monaco-editor .lines-content .cigra { box-shadow: 1px 0 0 0 ${n} inset; }`)});class Zb{constructor(){this._currentVisibleRange=new ro(1,1,1,1)}getCurrentVisibleRange(){return this._currentVisibleRange}setCurrentVisibleRange(e){this._currentVisibleRange=e}}class Xb{constructor(e,t,i,n,o,s){this.lineNumber=e,this.startColumn=t,this.endColumn=i,this.startScrollTop=n,this.stopScrollTop=o,this.scrollType=s,this.type="range",this.minLineNumber=e,this.maxLineNumber=e}}class Qb{constructor(e,t,i,n){this.selections=e,this.startScrollTop=t,this.stopScrollTop=i,this.scrollType=n,this.type="selections";let o=e[0].startLineNumber,s=e[0].endLineNumber;for(let t=1,i=e.length;t{this._updateLineWidthsSlow()},200),this._asyncCheckMonospaceFontAssumptions=new $a(()=>{this._checkMonospaceFontAssumptions()},2e3),this._lastRenderedData=new Zb,this._horizontalRevealRequest=null}dispose(){this._asyncUpdateLineWidths.dispose(),this._asyncCheckMonospaceFontAssumptions.dispose(),super.dispose()}getDomNode(){return this.domNode}createVisibleLine(){return new yp(this._viewLineOptions)}onConfigurationChanged(e){this._visibleLines.onConfigurationChanged(e),e.hasChanged(130)&&(this._maxLineWidth=0);const t=this._context.configuration.options,i=t.get(38),n=t.get(130);return this._lineHeight=t.get(54),this._typicalHalfwidthCharacterWidth=i.typicalHalfwidthCharacterWidth,this._isViewportWrapping=n.isViewportWrapping,this._revealHorizontalRightPadding=t.get(87),this._cursorSurroundingLines=t.get(22),this._cursorSurroundingLinesStyle=t.get(23),this._canUseLayerHinting=!t.get(25),Tg.applyFontInfo(this.domNode,i),this._onOptionsMaybeChanged(),e.hasChanged(129)&&(this._maxLineWidth=0),!0}_onOptionsMaybeChanged(){const e=new wp(this._context.configuration,this._context.theme.type);if(!this._viewLineOptions.equals(e)){this._viewLineOptions=e;const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();for(let e=t;e<=i;e++)this._visibleLines.getVisibleLine(e).onOptionsChanged(this._viewLineOptions);return!0}return!1}onCursorStateChanged(e){const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();let n=!1;for(let e=t;e<=i;e++)n=this._visibleLines.getVisibleLine(e).onSelectionChanged()||n;return n}onDecorationsChanged(e){{const e=this._visibleLines.getStartLineNumber(),t=this._visibleLines.getEndLineNumber();for(let i=e;i<=t;i++)this._visibleLines.getVisibleLine(i).onDecorationsChanged()}return!0}onFlushed(e){const t=this._visibleLines.onFlushed(e);return this._maxLineWidth=0,t}onLinesChanged(e){return this._visibleLines.onLinesChanged(e)}onLinesDeleted(e){return this._visibleLines.onLinesDeleted(e)}onLinesInserted(e){return this._visibleLines.onLinesInserted(e)}onRevealRangeRequest(e){const t=this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(),e.source,e.range,e.selections,e.verticalType);if(-1===t)return!1;let i=this._context.viewLayout.validateScrollPosition({scrollTop:t});e.revealHorizontal?e.range&&e.range.startLineNumber!==e.range.endLineNumber?i={scrollTop:i.scrollTop,scrollLeft:0}:e.range?this._horizontalRevealRequest=new Xb(e.range.startLineNumber,e.range.startColumn,e.range.endColumn,this._context.viewLayout.getCurrentScrollTop(),i.scrollTop,e.scrollType):e.selections&&e.selections.length>0&&(this._horizontalRevealRequest=new Qb(e.selections,this._context.viewLayout.getCurrentScrollTop(),i.scrollTop,e.scrollType)):this._horizontalRevealRequest=null;const n=Math.abs(this._context.viewLayout.getCurrentScrollTop()-i.scrollTop);return this._context.model.setScrollPosition(i,n<=this._lineHeight?1:e.scrollType),!0}onScrollChanged(e){if(this._horizontalRevealRequest&&e.scrollLeftChanged&&(this._horizontalRevealRequest=null),this._horizontalRevealRequest&&e.scrollTopChanged){const t=Math.min(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop),i=Math.max(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop);(e.scrollTopi)&&(this._horizontalRevealRequest=null)}return this.domNode.setWidth(e.scrollWidth),this._visibleLines.onScrollChanged(e)||!0}onTokensChanged(e){return this._visibleLines.onTokensChanged(e)}onZonesChanged(e){return this._context.model.setMaxLineWidth(this._maxLineWidth),this._visibleLines.onZonesChanged(e)}onThemeChanged(e){return this._onOptionsMaybeChanged()}getPositionFromDOMInfo(e,t){const i=this._getViewLineDomNode(e);if(null===i)return null;const n=this._getLineNumberFor(i);if(-1===n)return null;if(n<1||n>this._context.model.getLineCount())return null;if(1===this._context.model.getLineMaxColumn(n))return new Tt(n,1);const o=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();if(ns)return null;let r=this._visibleLines.getVisibleLine(n).getColumnOfNodeOffset(n,e,t);const a=this._context.model.getLineMinColumn(n);return ri?-1:this._visibleLines.getVisibleLine(e).getWidth()}linesVisibleRangesForRange(e,t){if(this.shouldRender())return null;const i=e.endLineNumber,n=ro.intersectRanges(e,this._lastRenderedData.getCurrentVisibleRange());if(!n)return null;let o=[],s=0;const r=new Cp(this.domNode.domNode,this._textRangeRestingSpot);let a=0;t&&(a=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Tt(n.startLineNumber,1)).lineNumber);const l=this._visibleLines.getStartLineNumber(),h=this._visibleLines.getEndLineNumber();for(let e=n.startLineNumber;e<=n.endLineNumber;e++){if(eh)continue;const c=e===n.startLineNumber?n.startColumn:1,d=e===n.endLineNumber?n.endColumn:this._context.model.getLineMaxColumn(e),u=this._visibleLines.getVisibleLine(e).getVisibleRangesForRange(c,d,r);u&&(t&&ethis._visibleLines.getEndLineNumber()?null:this._visibleLines.getVisibleLine(e).getVisibleRangesForRange(t,i,new Cp(this.domNode.domNode,this._textRangeRestingSpot))}visibleRangeForPosition(e){const t=this._visibleRangesForLineRange(e.lineNumber,e.column,e.column);return t?new tp(t.outsideRenderedLine,t.ranges[0].left):null}updateLineWidths(){this._updateLineWidths(!1)}_updateLineWidthsFast(){return this._updateLineWidths(!0)}_updateLineWidthsSlow(){this._updateLineWidths(!1)}_updateLineWidths(e){const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();let n=1,o=!0;for(let s=t;s<=i;s++){const t=this._visibleLines.getVisibleLine(s);!e||t.getWidthIsFast()?n=Math.max(n,t.getWidth()):o=!1}return o&&1===t&&i===this._context.model.getLineCount()&&(this._maxLineWidth=0),this._ensureMaxLineWidth(n),o}_checkMonospaceFontAssumptions(){let e=-1,t=-1;const i=this._visibleLines.getStartLineNumber(),n=this._visibleLines.getEndLineNumber();for(let o=i;o<=n;o++){const i=this._visibleLines.getVisibleLine(o);if(i.needsMonospaceFontCheck()){const n=i.getWidth();n>t&&(t=n,e=o)}}if(-1!==e&&!this._visibleLines.getVisibleLine(e).monospaceAssumptionsAreValid())for(let e=i;e<=n;e++)this._visibleLines.getVisibleLine(e).onMonospaceAssumptionsInvalidated()}prepareRender(){throw new Error("Not supported")}render(){throw new Error("Not supported")}renderText(e){if(this._visibleLines.renderLines(e),this._lastRenderedData.setCurrentVisibleRange(e.visibleRange),this.domNode.setWidth(this._context.viewLayout.getScrollWidth()),this.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(),1e6)),this._horizontalRevealRequest){const t=this._horizontalRevealRequest;if(e.startLineNumber<=t.minLineNumber&&t.maxLineNumber<=e.endLineNumber){this._horizontalRevealRequest=null,this.onDidRender();const e=this._computeScrollLeftToReveal(t);e&&(this._isViewportWrapping||this._ensureMaxLineWidth(e.maxHorizontalOffset),this._context.model.setScrollPosition({scrollLeft:e.scrollLeft},t.scrollType))}}if(this._updateLineWidthsFast()||this._asyncUpdateLineWidths.schedule(),U&&!this._asyncCheckMonospaceFontAssumptions.isScheduled()){const e=this._visibleLines.getStartLineNumber(),t=this._visibleLines.getEndLineNumber();for(let i=e;i<=t;i++)if(this._visibleLines.getVisibleLine(i).needsMonospaceFontCheck()){this._asyncCheckMonospaceFontAssumptions.schedule();break}}this._linesContent.setLayerHinting(this._canUseLayerHinting),this._linesContent.setContain("strict");const t=this._context.viewLayout.getCurrentScrollTop()-e.bigNumbersDelta;this._linesContent.setTop(-t),this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft())}_ensureMaxLineWidth(e){const t=Math.ceil(e);this._maxLineWidth0){let e=n[0].startLineNumber,t=n[0].endLineNumber;for(let i=1,o=n.length;ir){if(!l)return-1;d=h}else if(5===o||6===o)if(6===o&&s<=h&&c<=a)d=s;else{const e=Math.max(5*this._lineHeight,.2*r);d=Math.max(c-r,h-e)}else d=1===o||2===o?2===o&&s<=h&&c<=a?s:Math.max(0,(h+c)/2-r/2):this._computeMinimumScrolling(s,a,h,c,3===o,4===o);return d}_computeScrollLeftToReveal(e){const t=this._context.viewLayout.getCurrentViewport(),i=t.left,n=i+t.width;let o=1073741824,s=0;if("range"===e.type){const t=this._visibleRangesForLineRange(e.lineNumber,e.startColumn,e.endColumn);if(!t)return null;for(const e of t.ranges)o=Math.min(o,e.left),s=Math.max(s,e.left+e.width)}else for(const t of e.selections){if(t.startLineNumber!==t.endLineNumber)return null;const e=this._visibleRangesForLineRange(t.startLineNumber,t.startColumn,t.endColumn);if(!e)return null;for(const t of e.ranges)o=Math.min(o,t.left),s=Math.max(s,t.left+t.width)}return o=Math.max(0,o-Jb.HORIZONTAL_EXTRA_PX),s+=this._revealHorizontalRightPadding,"selections"===e.type&&s-o>t.width?null:{scrollLeft:this._computeMinimumScrolling(i,n,o,s),maxHorizontalOffset:s}}_computeMinimumScrolling(e,t,i,n,o,s){o=!!o,s=!!s;const r=(t|=0)-(e|=0);return(n|=0)-(i|=0)t?Math.max(0,n-r):e:i}}Jb.HORIZONTAL_EXTRA_PX=30;class ev extends qb{constructor(e){super(),this._context=e;const t=this._context.configuration.options.get(129);this._decorationsLeft=t.decorationsLeft,this._decorationsWidth=t.decorationsWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options.get(129);return this._decorationsLeft=t.decorationsLeft,this._decorationsWidth=t.decorationsWidth,!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_getDecorations(e){const t=e.getDecorationsInViewport();let i=[],n=0;for(let e=0,o=t.length;e
',s=[];for(let e=t;e<=i;e++){const i=e-t,r=n[i];let a="";for(let e=0,t=r.length;e';o[i]=r}this._renderResult=o}render(e,t){return this._renderResult?this._renderResult[t-e]:""}}class iv{constructor(e,t,i,n){this.r=iv._clamp(e),this.g=iv._clamp(t),this.b=iv._clamp(i),this.a=iv._clamp(n)}equals(e){return this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}static _clamp(e){return e<0?0:e>255?255:0|e}}iv.Empty=new iv(0,0,0,0);class nv{constructor(){this._onDidChange=new oe,this.onDidChange=this._onDidChange.event,this._updateColorMap(),th.onDidChange(e=>{e.changedColorMap&&this._updateColorMap()})}static getInstance(){return this._INSTANCE||(this._INSTANCE=new nv),this._INSTANCE}_updateColorMap(){const e=th.getColorMap();if(!e)return this._colors=[iv.Empty],void(this._backgroundIsLight=!0);this._colors=[iv.Empty];for(let t=1;t=.5,this._onDidChange.fire(void 0)}getColor(e){return(e<1||e>=this._colors.length)&&(e=2),this._colors[e]}backgroundIsLight(){return this._backgroundIsLight}}nv._INSTANCE=null;class ov{constructor(e,t,i,n){this.top=0|e,this.left=0|t,this.width=0|i,this.height=0|n}}class sv{constructor(e,t){this.outputLineIndex=e,this.outputOffset=t}}class rv{constructor(e,t,i){this.breakOffsets=e,this.breakOffsetsVisibleColumn=t,this.wrappedTextIndentLength=i}static getInputOffsetOfOutputPosition(e,t,i){return 0===t?i:e[t-1]+i}static getOutputPositionOfInputOffset(e,t){let i=0,n=e.length-1,o=0,s=0;for(;i<=n;){const r=e[o=i+(n-i)/2|0];if(t<(s=o>0?e[o-1]:0))n=o-1;else{if(!(t>=r))break;i=o+1}}return new sv(o,t-s)}}class av{constructor(e,t){this.tabSize=e,this.data=t}}class lv{constructor(e,t,i,n,o,s){this.content=e,this.continuesWithWrappedLine=t,this.minColumn=i,this.maxColumn=n,this.startVisibleColumn=o,this.tokens=s}}class hv{constructor(e,t,i,n,o,s,r,a,l,h){this.minColumn=e,this.maxColumn=t,this.content=i,this.continuesWithWrappedLine=n,this.isBasicASCII=hv.isBasicASCII(i,s),this.containsRTL=hv.containsRTL(i,this.isBasicASCII,o),this.tokens=r,this.inlineDecorations=a,this.tabSize=l,this.startVisibleColumn=h}static isBasicASCII(e,t){return!t||wi(e)}static containsRTL(e,t,i){return!(t||!i)&&bi(e)}}class cv{constructor(e,t,i){this.range=e,this.inlineClassName=t,this.type=i}}class dv{constructor(e,t){this.range=e,this.options=t}}const uv=(()=>{const e=[];for(let t=32;t<=126;t++)e.push(t);return e.push(65533),e})(),gv=(e,t)=>(e-=32)<0||e>96?t<=2?(e+96)%96:95:e;class pv{constructor(e,t){this.scale=t,this.charDataNormal=pv.soften(e,.8),this.charDataLight=pv.soften(e,50/60)}static soften(e,t){let i=new Uint8ClampedArray(e.length);for(let n=0,o=e.length;ne.width||i+d>e.height)return void console.warn("bad render request outside image data");const u=a?this.charDataLight:this.charDataNormal,g=gv(n,r),p=4*e.width,m=s.r,f=s.g,_=s.b,b=o.r-m,v=o.g-f,C=o.b-_,w=e.data;let y=g*h*c,S=i*p+4*t;for(let e=0;ee.width||i+l>e.height)return void console.warn("bad render request outside image data");const h=4*e.width,c=o.r,d=o.g,u=o.b,g=c+.5*(n.r-c),p=d+.5*(n.g-d),m=u+.5*(n.b-u),f=e.data;let _=i*h+4*t;for(let e=0;e{const t=new Uint8ClampedArray(e.length/2);for(let i=0;i>1]=fv[e[i]]<<4|15&fv[e[i+1]];return t},bv={1:mv(()=>_v("0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792")),2:mv(()=>_v("000000000000000055394F383D2800008B8B1F210002000081B1CBCBCC820000847AAF6B9AAF2119BE08B8881AD60000A44FD07DCCF107015338130C00000000385972265F390B406E2437634B4B48031B12B8A0847000001E15B29A402F0000000000004B33460B00007A752C2A0000000000004D3900000084394B82013400ABA5CFC7AD9C0302A45A3E5A98AB000089A43382D97900008BA54AA087A70A0248A6A7AE6DBE0000BF6F94987EA40A01A06DCFA7A7A9030496C32F77891D0000A99FB1A0AFA80603B29AB9CA75930D010C0948354D3900000C0948354F37460D0028BE673D8400000000AF9D7B6E00002B007AA8933400007AA642675C2700007984CFB9C3985B768772A8A6B7B20000CAAECAAFC4B700009F94A6009F840009D09F9BA4CA9C0000CC8FC76DC87F0000C991C472A2000000A894A48CA7B501079BA2C9C69BA20000B19A5D3FA89000005CA6009DA2960901B0A7F0669FB200009D009E00B7890000DAD0F5D092820000D294D4C48BD10000B5A7A4A3B1A50402CAB6CBA6A2000000B5A7A4A3B1A8044FCDADD19D9CB00000B7778F7B8AAE0803C9AB5D3F5D3F00009EA09EA0BAB006039EA0989A8C7900009B9EF4D6B7C00000A9A7816CACA80000ABAC84705D3F000096DA635CDC8C00006F486F266F263D4784006124097B00374F6D2D6D2D6D4A3A95872322000000030000000000008D8939130000000000002E22A5C9CBC70600AB25C0B5C9B400061A2DB04CA67001082AA6BEBEBFC606002321DACBC19E03087AA08B6768380000282FBAC0B8CA7A88AD25BBA5A29900004C396C5894A6000040485A6E356E9442A32CD17EADA70000B4237923628600003E2DE9C1D7B500002F25BBA5A2990000231DB6AFB4A804023025C0B5CAB588062B2CBDBEC0C706882435A75CA20000002326BD6A82A908048B4B9A5A668000002423A09CB4BB060025259C9D8A7900001C1FCAB2C7C700002A2A9387ABA200002626A4A47D6E9D14333163A0C87500004B6F9C2D643A257049364936493647358A34438355497F1A0000A24C1D590000D38DFFBDD4CD3126"))};class vv{static create(e,t){if(this.lastCreated&&e===this.lastCreated.scale&&t===this.lastFontFamily)return this.lastCreated;let i;return i=bv[e]?new pv(bv[e](),e):vv.createFromSampleData(vv.createSampleData(t).data,e),this.lastFontFamily=t,this.lastCreated=i,i}static createSampleData(e){const t=document.createElement("canvas"),i=t.getContext("2d");t.style.height="16px",t.height=16,t.width=960,t.style.width="960px",i.fillStyle="#ffffff",i.font=`bold 16px ${e}`,i.textBaseline="middle";let n=0;for(const e of uv)i.fillText(String.fromCharCode(e),n,8),n+=10;return i.getImageData(0,0,960,16)}static createFromSampleData(e,t){if(61440!==e.length)throw new Error("Unexpected source in MinimapCharRenderer");let i=vv._downsample(e,t);return new pv(i,t)}static _downsampleChar(e,t,i,n,o){const s=1*o,r=2*o;let a=n,l=0;for(let n=0;n0){const e=255/a;for(let t=0;tvv.create(this.fontScale,a.fontFamily)),this.backgroundColor=yv._getMinimapBackground(t,i)}static _getMinimapBackground(e,t){const i=e.getColor(o_);return i?new iv(i.rgba.r,i.rgba.g,i.rgba.b,i.rgba.a):t.getColor(2)}equals(e){return this.renderMinimap===e.renderMinimap&&this.size===e.size&&this.minimapHeightIsEditorHeight===e.minimapHeightIsEditorHeight&&this.scrollBeyondLastLine===e.scrollBeyondLastLine&&this.showSlider===e.showSlider&&this.pixelRatio===e.pixelRatio&&this.typicalHalfwidthCharacterWidth===e.typicalHalfwidthCharacterWidth&&this.lineHeight===e.lineHeight&&this.minimapLeft===e.minimapLeft&&this.minimapWidth===e.minimapWidth&&this.minimapHeight===e.minimapHeight&&this.canvasInnerWidth===e.canvasInnerWidth&&this.canvasInnerHeight===e.canvasInnerHeight&&this.canvasOuterWidth===e.canvasOuterWidth&&this.canvasOuterHeight===e.canvasOuterHeight&&this.isSampling===e.isSampling&&this.editorHeight===e.editorHeight&&this.fontScale===e.fontScale&&this.minimapLineHeight===e.minimapLineHeight&&this.minimapCharWidth===e.minimapCharWidth&&this.backgroundColor&&this.backgroundColor.equals(e.backgroundColor)}}class Sv{constructor(e,t,i,n,o,s,r,a){this.scrollTop=e,this.scrollHeight=t,this.sliderNeeded=i,this._computedSliderRatio=n,this.sliderTop=o,this.sliderHeight=s,this.startLineNumber=r,this.endLineNumber=a}getDesiredScrollTopFromDelta(e){return Math.round(this.scrollTop+e/this._computedSliderRatio)}getDesiredScrollTopFromTouchLocation(e){return Math.round((e-this.sliderHeight/2)/this._computedSliderRatio)}static create(e,t,i,n,o,s,r,a,l,h,c){const d=e.pixelRatio,u=e.minimapLineHeight,g=Math.floor(e.canvasInnerHeight/u),p=e.lineHeight;if(e.minimapHeightIsEditorHeight){const t=Math.max(1,Math.floor(o*o/(a*e.lineHeight+(e.scrollBeyondLastLine?o-e.lineHeight:0)))),i=Math.max(0,e.minimapHeight-t),n=i/(h-o),s=l*n,c=i>0,d=Math.floor(e.canvasInnerHeight/e.minimapLineHeight);return new Sv(l,h,c,n,s,t,1,Math.min(r,d))}let m,f;m=s&&i!==r?Math.floor((i-t+1)*u/d):Math.floor(o/p*u/d),f=e.scrollBeyondLastLine?(r-1)*u/d:Math.max(0,r*u/d-m);const _=(f=Math.min(e.minimapHeight-m,f))/(h-o),b=l*_;let v=0;if(e.scrollBeyondLastLine&&(v=o/p-1),g>=r+v)return new Sv(l,h,f>0,_,b,m,1,r);{let e=Math.max(1,Math.floor(t-b*d/u));c&&c.scrollHeight===h&&(c.scrollTop>l&&(e=Math.min(e,c.startLineNumber)),c.scrollTopLv.INVALID),this._renderedLines._set(e.startLineNumber,i)}linesEquals(e){if(!this.scrollEquals(e))return!1;const t=this._renderedLines._get().lines;for(let e=0,i=t.length;e1){for(let t=0,i=r-1;t0&&this.minimapLines[i-1]>=e;)i--;let n=this.modelLineToMinimapLine(t)-1;for(;n+1t)return null}return[i+1,n+1]}decorationLineRangeToMinimapLineRange(e,t){let i=this.modelLineToMinimapLine(e),n=this.modelLineToMinimapLine(t);return e!==t&&n===i&&(n===this.minimapLines.length?i>1&&i--:n++),[i,n]}onLinesDeleted(e){const t=e.toLineNumber-e.fromLineNumber+1;let i=this.minimapLines.length,n=0;for(let o=this.minimapLines.length-1;o>=0&&!(this.minimapLines[o]=0&&!(this.minimapLines[i]0,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,viewportStartLineNumber:t,viewportEndLineNumber:i,viewportStartLineNumberVerticalOffset:e.getVerticalOffsetForLineNumber(t),scrollTop:e.scrollTop,scrollLeft:e.scrollLeft,viewportWidth:e.viewportWidth,viewportHeight:e.viewportHeight};this._actual.render(n)}_recreateLineSampling(){this._minimapSelections=null;const e=Boolean(this._samplingState),[t,i]=xv.compute(this.options,this._context.model.getLineCount(),this._samplingState);if(this._samplingState=t,e&&this._samplingState)for(const e of i)switch(e.type){case"deleted":this._actual.onLinesDeleted(e.deleteFromLineNumber,e.deleteToLineNumber);break;case"inserted":this._actual.onLinesInserted(e.insertFromLineNumber,e.insertToLineNumber);break;case"flush":this._actual.onFlushed()}}getLineCount(){return this._samplingState?this._samplingState.minimapLines.length:this._context.model.getLineCount()}getRealLineCount(){return this._context.model.getLineCount()}getLineContent(e){return this._context.model.getLineContent(this._samplingState?this._samplingState.minimapLines[e-1]:e)}getMinimapLinesRenderingData(e,t,i){if(this._samplingState){let n=[];for(let o=0,s=t-e+1;o{if(e.preventDefault(),0===this._model.options.renderMinimap)return;if(!this._lastRenderData)return;if("proportional"!==this._model.options.size){if(e.leftButton&&this._lastRenderData){const t=cu(this._slider.domNode);this._startSliderDragging(e.buttons,e.posx,t.top+t.height/2,e.posy,this._lastRenderData.renderedLayout)}return}let t=Math.floor(this._model.options.canvasInnerHeight/this._model.options.canvasOuterHeight*e.browserEvent.offsetY/this._model.options.minimapLineHeight)+this._lastRenderData.renderedLayout.startLineNumber;t=Math.min(t,this._model.getLineCount()),this._model.revealLineNumber(t)}),this._sliderMouseMoveMonitor=new Wg,this._sliderMouseDownListener=Gd(this._slider.domNode,"mousedown",e=>{e.preventDefault(),e.stopPropagation(),e.leftButton&&this._lastRenderData&&this._startSliderDragging(e.buttons,e.posx,e.posy,e.posy,this._lastRenderData.renderedLayout)}),this._gestureDisposable=Fg.addTarget(this._domNode.domNode),this._sliderTouchStartListener=jd(this._domNode.domNode,Pg.Start,e=>{e.preventDefault(),e.stopPropagation(),this._lastRenderData&&(this._slider.toggleClassName("active",!0),this._gestureInProgress=!0,this.scrollDueToTouchEvent(e))},{passive:!1}),this._sliderTouchMoveListener=jd(this._domNode.domNode,Pg.Change,e=>{e.preventDefault(),e.stopPropagation(),this._lastRenderData&&this._gestureInProgress&&this.scrollDueToTouchEvent(e)},{passive:!1}),this._sliderTouchEndListener=Gd(this._domNode.domNode,Pg.End,e=>{e.preventDefault(),e.stopPropagation(),this._gestureInProgress=!1,this._slider.toggleClassName("active",!1)})}_startSliderDragging(e,t,i,n,o){this._slider.toggleClassName("active",!0);const s=(e,n)=>{const s=Math.abs(n-t);this._model.setScrollTop(z&&s>Cv?o.scrollTop:o.getDesiredScrollTopFromDelta(e-i))};n!==i&&s(n,t),this._sliderMouseMoveMonitor.startMonitoring(this._slider.domNode,e,Bg,e=>s(e.posy,e.posx),()=>{this._slider.toggleClassName("active",!1)})}scrollDueToTouchEvent(e){const t=this._domNode.domNode.getBoundingClientRect().top,i=this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(e.pageY-t);this._model.setScrollTop(i)}dispose(){this._mouseDownListener.dispose(),this._sliderMouseMoveMonitor.dispose(),this._sliderMouseDownListener.dispose(),this._gestureDisposable.dispose(),this._sliderTouchStartListener.dispose(),this._sliderTouchMoveListener.dispose(),this._sliderTouchEndListener.dispose(),super.dispose()}_getMinimapDomNodeClassName(){return"always"===this._model.options.showSlider?"minimap slider-always":"minimap slider-mouseover"}getDomNode(){return this._domNode}_applyLayout(){this._domNode.setLeft(this._model.options.minimapLeft),this._domNode.setWidth(this._model.options.minimapWidth),this._domNode.setHeight(this._model.options.minimapHeight),this._shadow.setHeight(this._model.options.minimapHeight),this._canvas.setWidth(this._model.options.canvasOuterWidth),this._canvas.setHeight(this._model.options.canvasOuterHeight),this._canvas.domNode.width=this._model.options.canvasInnerWidth,this._canvas.domNode.height=this._model.options.canvasInnerHeight,this._decorationsCanvas.setWidth(this._model.options.canvasOuterWidth),this._decorationsCanvas.setHeight(this._model.options.canvasOuterHeight),this._decorationsCanvas.domNode.width=this._model.options.canvasInnerWidth,this._decorationsCanvas.domNode.height=this._model.options.canvasInnerHeight,this._slider.setWidth(this._model.options.minimapWidth)}_getBuffer(){return this._buffers||this._model.options.canvasInnerWidth>0&&this._model.options.canvasInnerHeight>0&&(this._buffers=new Ev(this._canvas.domNode.getContext("2d"),this._model.options.canvasInnerWidth,this._model.options.canvasInnerHeight,this._model.options.backgroundColor)),this._buffers?this._buffers.getBuffer():null}onDidChangeOptions(){this._lastRenderData=null,this._buffers=null,this._applyLayout(),this._domNode.setClassName(this._getMinimapDomNodeClassName())}onSelectionChanged(){return this._renderDecorations=!0,!0}onDecorationsChanged(){return this._renderDecorations=!0,!0}onFlushed(){return this._lastRenderData=null,!0}onLinesChanged(e,t){return!!this._lastRenderData&&this._lastRenderData.onLinesChanged(e,t)}onLinesDeleted(e,t){return this._lastRenderData&&this._lastRenderData.onLinesDeleted(e,t),!0}onLinesInserted(e,t){return this._lastRenderData&&this._lastRenderData.onLinesInserted(e,t),!0}onScrollChanged(){return this._renderDecorations=!0,!0}onThemeChanged(){return this._selectionColor=this._theme.getColor(t_),this._renderDecorations=!0,!0}onTokensChanged(e){return!!this._lastRenderData&&this._lastRenderData.onTokensChanged(e)}onTokensColorsChanged(){return this._lastRenderData=null,this._buffers=null,!0}onZonesChanged(){return this._lastRenderData=null,!0}render(e){if(0===this._model.options.renderMinimap)return this._shadow.setClassName("minimap-shadow-hidden"),this._sliderHorizontal.setWidth(0),void this._sliderHorizontal.setHeight(0);this._shadow.setClassName(e.scrollLeft+e.viewportWidth>=e.scrollWidth?"minimap-shadow-hidden":"minimap-shadow-visible");const t=Sv.create(this._model.options,e.viewportStartLineNumber,e.viewportEndLineNumber,e.viewportStartLineNumberVerticalOffset,e.viewportHeight,e.viewportContainsWhitespaceGaps,this._model.getLineCount(),this._model.getRealLineCount(),e.scrollTop,e.scrollHeight,this._lastRenderData?this._lastRenderData.renderedLayout:null);this._slider.setDisplay(t.sliderNeeded?"block":"none"),this._slider.setTop(t.sliderTop),this._slider.setHeight(t.sliderHeight);const i=Math.min(this._model.options.minimapWidth,Math.round(e.scrollLeft/this._model.options.typicalHalfwidthCharacterWidth*this._model.options.minimapCharWidth/this._model.options.pixelRatio));this._sliderHorizontal.setLeft(i),this._sliderHorizontal.setWidth(this._model.options.minimapWidth-i),this._sliderHorizontal.setTop(0),this._sliderHorizontal.setHeight(t.sliderHeight),this.renderDecorations(t),this._lastRenderData=this.renderLines(t)}renderDecorations(e){if(this._renderDecorations){this._renderDecorations=!1;const t=this._model.getSelections(),i=this._model.getMinimapDecorationsInViewport(e.startLineNumber,e.endLineNumber),{canvasInnerWidth:n,canvasInnerHeight:o}=this._model.options,s=this._model.options.minimapLineHeight,r=this._model.options.minimapCharWidth,a=this._model.getOptions().tabSize,l=this._decorationsCanvas.domNode.getContext("2d");l.clearRect(0,0,n,o);const h=new Map;for(let i=0;ithis._model.options.canvasInnerHeight)return;let d=t.get(s);const u=!d;if(!d){const e=this._model.getLineContent(s);d=[mo];for(let t=1;ts?d.length-1:p-1;b>0&&this.renderDecoration(e,n,_,c,d[b]-_||2,r),u&&this.renderLineHighlight(e,n,c,r)}renderLineHighlight(e,t,i,n){e.fillStyle=t&&t.transparent(.5).toString()||"",e.fillRect(mo,i,e.canvas.width,n)}renderDecoration(e,t,i,n,o,s){e.fillStyle=t&&t.toString()||"",e.fillRect(i,n,o,s)}renderLines(e){const t=e.startLineNumber,i=e.endLineNumber,n=this._model.options.minimapLineHeight;if(this._lastRenderData&&this._lastRenderData.linesEquals(e)){const t=this._lastRenderData._get();return new Dv(e,t.imageData,t.lines)}const o=this._getBuffer();if(!o)return null;let[s,r,a]=Nv._renderUntouchedLines(o,t,i,n,this._lastRenderData);const l=this._model.getMinimapLinesRenderingData(t,i,a),h=this._model.getOptions().tabSize,c=this._model.options.backgroundColor,d=this._model.tokensColorTracker,u=d.backgroundIsLight(),g=this._model.options.renderMinimap,p=this._model.options.charRenderer(),m=this._model.options.fontScale,f=this._model.options.minimapCharWidth,_=(1===g?2:3)*m,b=n>_?Math.floor((n-_)/2):0;let v=0;const C=[];for(let e=0,s=i-t+1;e=0&&om)return;const s=g.charCodeAt(b);if(9===s){const e=h-(b+v)%h;v+=e-1,_+=e*o}else if(32===s)_+=o;else{const h=Li(s)?2:1;for(let c=0;cm)return}}}}}Cn((e,t)=>{const i=e.getColor(o_);i&&t.addRule(`.monaco-editor .minimap > canvas { opacity: ${i.rgba.a}; will-change: opacity; }`);const n=e.getColor(s_);n&&t.addRule(`.monaco-editor .minimap-slider .minimap-slider-horizontal { background: ${n}; }`);const o=e.getColor(r_);o&&t.addRule(`.monaco-editor .minimap-slider:hover .minimap-slider-horizontal { background: ${o}; }`);const s=e.getColor(a_);s&&t.addRule(`.monaco-editor .minimap-slider.active .minimap-slider-horizontal { background: ${s}; }`);const r=e.getColor(Nm);r&&t.addRule(`.monaco-editor .minimap-shadow-visible { box-shadow: ${r} -6px 0 6px -6px inset; }`)});class Iv extends Yg{constructor(e){super(e);const t=this._context.configuration.options.get(129);this._widgets={},this._verticalScrollbarWidth=t.verticalScrollbarWidth,this._minimapWidth=t.minimap.minimapWidth,this._horizontalScrollbarHeight=t.horizontalScrollbarHeight,this._editorHeight=t.height,this._editorWidth=t.width,this._domNode=Mg(document.createElement("div")),Zg.write(this._domNode,4),this._domNode.setClassName("overlayWidgets")}dispose(){super.dispose(),this._widgets={}}getDomNode(){return this._domNode}onConfigurationChanged(e){const t=this._context.configuration.options.get(129);return this._verticalScrollbarWidth=t.verticalScrollbarWidth,this._minimapWidth=t.minimap.minimapWidth,this._horizontalScrollbarHeight=t.horizontalScrollbarHeight,this._editorHeight=t.height,this._editorWidth=t.width,!0}addWidget(e){const t=Mg(e.getDomNode());this._widgets[e.getId()]={widget:e,preference:null,domNode:t},t.setPosition("absolute"),t.setAttribute("widgetId",e.getId()),this._domNode.appendChild(t),this.setShouldRender()}setWidgetPosition(e,t){const i=this._widgets[e.getId()];return i.preference!==t&&(i.preference=t,this.setShouldRender(),!0)}removeWidget(e){const t=e.getId();if(this._widgets.hasOwnProperty(t)){const e=this._widgets[t].domNode.domNode;delete this._widgets[t],e.parentNode.removeChild(e),this.setShouldRender()}}_renderWidget(e){const t=e.domNode;null!==e.preference?0===e.preference?(t.setTop(0),t.setRight(2*this._verticalScrollbarWidth+this._minimapWidth)):1===e.preference?(t.setTop(this._editorHeight-t.domNode.clientHeight-2*this._horizontalScrollbarHeight),t.setRight(2*this._verticalScrollbarWidth+this._minimapWidth)):2===e.preference&&(t.setTop(0),t.domNode.style.right="50%"):t.unsetTop()}prepareRender(e){}render(e){this._domNode.setWidth(this._editorWidth);const t=Object.keys(this._widgets);for(let e=0,i=t.length;e=3){const t=Math.floor(n/3),i=Math.floor(n/3),o=n-t-i,s=e+t;return[[0,e,s,e,e+t+o,e,s,e],[0,t,o,t+o,i,t+o+i,o+i,t+o+i]]}if(2===i){const t=Math.floor(n/2),i=n-t;return[[0,e,e,e,e+t,e,e,e],[0,t,t,t,i,t+i,t+i,t+i]]}return[[0,e,e,e,e,e,e,e],[0,n,n,n,n,n,n,n]]}equals(e){return this.lineHeight===e.lineHeight&&this.pixelRatio===e.pixelRatio&&this.overviewRulerLanes===e.overviewRulerLanes&&this.renderBorder===e.renderBorder&&this.borderColor===e.borderColor&&this.hideCursor===e.hideCursor&&this.cursorColor===e.cursorColor&&this.themeType===e.themeType&&this.backgroundColor===e.backgroundColor&&this.top===e.top&&this.right===e.right&&this.domWidth===e.domWidth&&this.domHeight===e.domHeight&&this.canvasWidth===e.canvasWidth&&this.canvasHeight===e.canvasHeight}}class Av extends Yg{constructor(e){super(e),this._domNode=Mg(document.createElement("canvas")),this._domNode.setClassName("decorationsOverviewRuler"),this._domNode.setPosition("absolute"),this._domNode.setLayerHinting(!0),this._domNode.setContain("strict"),this._domNode.setAttribute("aria-hidden","true"),this._updateSettings(!1),this._tokensColorTrackerListener=th.onDidChange(e=>{e.changedColorMap&&this._updateSettings(!0)}),this._cursorPositions=[]}dispose(){super.dispose(),this._tokensColorTrackerListener.dispose()}_updateSettings(e){const t=new Tv(this._context.configuration,this._context.theme);return!(this._settings&&this._settings.equals(t)||(this._settings=t,this._domNode.setTop(this._settings.top),this._domNode.setRight(this._settings.right),this._domNode.setWidth(this._settings.domWidth),this._domNode.setHeight(this._settings.domHeight),this._domNode.domNode.width=this._settings.canvasWidth,this._domNode.domNode.height=this._settings.canvasHeight,e&&this._render(),0))}onConfigurationChanged(e){return this._updateSettings(!1)}onCursorStateChanged(e){this._cursorPositions=[];for(let t=0,i=e.selections.length;tt&&(e=t-a),u=e-a,_=e+a}u>f+1||s!==p?(0!==e&&l.fillRect(h[p],m,c[p],f-m),p=s,m=u,f=_):_>f&&(f=_)}l.fillRect(h[p],m,c[p],f-m)}if(!this._settings.hideCursor&&this._settings.cursorColor){const e=2*this._settings.pixelRatio|0,i=e/2|0,s=this._settings.x[7],r=this._settings.w[7];l.fillStyle=this._settings.cursorColor;let a=-100,h=-100;for(let c=0,d=this._cursorPositions.length;ct&&(d=t-i);const u=d-i,g=u+e;u>h+1?(0!==c&&l.fillRect(s,a,r,h-a),a=u,h=g):g>h&&(h=g)}l.fillRect(s,a,r,h-a)}this._settings.renderBorder&&this._settings.borderColor&&this._settings.overviewRulerLanes>0&&(l.beginPath(),l.lineWidth=1,l.strokeStyle=this._settings.borderColor,l.moveTo(0,0),l.lineTo(0,t),l.stroke(),l.moveTo(0,0),l.lineTo(e,0),l.stroke())}}class Mv{constructor(e,t,i){this.from=0|e,this.to=0|t,this.colorId=0|i}static compare(e,t){return e.colorId===t.colorId?e.from===t.from?e.to-t.to:e.from-t.from:e.colorId-t.colorId}}class Ov{constructor(e,t,i){this.startLineNumber=e,this.endLineNumber=t,this.color=i,this._colorZone=null}static compare(e,t){return e.color===t.color?e.startLineNumber===t.startLineNumber?e.endLineNumber-t.endLineNumber:e.startLineNumber-t.startLineNumber:e.colori&&(c=i-d);const u=a.color;let g=this._color2Id[u];g||(g=++this._lastAssignedId,this._color2Id[u]=g,this._id2Color[g]=u);const p=new Mv(c-d,c+d,g);a.setColorZone(p),s.push(p)}return this._colorZonesInvalid=!1,s.sort(Mv.compare),s}}class Pv extends Gg{constructor(e,t){super(),this._context=e;const i=this._context.configuration.options;this._domNode=Mg(document.createElement("canvas")),this._domNode.setClassName(t),this._domNode.setPosition("absolute"),this._domNode.setLayerHinting(!0),this._domNode.setContain("strict"),this._zoneManager=new Rv(e=>this._context.viewLayout.getVerticalOffsetForLineNumber(e)),this._zoneManager.setDOMWidth(0),this._zoneManager.setDOMHeight(0),this._zoneManager.setOuterHeight(this._context.viewLayout.getScrollHeight()),this._zoneManager.setLineHeight(i.get(54)),this._zoneManager.setPixelRatio(i.get(127)),this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return e.hasChanged(54)&&(this._zoneManager.setLineHeight(t.get(54)),this._render()),e.hasChanged(127)&&(this._zoneManager.setPixelRatio(t.get(127)),this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render()),!0}onFlushed(e){return this._render(),!0}onScrollChanged(e){return e.scrollHeightChanged&&(this._zoneManager.setOuterHeight(e.scrollHeight),this._render()),!0}onZonesChanged(e){return this._render(),!0}getDomNode(){return this._domNode.domNode}setLayout(e){this._domNode.setTop(e.top),this._domNode.setRight(e.right);let t=!1;t=this._zoneManager.setDOMWidth(e.width)||t,(t=this._zoneManager.setDOMHeight(e.height)||t)&&(this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render())}setZones(e){this._zoneManager.setZones(e),this._render()}_render(){if(0===this._zoneManager.getOuterHeight())return!1;const e=this._zoneManager.getCanvasWidth(),t=this._zoneManager.getCanvasHeight(),i=this._zoneManager.resolveColorZones(),n=this._zoneManager.getId2Color(),o=this._domNode.domNode.getContext("2d");return o.clearRect(0,0,e,t),i.length>0&&this._renderOneLane(o,i,n,e),!0}_renderOneLane(e,t,i,n){let o=0,s=0,r=0;for(const a of t){const t=a.colorId,l=a.from,h=a.to;t!==o?(e.fillRect(0,s,n,r-s),e.fillStyle=i[o=t],s=l,r=h):r>=l?r=Math.max(r,h):(e.fillRect(0,s,n,r-s),s=l,r=h)}e.fillRect(0,s,n,r-s)}}class Fv extends Yg{constructor(e){super(e),this.domNode=Mg(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this.domNode.setClassName("view-rulers"),this._renderedRulers=[];const t=this._context.configuration.options;this._rulers=t.get(89),this._typicalHalfwidthCharacterWidth=t.get(38).typicalHalfwidthCharacterWidth}dispose(){super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return this._rulers=t.get(89),this._typicalHalfwidthCharacterWidth=t.get(38).typicalHalfwidthCharacterWidth,!0}onScrollChanged(e){return e.scrollHeightChanged}prepareRender(e){}_ensureRulersCount(){const e=this._renderedRulers.length,t=this._rulers.length;if(e===t)return;if(e0;){const e=Mg(document.createElement("div"));e.setClassName("view-ruler"),e.setWidth(n),this.domNode.appendChild(e),this._renderedRulers.push(e),o--}return}let i=e-t;for(;i>0;){const e=this._renderedRulers.pop();this.domNode.removeChild(e),i--}}render(e){this._ensureRulersCount();for(let t=0,i=this._rulers.length;t{const i=e.getColor(M_);i&&t.addRule(`.monaco-editor .view-ruler { box-shadow: 1px 0 0 0 ${i} inset; }`)});class Bv extends Yg{constructor(e){super(e),this._scrollTop=0,this._width=0,this._updateWidth(),this._shouldShow=!1;const t=this._context.configuration.options.get(90);this._useShadows=t.useShadows,this._domNode=Mg(document.createElement("div")),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true")}dispose(){super.dispose()}_updateShouldShow(){const e=this._useShadows&&this._scrollTop>0;return this._shouldShow!==e&&(this._shouldShow=e,!0)}getDomNode(){return this._domNode}_updateWidth(){const e=this._context.configuration.options.get(129);this._width=0===e.minimap.renderMinimap||e.minimap.minimapWidth>0&&0===e.minimap.minimapLeft?e.width:e.width-e.minimap.minimapWidth-e.verticalScrollbarWidth}onConfigurationChanged(e){const t=this._context.configuration.options.get(90);return this._useShadows=t.useShadows,this._updateWidth(),this._updateShouldShow(),!0}onScrollChanged(e){return this._scrollTop=e.scrollTop,this._updateShouldShow()}prepareRender(e){}render(e){this._domNode.setWidth(this._width),this._domNode.setClassName(this._shouldShow?"scroll-decoration":"")}}Cn((e,t)=>{const i=e.getColor(Nm);i&&t.addRule(`.monaco-editor .scroll-decoration { box-shadow: ${i} 0 6px 6px -6px inset; }`)});class Wv{constructor(e){this.left=e.left,this.width=e.width,this.startStyle=null,this.endStyle=null}}class Vv{constructor(e,t){this.lineNumber=e,this.ranges=t}}function zv(e){return new Wv(e)}function Hv(e){return new Vv(e.lineNumber,e.ranges.map(zv))}class Uv extends em{constructor(e){super(),this._previousFrameVisibleRangesWithStyle=[],this._context=e;const t=this._context.configuration.options;this._lineHeight=t.get(54),this._roundedSelection=t.get(88),this._typicalHalfwidthCharacterWidth=t.get(38).typicalHalfwidthCharacterWidth,this._selections=[],this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return this._lineHeight=t.get(54),this._roundedSelection=t.get(88),this._typicalHalfwidthCharacterWidth=t.get(38).typicalHalfwidthCharacterWidth,!0}onCursorStateChanged(e){return this._selections=e.selections.slice(0),!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_visibleRangesHaveGaps(e){for(let t=0,i=e.length;t1)return!0;return!1}_enrichVisibleRangesWithStyle(e,t,i){const n=this._typicalHalfwidthCharacterWidth/4;let o=null,s=null;if(i&&i.length>0&&t.length>0){const n=t[0].lineNumber;if(n===e.startLineNumber)for(let e=0;!o&&e=0;e--)i[e].lineNumber===r&&(s=i[e].ranges[0]);o&&!o.startStyle&&(o=null),s&&!s.startStyle&&(s=null)}for(let e=0,i=t.length;e0){const i=t[e-1].ranges[0].left,o=t[e-1].ranges[0].left+t[e-1].ranges[0].width;Kv(a-i)i&&(h.top=1),Kv(l-o)'}_actualRenderOneSelection(e,t,i,n){if(0===n.length)return;const o=!!n[0].ranges[0].startStyle,s=this._lineHeight.toString(),r=(this._lineHeight-1).toString(),a=n[0].lineNumber,l=n[n.length-1].lineNumber;for(let h=0,c=n.length;h1,r)}this._previousFrameVisibleRangesWithStyle=o,this._renderResult=t.map(([e,t])=>e+t)}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}function Kv(e){return e<0?-e:e}Uv.SELECTION_CLASS_NAME="selected-text",Uv.SELECTION_TOP_LEFT="top-left-radius",Uv.SELECTION_BOTTOM_LEFT="bottom-left-radius",Uv.SELECTION_TOP_RIGHT="top-right-radius",Uv.SELECTION_BOTTOM_RIGHT="bottom-right-radius",Uv.EDITOR_BACKGROUND_CLASS_NAME="monaco-editor-background",Uv.ROUNDED_PIECE_WIDTH=10,Cn((e,t)=>{const i=e.getColor(nf);i&&t.addRule(`.monaco-editor .focused .selected-text { background-color: ${i}; }`);const n=e.getColor(sf);n&&t.addRule(`.monaco-editor .selected-text { background-color: ${n}; }`);const o=e.getColor(of);o&&!o.isTransparent()&&t.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${o}; }`)});class $v{constructor(e,t,i,n,o,s){this.top=e,this.left=t,this.width=i,this.height=n,this.textContent=o,this.textContentClassName=s}}class jv{constructor(e){this._context=e;const t=this._context.configuration.options,i=t.get(38);this._cursorStyle=t.get(21),this._lineHeight=t.get(54),this._typicalHalfwidthCharacterWidth=i.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(t.get(24),this._typicalHalfwidthCharacterWidth),this._isVisible=!0,this._domNode=Mg(document.createElement("div")),this._domNode.setClassName(`cursor ${G_}`),this._domNode.setHeight(this._lineHeight),this._domNode.setTop(0),this._domNode.setLeft(0),Tg.applyFontInfo(this._domNode,i),this._domNode.setDisplay("none"),this._position=new Tt(1,1),this._lastRenderedContent="",this._renderData=null}getDomNode(){return this._domNode}getPosition(){return this._position}show(){this._isVisible||(this._domNode.setVisibility("inherit"),this._isVisible=!0)}hide(){this._isVisible&&(this._domNode.setVisibility("hidden"),this._isVisible=!1)}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(38);return this._cursorStyle=t.get(21),this._lineHeight=t.get(54),this._typicalHalfwidthCharacterWidth=i.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(t.get(24),this._typicalHalfwidthCharacterWidth),Tg.applyFontInfo(this._domNode,i),!0}onCursorPositionChanged(e){return this._position=e,!0}_prepareRender(e){let t="";if(this._cursorStyle===Io.Line||this._cursorStyle===Io.LineThin){const i=e.visibleRangeForPosition(this._position);if(!i||i.outsideRenderedLine)return null;let n;if(this._cursorStyle===Io.Line){if((n=Hu(this._lineCursorWidth>0?this._lineCursorWidth:2))>2){const e=this._context.model.getLineContent(this._position.lineNumber),i=fi(e,this._position.column-1);t=e.substr(this._position.column-1,i)}}else n=Hu(1);let o=i.left;n>=2&&o>=1&&(o-=1);const s=e.getVerticalOffsetForLineNumber(this._position.lineNumber)-e.bigNumbersDelta;return new $v(s,o,n,this._lineHeight,t,"")}const i=this._context.model.getLineContent(this._position.lineNumber),n=fi(i,this._position.column-1),o=e.linesVisibleRangesForRange(new ro(this._position.lineNumber,this._position.column,this._position.lineNumber,this._position.column+n),!1);if(!o||0===o.length)return null;const s=o[0];if(s.outsideRenderedLine||0===s.ranges.length)return null;const r=s.ranges[0],a=r.width<1?this._typicalHalfwidthCharacterWidth:r.width;let l="";if(this._cursorStyle===Io.Block){const e=this._context.model.getViewLineData(this._position.lineNumber);t=i.substr(this._position.column-1,n);const o=e.tokens.findTokenIndexAtOffset(this._position.column-1);l=e.tokens.getClassName(o)}let h=e.getVerticalOffsetForLineNumber(this._position.lineNumber)-e.bigNumbersDelta,c=this._lineHeight;return this._cursorStyle!==Io.Underline&&this._cursorStyle!==Io.UnderlineThin||(h+=this._lineHeight-2,c=2),new $v(h,r.left,a,c,t,l)}prepareRender(e){this._renderData=this._prepareRender(e)}render(e){return this._renderData?(this._lastRenderedContent!==this._renderData.textContent&&(this._lastRenderedContent=this._renderData.textContent,this._domNode.domNode.textContent=this._lastRenderedContent),this._domNode.setClassName(`cursor ${G_} ${this._renderData.textContentClassName}`),this._domNode.setDisplay("block"),this._domNode.setTop(this._renderData.top),this._domNode.setLeft(this._renderData.left),this._domNode.setWidth(this._renderData.width),this._domNode.setLineHeight(this._renderData.height),this._domNode.setHeight(this._renderData.height),{domNode:this._domNode.domNode,position:this._position,contentLeft:this._renderData.left,height:this._renderData.height,width:2}):(this._domNode.setDisplay("none"),null)}}class qv extends Yg{constructor(e){super(e);const t=this._context.configuration.options;this._readOnly=t.get(77),this._cursorBlinking=t.get(19),this._cursorStyle=t.get(21),this._cursorSmoothCaretAnimation=t.get(20),this._selectionIsEmpty=!0,this._isComposingInput=!1,this._isVisible=!1,this._primaryCursor=new jv(this._context),this._secondaryCursors=[],this._renderData=[],this._domNode=Mg(document.createElement("div")),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true"),this._updateDomClassName(),this._domNode.appendChild(this._primaryCursor.getDomNode()),this._startCursorBlinkAnimation=new Ua,this._cursorFlatBlinkInterval=new Ka,this._blinkingEnabled=!1,this._editorHasFocus=!1,this._updateBlinking()}dispose(){super.dispose(),this._startCursorBlinkAnimation.dispose(),this._cursorFlatBlinkInterval.dispose()}getDomNode(){return this._domNode}onCompositionStart(e){return this._isComposingInput=!0,this._updateBlinking(),!0}onCompositionEnd(e){return this._isComposingInput=!1,this._updateBlinking(),!0}onConfigurationChanged(e){const t=this._context.configuration.options;this._readOnly=t.get(77),this._cursorBlinking=t.get(19),this._cursorStyle=t.get(21),this._cursorSmoothCaretAnimation=t.get(20),this._updateBlinking(),this._updateDomClassName(),this._primaryCursor.onConfigurationChanged(e);for(let t=0,i=this._secondaryCursors.length;tt.length){const e=this._secondaryCursors.length-t.length;for(let t=0;t{for(let i=0,n=e.ranges.length;i{this._isVisible?this._hide():this._show()},qv.BLINK_INTERVAL):this._startCursorBlinkAnimation.setIfNotSet(()=>{this._blinkingEnabled=!0,this._updateDomClassName()},qv.BLINK_INTERVAL))}_updateDomClassName(){this._domNode.setClassName(this._getClassName())}_getClassName(){let e="cursors-layer";switch(this._selectionIsEmpty||(e+=" has-selection"),this._cursorStyle){case Io.Line:e+=" cursor-line-style";break;case Io.Block:e+=" cursor-block-style";break;case Io.Underline:e+=" cursor-underline-style";break;case Io.LineThin:e+=" cursor-line-thin-style";break;case Io.BlockOutline:e+=" cursor-block-outline-style";break;case Io.UnderlineThin:e+=" cursor-underline-thin-style";break;default:e+=" cursor-line-style"}if(this._blinkingEnabled)switch(this._getCursorBlinking()){case 1:e+=" cursor-blink";break;case 2:e+=" cursor-smooth";break;case 3:e+=" cursor-phase";break;case 4:e+=" cursor-expand";break;case 5:e+=" cursor-solid";break;default:e+=" cursor-solid"}else e+=" cursor-solid";return this._cursorSmoothCaretAnimation&&(e+=" cursor-smooth-caret-animation"),e}_show(){this._primaryCursor.show();for(let e=0,t=this._secondaryCursors.length;e{const i=e.getColor(D_);if(i){let n=e.getColor(E_);n||(n=i.opposite()),t.addRule(`.monaco-editor .cursors-layer .cursor { background-color: ${i}; border-color: ${i}; color: ${n}; }`),"hc"===e.type&&t.addRule(`.monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid ${n}; border-right: 1px solid ${n}; }`)}});const Gv=()=>{throw new Error("Invalid change accessor")};class Yv extends Yg{constructor(e){super(e);const t=this._context.configuration.options,i=t.get(129);this._lineHeight=t.get(54),this._contentWidth=i.contentWidth,this._contentLeft=i.contentLeft,this.domNode=Mg(document.createElement("div")),this.domNode.setClassName("view-zones"),this.domNode.setPosition("absolute"),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this.marginDomNode=Mg(document.createElement("div")),this.marginDomNode.setClassName("margin-view-zones"),this.marginDomNode.setPosition("absolute"),this.marginDomNode.setAttribute("role","presentation"),this.marginDomNode.setAttribute("aria-hidden","true"),this._zones={}}dispose(){super.dispose(),this._zones={}}_recomputeWhitespacesProps(){const e=this._context.viewLayout.getWhitespaces(),t=new Map;for(const i of e)t.set(i.id,i);let i=!1;return this._context.model.changeWhitespace(e=>{const n=Object.keys(this._zones);for(let o=0,s=n.length;o{const o={addZone:e=>(t=!0,this._addZone(i,e)),removeZone:e=>{e&&(t=this._removeZone(i,e)||t)},layoutZone:e=>{e&&(t=this._layoutZone(i,e)||t)}};!function s(e,t){try{e(t)}catch(e){n(e)}}(e,o),o.addZone=Gv,o.removeZone=Gv,o.layoutZone=Gv}),t}_addZone(e,t){const i=this._computeWhitespaceProps(t),n={whitespaceId:e.insertWhitespace(i.afterViewLineNumber,this._getZoneOrdinal(t),i.heightInPx,i.minWidthInPx),delegate:t,isVisible:!1,domNode:Mg(t.domNode),marginDomNode:t.marginDomNode?Mg(t.marginDomNode):null};return this._safeCallOnComputedHeight(n.delegate,i.heightInPx),n.domNode.setPosition("absolute"),n.domNode.domNode.style.width="100%",n.domNode.setDisplay("none"),n.domNode.setAttribute("monaco-view-zone",n.whitespaceId),this.domNode.appendChild(n.domNode),n.marginDomNode&&(n.marginDomNode.setPosition("absolute"),n.marginDomNode.domNode.style.width="100%",n.marginDomNode.setDisplay("none"),n.marginDomNode.setAttribute("monaco-view-zone",n.whitespaceId),this.marginDomNode.appendChild(n.marginDomNode)),this._zones[n.whitespaceId]=n,this.setShouldRender(),n.whitespaceId}_removeZone(e,t){if(this._zones.hasOwnProperty(t)){const i=this._zones[t];return delete this._zones[t],e.removeWhitespace(i.whitespaceId),i.domNode.removeAttribute("monaco-visible-view-zone"),i.domNode.removeAttribute("monaco-view-zone"),i.domNode.domNode.parentNode.removeChild(i.domNode.domNode),i.marginDomNode&&(i.marginDomNode.removeAttribute("monaco-visible-view-zone"),i.marginDomNode.removeAttribute("monaco-view-zone"),i.marginDomNode.domNode.parentNode.removeChild(i.marginDomNode.domNode)),this.setShouldRender(),!0}return!1}_layoutZone(e,t){if(this._zones.hasOwnProperty(t)){const i=this._zones[t],n=this._computeWhitespaceProps(i.delegate);return e.changeOneWhitespace(i.whitespaceId,n.afterViewLineNumber,n.heightInPx),this._safeCallOnComputedHeight(i.delegate,n.heightInPx),this.setShouldRender(),!0}return!1}shouldSuppressMouseDownOnViewZone(e){return!!this._zones.hasOwnProperty(e)&&Boolean(this._zones[e].delegate.suppressMouseDown)}_heightInPixels(e){return"number"==typeof e.heightInPx?e.heightInPx:"number"==typeof e.heightInLines?this._lineHeight*e.heightInLines:this._lineHeight}_minWidthInPixels(e){return"number"==typeof e.minWidthInPx?e.minWidthInPx:0}_safeCallOnComputedHeight(e,t){if("function"==typeof e.onComputedHeight)try{e.onComputedHeight(t)}catch(e){n(e)}}_safeCallOnDomNodeTop(e,t){if("function"==typeof e.onDomNodeTop)try{e.onDomNodeTop(t)}catch(e){n(e)}}prepareRender(e){}render(e){const t=e.viewportData.whitespaceViewportData,i={};let n=!1;for(let e=0,o=t.length;e{this._context.theme.update(e),this._context.model.onDidColorThemeChange(),this.render(!0,!1)})),this._viewParts=[],this._textAreaHandler=new X_(this._context,r,this._createTextAreaHandlerHelper()),this._viewParts.push(this._textAreaHandler),this._linesContent=Mg(document.createElement("div")),this._linesContent.setClassName("lines-content monaco-editor-background"),this._linesContent.setPosition("absolute"),this.domNode=Mg(document.createElement("div")),this.domNode.setClassName(this._getEditorClassName()),this.domNode.setAttribute("role","code"),this._overflowGuardContainer=Mg(document.createElement("div")),Zg.write(this._overflowGuardContainer,3),this._overflowGuardContainer.setClassName("overflow-guard"),this._scrollbar=new $b(this._context,this._linesContent,this.domNode,this._overflowGuardContainer),this._viewParts.push(this._scrollbar),this._viewLines=new Jb(this._context,this._linesContent),this._viewZones=new Yv(this._context),this._viewParts.push(this._viewZones);const a=new Av(this._context);this._viewParts.push(a);const l=new Bv(this._context);this._viewParts.push(l);const h=new ab(this._context);this._viewParts.push(h),h.addDynamicOverlay(new mb(this._context)),h.addDynamicOverlay(new Uv(this._context)),h.addDynamicOverlay(new Yb(this._context)),h.addDynamicOverlay(new _b(this._context));const c=new lb(this._context);this._viewParts.push(c),c.addDynamicOverlay(new fb(this._context)),c.addDynamicOverlay(new Gb(this._context)),c.addDynamicOverlay(new tv(this._context)),c.addDynamicOverlay(new ev(this._context)),c.addDynamicOverlay(new j_(this._context));const d=new q_(this._context);d.getDomNode().appendChild(this._viewZones.marginDomNode),d.getDomNode().appendChild(c.getDomNode()),this._viewParts.push(d),this._contentWidgets=new cb(this._context,this.domNode),this._viewParts.push(this._contentWidgets),this._viewCursors=new qv(this._context),this._viewParts.push(this._viewCursors),this._overlayWidgets=new Iv(this._context),this._viewParts.push(this._overlayWidgets);const u=new Fv(this._context);this._viewParts.push(u);const g=new kv(this._context);if(this._viewParts.push(g),a){const e=this._scrollbar.getOverviewRulerLayoutInfo();e.parent.insertBefore(a.getDomNode(),e.insertBefore)}this._linesContent.appendChild(h.getDomNode()),this._linesContent.appendChild(u.domNode),this._linesContent.appendChild(this._viewZones.domNode),this._linesContent.appendChild(this._viewLines.getDomNode()),this._linesContent.appendChild(this._contentWidgets.domNode),this._linesContent.appendChild(this._viewCursors.getDomNode()),this._overflowGuardContainer.appendChild(d.getDomNode()),this._overflowGuardContainer.appendChild(this._scrollbar.getDomNode()),this._overflowGuardContainer.appendChild(l.getDomNode()),this._overflowGuardContainer.appendChild(this._textAreaHandler.textArea),this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover),this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()),this._overflowGuardContainer.appendChild(g.getDomNode()),this.domNode.appendChild(this._overflowGuardContainer),s?s.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode.domNode):this.domNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode),this._applyLayout(),this._pointerHandler=this._register(new Jp(this._context,r,this._createPointerHandlerHelper()))}_flushAccumulatedAndRenderNow(){this._renderNow()}_createPointerHandlerHelper(){return{viewDomNode:this.domNode.domNode,linesContentDomNode:this._linesContent.domNode,focusTextArea:()=>{this.focus()},dispatchTextAreaEvent:e=>{this._textAreaHandler.textArea.domNode.dispatchEvent(e)},getLastRenderData:()=>{const e=this._viewCursors.getLastRenderData()||[],t=this._textAreaHandler.getLastRenderData();return new Np(e,t)},shouldSuppressMouseDownOnViewZone:e=>this._viewZones.shouldSuppressMouseDownOnViewZone(e),shouldSuppressMouseDownOnWidget:e=>this._contentWidgets.shouldSuppressMouseDownOnWidget(e),getPositionFromDOMInfo:(e,t)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getPositionFromDOMInfo(e,t)),visibleRangeForPosition:(e,t)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new Tt(e,t))),getLineWidth:e=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getLineWidth(e))}}_createTextAreaHandlerHelper(){return{visibleRangeForPositionRelativeToEditor:(e,t)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new Tt(e,t)))}}_applyLayout(){const e=this._context.configuration.options.get(129);this.domNode.setWidth(e.width),this.domNode.setHeight(e.height),this._overflowGuardContainer.setWidth(e.width),this._overflowGuardContainer.setHeight(e.height),this._linesContent.setWidth(1e6),this._linesContent.setHeight(1e6)}_getEditorClassName(){const e=this._textAreaHandler.isFocused()?" focused":"";return this._context.configuration.options.get(126)+" "+bn(this._context.theme.type)+e}handleEvents(e){super.handleEvents(e),this._scheduleRender()}onConfigurationChanged(e){return this._configPixelRatio=this._context.configuration.options.get(127),this.domNode.setClassName(this._getEditorClassName()),this._applyLayout(),!1}onCursorStateChanged(e){return this._selections=e.selections,!1}onFocusChanged(e){return this.domNode.setClassName(this._getEditorClassName()),!1}onThemeChanged(e){return this.domNode.setClassName(this._getEditorClassName()),!1}dispose(){null!==this._renderAnimationFrame&&(this._renderAnimationFrame.dispose(),this._renderAnimationFrame=null),this._contentWidgets.overflowingContentWidgetsDomNode.domNode.remove(),this._context.removeEventHandler(this),this._viewLines.dispose();for(const e of this._viewParts)e.dispose();super.dispose()}_scheduleRender(){null===this._renderAnimationFrame&&(this._renderAnimationFrame=Qd(this._onRenderScheduled.bind(this),100))}_onRenderScheduled(){this._renderAnimationFrame=null,this._flushAccumulatedAndRenderNow()}_renderNow(){!function e(t){try{t()}catch(e){n(e)}}(()=>this._actualRender())}_getViewPartsToRender(){let e=[],t=0;for(const i of this._viewParts)i.shouldRender()&&(e[t++]=i);return e}_actualRender(){if(!Kd(this.domNode.domNode))return;let e=this._getViewPartsToRender();if(!this._viewLines.shouldRender()&&0===e.length)return;const t=this._context.viewLayout.getLinesViewportData();this._context.model.setViewport(t.startLineNumber,t.endLineNumber,t.centeredLineNumber);const i=new Qv(this._selections,t,this._context.viewLayout.getWhitespaceViewportData(),this._context.model);this._contentWidgets.shouldRender()&&this._contentWidgets.onBeforeRender(i),this._viewLines.shouldRender()&&(this._viewLines.renderText(i),this._viewLines.onDidRender(),e=this._getViewPartsToRender());const n=new Qg(this._context.viewLayout,i,this._viewLines);for(const t of e)t.prepareRender(n);for(const t of e)t.render(n),t.onDidRender();Math.abs(de()-this._configPixelRatio)>.001&&this._context.configuration.updatePixelRatio()}delegateVerticalScrollbarMouseDown(e){this._scrollbar.delegateVerticalScrollbarMouseDown(e)}restoreState(e){this._context.model.setScrollPosition({scrollTop:e.scrollTop},1),this._context.model.tokenizeViewport(),this._renderNow(),this._viewLines.updateLineWidths(),this._context.model.setScrollPosition({scrollLeft:e.scrollLeft},1)}getOffsetForColumn(e,t){const i=this._context.model.validateModelPosition({lineNumber:e,column:t}),n=this._context.model.coordinatesConverter.convertModelPositionToViewPosition(i);this._flushAccumulatedAndRenderNow();const o=this._viewLines.visibleRangeForPosition(new Tt(n.lineNumber,n.column));return o?o.left:-1}getTargetAtClientPoint(e,t){const i=this._pointerHandler.getTargetAtClientPoint(e,t);return i?J_.convertViewToModelMouseTarget(i,this._context.model.coordinatesConverter):null}createOverviewRuler(e){return new Pv(this._context,e)}change(e){this._viewZones.changeViewZones(e),this._scheduleRender()}render(e,t){if(t){this._viewLines.forceShouldRender();for(const e of this._viewParts)e.forceShouldRender()}e?this._flushAccumulatedAndRenderNow():this._scheduleRender()}focus(){this._textAreaHandler.focusTextArea()}isFocused(){return this._textAreaHandler.isFocused()}setAriaOptions(e){this._textAreaHandler.setAriaOptions(e)}addContentWidget(e){this._contentWidgets.addWidget(e.widget),this.layoutContentWidget(e),this._scheduleRender()}layoutContentWidget(e){let t=e.position&&e.position.range||null;if(null===t){const i=e.position?e.position.position:null;null!==i&&(t=new ro(i.lineNumber,i.column,i.lineNumber,i.column))}this._contentWidgets.setWidgetPosition(e.widget,t,e.position?e.position.preference:null),this._scheduleRender()}removeContentWidget(e){this._contentWidgets.removeWidget(e.widget),this._scheduleRender()}addOverlayWidget(e){this._overlayWidgets.addWidget(e.widget),this.layoutOverlayWidget(e),this._scheduleRender()}layoutOverlayWidget(e){this._overlayWidgets.setWidgetPosition(e.widget,e.position?e.position.preference:null)&&this._scheduleRender()}removeOverlayWidget(e){this._overlayWidgets.removeWidget(e.widget),this._scheduleRender()}}class eC{constructor(e){this._selTrackedRange=null,this._trackSelection=!0,this._setState(e,new Pc(new ro(1,1,1,1),0,new Tt(1,1),0),new Pc(new ro(1,1,1,1),0,new Tt(1,1),0))}dispose(e){this._removeTrackedRange(e)}startTrackingSelection(e){this._trackSelection=!0,this._updateTrackedRange(e)}stopTrackingSelection(e){this._trackSelection=!1,this._removeTrackedRange(e)}_updateTrackedRange(e){this._trackSelection&&(this._selTrackedRange=e.model._setTrackedRange(this._selTrackedRange,this.modelState.selection,0))}_removeTrackedRange(e){this._selTrackedRange=e.model._setTrackedRange(this._selTrackedRange,null,0)}asCursorState(){return new Vc(this.modelState,this.viewState)}readSelectionFromMarkers(e){const t=e.model._getTrackedRange(this._selTrackedRange);return 0===this.modelState.selection.getDirection()?new ao(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn):new ao(t.endLineNumber,t.endColumn,t.startLineNumber,t.startColumn)}ensureValidState(e){this._setState(e,this.modelState,this.viewState)}setState(e,t,i){this._setState(e,t,i)}_setState(e,t,i){if(t){const i=e.model.validateRange(t.selectionStart),n=t.selectionStart.equalsRange(i)?t.selectionStartLeftoverVisibleColumns:0,o=e.model.validatePosition(t.position),s=t.position.equals(o)?t.leftoverVisibleColumns:0;t=new Pc(i,n,o,s)}else{if(!i)return;const n=e.model.validateRange(e.coordinatesConverter.convertViewRangeToModelRange(i.selectionStart)),o=e.model.validatePosition(e.coordinatesConverter.convertViewPositionToModelPosition(i.position));t=new Pc(n,i.selectionStartLeftoverVisibleColumns,o,i.leftoverVisibleColumns)}if(i){const n=e.coordinatesConverter.validateViewRange(i.selectionStart,t.selectionStart),o=e.coordinatesConverter.validateViewPosition(i.position,t.position);i=new Pc(n,t.selectionStartLeftoverVisibleColumns,o,t.leftoverVisibleColumns)}else{const n=e.coordinatesConverter.convertModelPositionToViewPosition(new Tt(t.selectionStart.startLineNumber,t.selectionStart.startColumn)),o=e.coordinatesConverter.convertModelPositionToViewPosition(new Tt(t.selectionStart.endLineNumber,t.selectionStart.endColumn)),s=new ro(n.lineNumber,n.column,o.lineNumber,o.column),r=e.coordinatesConverter.convertModelPositionToViewPosition(t.position);i=new Pc(s,t.selectionStartLeftoverVisibleColumns,r,t.leftoverVisibleColumns)}this.modelState=t,this.viewState=i,this._updateTrackedRange(e)}}class tC{constructor(e){this.context=e,this.primaryCursor=new eC(e),this.secondaryCursors=[],this.lastAddedCursorIndex=0}dispose(){this.primaryCursor.dispose(this.context),this.killSecondaryCursors()}startTrackingSelections(){this.primaryCursor.startTrackingSelection(this.context);for(let e=0,t=this.secondaryCursors.length;ei){let e=t-i;for(let t=0;t=e+1&&this.lastAddedCursorIndex--,this.secondaryCursors[e].dispose(this.context),this.secondaryCursors.splice(e,1)}_getAll(){let e=[];e[0]=this.primaryCursor;for(let t=0,i=this.secondaryCursors.length;te.selection.startLineNumber===t.selection.startLineNumber?e.selection.startColumn-t.selection.startColumn:e.selection.startLineNumber-t.selection.startLineNumber);for(let i=0;ia&&e.index--;e.splice(a,1),t.splice(r,1),this._removeSecondaryCursor(a-1),i--}}}}class iC{constructor(){this.type=0}}class nC{constructor(){this.type=1}}class oC{constructor(e){this.type=2,this._source=e}hasChanged(e){return this._source.hasChanged(e)}}class sC{constructor(e,t){this.type=3,this.selections=e,this.modelSelections=t}}class rC{constructor(e){this.type=4,e?(this.affectsMinimap=e.affectsMinimap,this.affectsOverviewRuler=e.affectsOverviewRuler):(this.affectsMinimap=!0,this.affectsOverviewRuler=!0)}}class aC{constructor(){this.type=5}}class lC{constructor(e){this.type=6,this.isFocused=e}}class hC{constructor(){this.type=7}}class cC{constructor(){this.type=8}}class dC{constructor(e,t){this.type=9,this.fromLineNumber=e,this.toLineNumber=t}}class uC{constructor(e,t){this.type=10,this.fromLineNumber=e,this.toLineNumber=t}}class gC{constructor(e,t){this.type=11,this.fromLineNumber=e,this.toLineNumber=t}}class pC{constructor(e,t,i,n,o,s){this.type=12,this.source=e,this.range=t,this.selections=i,this.verticalType=n,this.revealHorizontal=o,this.scrollType=s}}class mC{constructor(e){this.type=13,this.scrollWidth=e.scrollWidth,this.scrollLeft=e.scrollLeft,this.scrollHeight=e.scrollHeight,this.scrollTop=e.scrollTop,this.scrollWidthChanged=e.scrollWidthChanged,this.scrollLeftChanged=e.scrollLeftChanged,this.scrollHeightChanged=e.scrollHeightChanged,this.scrollTopChanged=e.scrollTopChanged}}class fC{constructor(){this.type=14}}class _C{constructor(e){this.type=15,this.ranges=e}}class bC{constructor(){this.type=16}}class vC{constructor(){this.type=17}}class CC extends C{constructor(){super(),this._onEvent=this._register(new oe),this.onEvent=this._onEvent.event,this._eventHandlers=[],this._viewEventQueue=null,this._isConsumingViewEventQueue=!1,this._collector=null,this._collectorCnt=0,this._outgoingEvents=[]}emitOutgoingEvent(e){this._addOutgoingEvent(e),this._emitOugoingEvents()}_addOutgoingEvent(e){for(let t=0,i=this._outgoingEvents.length;t0;){if(this._collector||this._isConsumingViewEventQueue)return;const e=this._outgoingEvents.shift();e.isNoOp()||this._onEvent.fire(e)}}addViewEventHandler(e){for(let t=0,i=this._eventHandlers.length;t0&&this._emitMany(t)}this._emitOugoingEvents()}emitSingleViewEvent(e){try{this.beginEmitViewEvents().emitViewEvent(e)}finally{this.endEmitViewEvents()}}_emitMany(e){this._viewEventQueue=this._viewEventQueue?this._viewEventQueue.concat(e):e,this._isConsumingViewEventQueue||this._consumeViewEventQueue()}_consumeViewEventQueue(){try{this._isConsumingViewEventQueue=!0,this._doConsumeQueue()}finally{this._isConsumingViewEventQueue=!1}}_doConsumeQueue(){for(;this._viewEventQueue;){const e=this._viewEventQueue;this._viewEventQueue=null;const t=this._eventHandlers.slice(0);for(const i of t)i.handleEvents(e)}}}class wC{constructor(){this.viewEvents=[],this.outgoingEvents=[]}emitViewEvent(e){this.viewEvents.push(e)}emitOutgoingEvent(e){this.outgoingEvents.push(e)}}class yC{constructor(e,t,i,n){this.kind=0,this._oldContentWidth=e,this._oldContentHeight=t,this.contentWidth=i,this.contentHeight=n,this.contentWidthChanged=this._oldContentWidth!==this.contentWidth,this.contentHeightChanged=this._oldContentHeight!==this.contentHeight}isNoOp(){return!this.contentWidthChanged&&!this.contentHeightChanged}merge(e){return 0!==e.kind?this:new yC(this._oldContentWidth,this._oldContentHeight,e.contentWidth,e.contentHeight)}}class SC{constructor(e,t){this.kind=1,this.oldHasFocus=e,this.hasFocus=t}isNoOp(){return this.oldHasFocus===this.hasFocus}merge(e){return 1!==e.kind?this:new SC(this.oldHasFocus,e.hasFocus)}}class LC{constructor(e,t,i,n,o,s,r,a){this.kind=2,this._oldScrollWidth=e,this._oldScrollLeft=t,this._oldScrollHeight=i,this._oldScrollTop=n,this.scrollWidth=o,this.scrollLeft=s,this.scrollHeight=r,this.scrollTop=a,this.scrollWidthChanged=this._oldScrollWidth!==this.scrollWidth,this.scrollLeftChanged=this._oldScrollLeft!==this.scrollLeft,this.scrollHeightChanged=this._oldScrollHeight!==this.scrollHeight,this.scrollTopChanged=this._oldScrollTop!==this.scrollTop}isNoOp(){return!(this.scrollWidthChanged||this.scrollLeftChanged||this.scrollHeightChanged||this.scrollTopChanged)}merge(e){return 2!==e.kind?this:new LC(this._oldScrollWidth,this._oldScrollLeft,this._oldScrollHeight,this._oldScrollTop,e.scrollWidth,e.scrollLeft,e.scrollHeight,e.scrollTop)}}class DC{constructor(){this.kind=3}isNoOp(){return!1}merge(e){return this}}class EC{constructor(e,t,i,n,o,s,r){this.kind=5,this.oldSelections=e,this.selections=t,this.oldModelVersionId=i,this.modelVersionId=n,this.source=o,this.reason=s,this.reachedMaxCursorCount=r}static _selectionsAreEqual(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;const i=e.length;if(i!==t.length)return!1;for(let n=0;n=t.length)return!1;if(!t[i].strictContainsRange(e[i]))return!1}return!0}}class IC extends C{constructor(e,t,i,n){super(),this._model=e,this._knownModelVersionId=this._model.getVersionId(),this._viewModel=t,this._coordinatesConverter=i,this.context=new Fc(this._model,this._coordinatesConverter,n),this._cursors=new tC(this.context),this._hasFocus=!1,this._isHandling=!1,this._isDoingComposition=!1,this._selectionsWhenCompositionStarted=null,this._columnSelectData=null,this._autoClosedActions=[],this._prevEditOperationType=0,this._tabOutScopeCharacterDecorations=[],this._tabOutScopeEnclosingDecorations=[]}dispose(){this._cursors.dispose(),this._autoClosedActions=f(this._autoClosedActions),this._tabOutScopeCharacterDecorations=[],this._tabOutScopeEnclosingDecorations=[],super.dispose()}updateConfiguration(e){this.context=new Fc(this._model,this._coordinatesConverter,e),this._cursors.updateContext(this.context)}onLineMappingChanged(e){this._knownModelVersionId===this._model.getVersionId()&&this.setStates(e,"viewModel",0,this.getCursorStates())}setHasFocus(e){this._hasFocus=e}_validateAutoClosedActions(){if(this._autoClosedActions.length>0){let e=this._cursors.getSelections();for(let t=0;t0){let e=this._cursors.getSelections();for(let t=0;tIC.MAX_CURSOR_COUNT&&(n=n.slice(0,IC.MAX_CURSOR_COUNT),o=!0);const s=new kC(this._model,this);return this._cursors.setStates(n),this._cursors.normalize(),this._columnSelectData=null,this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(e,t,i,s,o)}setCursorColumnSelectData(e){this._columnSelectData=e}revealPrimary(e,t,i,n){const o=this._cursors.getViewPositions();if(o.length>1)this._emitCursorRevealRange(e,t,null,this._cursors.getViewSelections(),0,i,n);else{const s=o[0],r=new ro(s.lineNumber,s.column,s.lineNumber,s.column);this._emitCursorRevealRange(e,t,r,null,0,i,n)}}_revealPrimaryCursor(e,t,i,n,o){const s=this._cursors.getViewPositions();if(s.length>1)this._emitCursorRevealRange(e,t,null,this._cursors.getViewSelections(),i,n,o);else{const r=s[0],a=new ro(r.lineNumber,r.column,r.lineNumber,r.column);this._emitCursorRevealRange(e,t,a,null,i,n,o)}}_emitCursorRevealRange(e,t,i,n,o,s,r){e.emitViewEvent(new pC(t,i,n,o,s,r))}saveState(){let e=[];const t=this._cursors.getSelections();for(let i=0,n=t.length;i0){const i=Vc.fromModelSelections(t.resultingSelection);this.setStates(e,"modelChange",t.isUndoing?5:t.isRedoing?6:2,i)&&this._revealPrimaryCursor(e,"modelChange",0,!0,0)}else{const t=this._cursors.readSelectionFromMarkers();this.setStates(e,"modelChange",2,Vc.fromModelSelections(t))}}getSelection(){return this._cursors.getPrimaryCursor().modelState.selection}getTopMostViewPosition(){return this._cursors.getTopMostViewPosition()}getBottomMostViewPosition(){return this._cursors.getBottomMostViewPosition()}getCursorColumnSelectData(){if(this._columnSelectData)return this._columnSelectData;const e=this._cursors.getPrimaryCursor(),t=e.viewState.selectionStart.getStartPosition(),i=e.viewState.position;return{isReal:!1,fromViewLineNumber:t.lineNumber,fromViewVisualColumn:Hc.visibleColumnFromColumn2(this.context.cursorConfig,this._viewModel,t),toViewLineNumber:i.lineNumber,toViewVisualColumn:Hc.visibleColumnFromColumn2(this.context.cursorConfig,this._viewModel,i)}}getSelections(){return this._cursors.getSelections()}setSelections(e,t,i,n){this.setStates(e,t,n,Vc.fromModelSelections(i))}getPrevEditOperationType(){return this._prevEditOperationType}setPrevEditOperationType(e){this._prevEditOperationType=e}_pushAutoClosedAction(e,t){let i=[],n=[];for(let o=0,s=e.length;o0&&this._pushAutoClosedAction(i,n),this._prevEditOperationType=e.type}e.shouldPushStackElementAfter&&this._model.pushStackElement()}_interpretCommandResult(e){e&&0!==e.length||(e=this._cursors.readSelectionFromMarkers()),this._columnSelectData=null,this._cursors.setSelections(e),this._cursors.normalize()}_emitStateChangedIfNecessary(e,t,i,n,o){const s=new kC(this._model,this);if(s.equals(n))return!1;const r=this._cursors.getSelections(),a=this._cursors.getViewSelections();if(e.emitViewEvent(new sC(a,r)),!n||n.cursorState.length!==s.cursorState.length||s.cursorState.some((e,t)=>!e.modelState.equals(n.cursorState[t].modelState))){const a=n?n.cursorState.map(e=>e.modelState.selection):null;e.emitOutgoingEvent(new EC(a,r,n?n.modelVersionId:0,s.modelVersionId,t||"keyboard",i,o))}return!0}_findAutoClosingPairs(e){if(!e.length)return null;let t=[];for(let i=0,n=e.length;i=0)return null;const o=n.text.match(/([)\]}>'"`])([^)\]}>'"`]*)$/);if(!o)return null;const s=this.context.cursorConfig.autoClosingPairs.autoClosingPairsCloseSingleChar.get(o[1]);if(!s||1!==s.length)return null;const r=n.text.length-o[2].length-1,a=n.text.lastIndexOf(s[0].open,r-1);if(-1===a)return null;t.push([a,r])}return t}executeEdits(e,t,i,n){let o=null;"snippet"===t&&(o=this._findAutoClosingPairs(i)),o&&(i[0]._isTracked=!0);let s=[],r=[];const a=this._model.pushEditOperations(this.getSelections(),i,e=>{if(o)for(let t=0,i=o.length;t0&&this._pushAutoClosedAction(s,r)}_executeEdit(e,t,i,o=0){if(this.context.cursorConfig.readOnly)return;const s=new kC(this._model,this);this._cursors.stopTrackingSelections(),this._isHandling=!0;try{this._cursors.ensureValidState(),e()}catch(e){n(e)}this._isHandling=!1,this._cursors.startTrackingSelections(),this._validateAutoClosedActions(),this._validateTabOutScopeDecorations(),this._emitStateChangedIfNecessary(t,i,o,s,!1)&&this._revealPrimaryCursor(t,i,0,!0,0)}setIsDoingComposition(e){this._isDoingComposition=e}startComposition(e){this._selectionsWhenCompositionStarted=this.getSelections().slice(0)}endComposition(e,t){this._executeEdit(()=>{if("keyboard"===t){const e=NC.getAllAutoClosedCharacters(this._autoClosedActions);this._executeEditOperation(ld.compositionEndWithInterceptors(this._prevEditOperationType,this.context.cursorConfig,this._model,this._selectionsWhenCompositionStarted,this.getSelections(),e)),this._selectionsWhenCompositionStarted=null}},e,t)}type(e,t,i){this._executeEdit(()=>{if("keyboard"===i){const e=t.length;let i=0;for(;i{this._executeEditOperation(ld.compositionType(this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),t,i,n,o))},e,s);else if(0!==o){const t=this.getSelections().map(e=>{const t=e.getPosition();return new ao(t.lineNumber,t.column+o,t.lineNumber,t.column+o)});this.setSelections(e,s,t,0)}}paste(e,t,i,n,o){this._executeEdit(()=>{this._executeEditOperation(ld.paste(this.context.cursorConfig,this._model,this.getSelections(),t,i,n||[]))},e,o,4)}cut(e,t){this._executeEdit(()=>{this._executeEditOperation(Jc.cut(this.context.cursorConfig,this._model,this.getSelections()))},e,t)}executeCommand(e,t,i){this._executeEdit(()=>{this._cursors.killSecondaryCursors(),this._executeEditOperation(new zc(0,[t],{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},e,i)}executeCommands(e,t,i){this._executeEdit(()=>{this._executeEditOperation(new zc(0,t,{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},e,i)}getTabOutScopeRanges(){return this._tabOutScopeCharacterDecorations.map(e=>{var t;return null!==(t=this._model.getDecorationRange(e))&&void 0!==t?t:new ro(0,0,0,0)})}removeTabOutScopeRange(e){this._tabOutScopeCharacterDecorations.splice(e,1)}}IC.MAX_CURSOR_COUNT=1e4;class TC{static executeCommands(e,t,i){const n={model:e,selectionsBefore:t,trackedRanges:[],trackedRangesDirection:[]},o=this._innerExecuteCommands(n,i);for(let e=0,t=n.trackedRanges.length;e0&&(s[0]._isTracked=!0);let r=e.model.pushEditOperations(e.selectionsBefore,s,i=>{let n=[];for(let t=0;te.identifier.minor-t.identifier.minor;let s=[];for(let i=0;i0?(n[i].sort(o),s[i]=t[i].computeCursorState(e.model,{getInverseEditOperations:()=>n[i],getTrackedSelection:t=>{const i=parseInt(t,10),n=e.model._getTrackedRange(e.trackedRanges[i]);return 0===e.trackedRangesDirection[i]?new ao(n.startLineNumber,n.startColumn,n.endLineNumber,n.endColumn):new ao(n.endLineNumber,n.endColumn,n.startLineNumber,n.startColumn)}})):s[i]=e.selectionsBefore[i];return s});r||(r=e.selectionsBefore);let a=[];for(let e in o)o.hasOwnProperty(e)&&a.push(parseInt(e,10));a.sort((e,t)=>t-e);for(const e of a)r.splice(e,1);return r}static _arrayIsEmpty(e){for(let t=0,i=e.length;t{ro.isEmpty(e)&&""===n||o.push({identifier:{major:t,minor:s++},range:e,text:n,forceMoveMarkers:r,isAutoWhitespaceEdit:i.insertsAutoWhitespace})};let a=!1;const l={addEditOperation:r,addTrackedEditOperation:(e,t,i)=>{a=!0,r(e,t,i)},trackSelection:(t,i)=>{const n=ao.liftSelection(t);let o;if(n.isEmpty())if("boolean"==typeof i)o=i?2:3;else{const t=e.model.getLineMaxColumn(n.startLineNumber);o=n.startColumn===t?2:3}else o=1;const s=e.trackedRanges.length,r=e.model._setTrackedRange(null,n,o);return e.trackedRanges[s]=r,e.trackedRangesDirection[s]=n.getDirection(),s.toString()}};try{i.getEditOperations(e.model,l)}catch(e){return n(e),{operations:[],hadTrackedEditOperation:!1}}return{operations:o,hadTrackedEditOperation:a}}static _getLoserCursorMap(e){(e=e.slice(0)).sort((e,t)=>-ro.compareRangesUsingEnds(e.range,t.range));let t={};for(let i=1;io.identifier.major?n.identifier.major:o.identifier.major).toString()]=!0;for(let t=0;t0&&i--}}return t}}class AC{constructor(e,t,i,n,o,s){this.id=e,this.label=t,this.alias=i,this._precondition=n,this._run=o,this._contextKeyService=s}isSupported(){return this._contextKeyService.contextMatchesRules(this._precondition)}run(e){return this.isSupported()?this._run(e):Promise.resolve(void 0)}}const MC={ICodeEditor:"vs.editor.ICodeEditor",IDiffEditor:"vs.editor.IDiffEditor"},OC={getInitialState:()=>kh,tokenize2:(e,t,i,n)=>Ah(0,0,i,n)};function RC(e,t=OC){return function i(e,t){let i='
',n=Yt(e),o=t.getInitialState();for(let e=0,s=n.length;e0&&(i+="
");let r=t.tokenize2(s,!0,o,0);ih.convertToEndOffset(r.tokens,s.length);let a=new ih(r.tokens,s).inflate(),l=0;for(let e=0,t=a.getCount();e${Kt(s.substring(l,n))}`,l=n}o=r.endState}return i+"
"}(e,t||OC)}function PC(e,t,i,n,o,s,r){let a="
",l=n,h=0;for(let c=0,d=t.getCount();c0;)u+=r?" ":" ",e--;break;case 60:u+="<";break;case 62:u+=">";break;case 38:u+="&";break;case 0:u+="�";break;case 65279:case 8232:case 8233:case 133:u+="�";break;case 13:u+="​";break;case 32:u+=r?" ":" ";break;default:u+=String.fromCharCode(t)}}if(a+=`${u}`,d>o||l>=o)break}return a+"
"}class FC{constructor(){this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[]}insert(e){this._hasPending=!0,this._inserts.push(e)}change(e){this._hasPending=!0,this._changes.push(e)}remove(e){this._hasPending=!0,this._removes.push(e)}mustCommit(){return this._hasPending}commit(e){if(!this._hasPending)return;const t=this._inserts,i=this._changes,n=this._removes;this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[],e._commitPendingChanges(t,i,n)}}class BC{constructor(e,t,i,n,o){this.id=e,this.afterLineNumber=t,this.ordinal=i,this.height=n,this.minWidth=o,this.prefixSum=0}}class WC{constructor(e,t,i,n){this._instanceId=ki(++WC.INSTANCE_COUNT),this._pendingChanges=new FC,this._lastWhitespaceId=0,this._arr=[],this._prefixSumValidIndex=-1,this._minWidth=-1,this._lineCount=e,this._lineHeight=t,this._paddingTop=i,this._paddingBottom=n}static findInsertionIndex(e,t,i){let n=0,o=e.length;for(;n>>1;t===e[s].afterLineNumber?i{t=!0,e|=0,i|=0,n|=0,o|=0;const s=this._instanceId+ ++this._lastWhitespaceId;return this._pendingChanges.insert(new BC(s,e,i,n,o)),s},changeOneWhitespace:(e,i,n)=>{t=!0,this._pendingChanges.change({id:e,newAfterLineNumber:i|=0,newHeight:n|=0})},removeWhitespace:e=>{t=!0,this._pendingChanges.remove({id:e})}})}finally{this._pendingChanges.commit(this)}return t}_commitPendingChanges(e,t,i){if((e.length>0||i.length>0)&&(this._minWidth=-1),e.length+t.length+i.length<=1){for(const t of e)this._insertWhitespace(t);for(const e of t)this._changeOneWhitespace(e.id,e.newAfterLineNumber,e.newHeight);for(const e of i){const t=this._findWhitespaceIndex(e.id);-1!==t&&this._removeWhitespace(t)}return}const n=new Set;for(const e of i)n.add(e.id);const o=new Map;for(const e of t)o.set(e.id,e);const s=e=>{let t=[];for(const i of e)if(!n.has(i.id)){if(o.has(i.id)){const e=o.get(i.id);i.afterLineNumber=e.newAfterLineNumber,i.height=e.newHeight}t.push(i)}return t},r=s(this._arr).concat(s(e));r.sort((e,t)=>e.afterLineNumber===t.afterLineNumber?e.ordinal-t.ordinal:e.afterLineNumber-t.afterLineNumber),this._arr=r,this._prefixSumValidIndex=-1}_checkPendingChanges(){this._pendingChanges.mustCommit()&&this._pendingChanges.commit(this)}_insertWhitespace(e){const t=WC.findInsertionIndex(this._arr,e.afterLineNumber,e.ordinal);this._arr.splice(t,0,e),this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,t-1)}_findWhitespaceIndex(e){const t=this._arr;for(let i=0,n=t.length;it&&(this._arr[i].afterLineNumber-=t-e+1)}}onLinesInserted(e,t){this._checkPendingChanges(),this._lineCount+=(t|=0)-(e|=0)+1;for(let i=0,n=this._arr.length;i=t.length||t[o+1].afterLineNumber>=e)return o;i=o+1|0}else n=o-1|0}return-1}_findFirstWhitespaceAfterLineNumber(e){const t=this._findLastWhitespaceBeforeLineNumber(e|=0)+1;return t1?this._lineHeight*(e-1):0)+this.getWhitespaceAccumulatedHeightBeforeLineNumber(e)+this._paddingTop}getWhitespaceMinWidth(){if(this._checkPendingChanges(),-1===this._minWidth){let e=0;for(let t=0,i=this._arr.length;tthis.getLinesTotalHeight()}isInTopPadding(e){return 0!==this._paddingTop&&(this._checkPendingChanges(),e=this.getLinesTotalHeight()-this._paddingBottom)}getLineNumberAtOrAfterVerticalOffset(e){if(this._checkPendingChanges(),(e|=0)<0)return 1;const t=0|this._lineCount,i=this._lineHeight;let n=1,o=t;for(;n=s+i)n=t+1;else{if(e>=s)return t;o=t}}return n>t?t:n}getLinesViewportData(e,t){this._checkPendingChanges(),t|=0;const i=this._lineHeight,n=0|this.getLineNumberAtOrAfterVerticalOffset(e|=0),o=0|this.getVerticalOffsetForLineNumber(n);let s=0|this._lineCount,r=0|this.getFirstWhitespaceIndexAfterLineNumber(n);const a=0|this.getWhitespacesCount();let l,h;-1===r?(r=a,h=s+1,l=0):(h=0|this.getAfterLineNumberForWhitespaceIndex(r),l=0|this.getHeightForWhitespaceIndex(r));let c=o,d=c,u=0;o>=5e5&&(u=5e5*Math.floor(o/5e5),d-=u=Math.floor(u/i)*i);const g=[],p=e+(t-e)/2;let m=-1;for(let e=n;e<=s;e++){if(-1===m){const t=c,n=c+i;(t<=p&&pp)&&(m=e)}for(c+=i,g[e-n]=d,d+=i;h===e;)d+=l,c+=l,++r>=a?h=s+1:(h=0|this.getAfterLineNumberForWhitespaceIndex(r),l=0|this.getHeightForWhitespaceIndex(r));if(c>=t){s=e;break}}-1===m&&(m=s);const f=0|this.getVerticalOffsetForLineNumber(s);let _=n,b=s;return _t&&b--,{bigNumbersDelta:u,startLineNumber:n,endLineNumber:s,relativeVerticalOffset:g,centeredLineNumber:m,completelyVisibleStartLineNumber:_,completelyVisibleEndLineNumber:b}}getVerticalOffsetForWhitespaceIndex(e){this._checkPendingChanges();const t=this.getAfterLineNumberForWhitespaceIndex(e|=0);let i,n;return(i=t>=1?this._lineHeight*t:0)+(n=e>0?this.getWhitespacesAccumulatedHeight(e-1):0)+this._paddingTop}getWhitespaceIndexAtOrAfterVerticallOffset(e){this._checkPendingChanges(),e|=0;let t=0,i=this.getWhitespacesCount()-1;if(i<0)return-1;if(e>=this.getVerticalOffsetForWhitespaceIndex(i)+this.getHeightForWhitespaceIndex(i))return-1;for(;t=o+this.getHeightForWhitespaceIndex(n))t=n+1;else{if(e>=o)return n;i=n}}return t}getWhitespaceAtVerticalOffset(e){this._checkPendingChanges();const t=this.getWhitespaceIndexAtOrAfterVerticallOffset(e|=0);if(t<0)return null;if(t>=this.getWhitespacesCount())return null;const i=this.getVerticalOffsetForWhitespaceIndex(t);if(i>e)return null;const n=this.getHeightForWhitespaceIndex(t);return{id:this.getIdForWhitespaceIndex(t),afterLineNumber:this.getAfterLineNumberForWhitespaceIndex(t),verticalOffset:i,height:n}}getWhitespaceViewportData(e,t){this._checkPendingChanges(),t|=0;const i=this.getWhitespaceIndexAtOrAfterVerticallOffset(e|=0),n=this.getWhitespacesCount()-1;if(i<0)return[];let o=[];for(let e=i;e<=n;e++){const i=this.getVerticalOffsetForWhitespaceIndex(e),n=this.getHeightForWhitespaceIndex(e);if(i>=t)break;o.push({id:this.getIdForWhitespaceIndex(e),afterLineNumber:this.getAfterLineNumberForWhitespaceIndex(e),verticalOffset:i,height:n})}return o}getWhitespaces(){return this._checkPendingChanges(),this._arr.slice(0)}getWhitespacesCount(){return this._checkPendingChanges(),this._arr.length}getIdForWhitespaceIndex(e){return this._checkPendingChanges(),this._arr[e|=0].id}getAfterLineNumberForWhitespaceIndex(e){return this._checkPendingChanges(),this._arr[e|=0].afterLineNumber}getHeightForWhitespaceIndex(e){return this._checkPendingChanges(),this._arr[e|=0].height}}WC.INSTANCE_COUNT=0;const VC=125;class zC{constructor(e,t,i,n){(e|=0)<0&&(e=0),(t|=0)<0&&(t=0),(i|=0)<0&&(i=0),(n|=0)<0&&(n=0),this.width=e,this.contentWidth=t,this.scrollWidth=Math.max(e,t),this.height=i,this.contentHeight=n,this.scrollHeight=Math.max(i,n)}equals(e){return this.width===e.width&&this.contentWidth===e.contentWidth&&this.height===e.height&&this.contentHeight===e.contentHeight}}class HC extends C{constructor(e,t){super(),this._onDidContentSizeChange=this._register(new oe),this.onDidContentSizeChange=this._onDidContentSizeChange.event,this._dimensions=new zC(0,0,0,0),this._scrollable=this._register(new Mb(e,t)),this.onDidScroll=this._scrollable.onScroll}getScrollable(){return this._scrollable}setSmoothScrollDuration(e){this._scrollable.setSmoothScrollDuration(e)}validateScrollPosition(e){return this._scrollable.validateScrollPosition(e)}getScrollDimensions(){return this._dimensions}setScrollDimensions(e){if(this._dimensions.equals(e))return;const t=this._dimensions;this._dimensions=e,this._scrollable.setScrollDimensions({width:e.width,scrollWidth:e.scrollWidth,height:e.height,scrollHeight:e.scrollHeight},!0),(t.contentWidth!==e.contentWidth||t.contentHeight!==e.contentHeight)&&this._onDidContentSizeChange.fire(new yC(t.contentWidth,t.contentHeight,e.contentWidth,e.contentHeight))}getFutureScrollPosition(){return this._scrollable.getFutureScrollPosition()}getCurrentScrollPosition(){return this._scrollable.getCurrentScrollPosition()}setScrollPositionNow(e){this._scrollable.setScrollPositionNow(e)}setScrollPositionSmooth(e){this._scrollable.setScrollPositionSmooth(e)}}class UC extends C{constructor(e,t,i){super(),this._configuration=e;const n=this._configuration.options,o=n.get(129),s=n.get(71);this._linesLayout=new WC(t,n.get(54),s.top,s.bottom),this._scrollable=this._register(new HC(0,i)),this._configureSmoothScrollDuration(),this._scrollable.setScrollDimensions(new zC(o.contentWidth,0,o.height,0)),this.onDidScroll=this._scrollable.onDidScroll,this.onDidContentSizeChange=this._scrollable.onDidContentSizeChange,this._updateHeight()}dispose(){super.dispose()}getScrollable(){return this._scrollable.getScrollable()}onHeightMaybeChanged(){this._updateHeight()}_configureSmoothScrollDuration(){this._scrollable.setSmoothScrollDuration(this._configuration.options.get(103)?VC:0)}onConfigurationChanged(e){const t=this._configuration.options;if(e.hasChanged(54)&&this._linesLayout.setLineHeight(t.get(54)),e.hasChanged(71)){const e=t.get(71);this._linesLayout.setPadding(e.top,e.bottom)}if(e.hasChanged(129)){const e=t.get(129),i=e.contentWidth,n=e.height,o=this._scrollable.getScrollDimensions();this._scrollable.setScrollDimensions(new zC(i,o.contentWidth,n,this._getContentHeight(i,n,o.contentWidth)))}else this._updateHeight();e.hasChanged(103)&&this._configureSmoothScrollDuration()}onFlushed(e){this._linesLayout.onFlushed(e)}onLinesDeleted(e,t){this._linesLayout.onLinesDeleted(e,t)}onLinesInserted(e,t){this._linesLayout.onLinesInserted(e,t)}_getHorizontalScrollbarHeight(e,t){const i=this._configuration.options.get(90);return 2===i.horizontal?0:e>=t?0:i.horizontalScrollbarSize}_getContentHeight(e,t,i){const n=this._configuration.options;let o=this._linesLayout.getLinesTotalHeight();return n.get(92)?o+=Math.max(0,t-n.get(54)-n.get(71).bottom):o+=this._getHorizontalScrollbarHeight(e,i),o}_updateHeight(){const e=this._scrollable.getScrollDimensions(),t=e.width,i=e.height;this._scrollable.setScrollDimensions(new zC(t,e.contentWidth,i,this._getContentHeight(t,i,e.contentWidth)))}getCurrentViewport(){const e=this._scrollable.getScrollDimensions(),t=this._scrollable.getCurrentScrollPosition();return new ov(t.scrollTop,t.scrollLeft,e.width,e.height)}getFutureViewport(){const e=this._scrollable.getScrollDimensions(),t=this._scrollable.getFutureScrollPosition();return new ov(t.scrollTop,t.scrollLeft,e.width,e.height)}_computeContentWidth(e){const t=this._configuration.options,i=t.get(130),n=t.get(38);if(i.isViewportWrapping){const i=t.get(129),o=t.get(60);return e>i.contentWidth+n.typicalHalfwidthCharacterWidth&&o.enabled&&"right"===o.side?e+i.verticalScrollbarWidth:e}{const i=t.get(91)*n.typicalHalfwidthCharacterWidth,o=this._linesLayout.getWhitespaceMinWidth();return Math.max(e+i,o)}}setMaxLineWidth(e){const t=this._scrollable.getScrollDimensions();this._scrollable.setScrollDimensions(new zC(t.width,this._computeContentWidth(e),t.height,t.contentHeight)),this._updateHeight()}saveState(){const e=this._scrollable.getFutureScrollPosition();let t=e.scrollTop,i=this._linesLayout.getLineNumberAtOrAfterVerticalOffset(t);return{scrollTop:t,scrollTopWithoutViewZones:t-this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(i),scrollLeft:e.scrollLeft}}changeWhitespace(e){const t=this._linesLayout.changeWhitespace(e);return t&&this.onHeightMaybeChanged(),t}getVerticalOffsetForLineNumber(e){return this._linesLayout.getVerticalOffsetForLineNumber(e)}isAfterLines(e){return this._linesLayout.isAfterLines(e)}isInTopPadding(e){return this._linesLayout.isInTopPadding(e)}isInBottomPadding(e){return this._linesLayout.isInBottomPadding(e)}getLineNumberAtVerticalOffset(e){return this._linesLayout.getLineNumberAtOrAfterVerticalOffset(e)}getWhitespaceAtVerticalOffset(e){return this._linesLayout.getWhitespaceAtVerticalOffset(e)}getLinesViewportData(){const e=this.getCurrentViewport();return this._linesLayout.getLinesViewportData(e.top,e.top+e.height)}getLinesViewportDataAtScrollTop(e){const t=this._scrollable.getScrollDimensions();return e+t.height>t.scrollHeight&&(e=t.scrollHeight-t.height),e<0&&(e=0),this._linesLayout.getLinesViewportData(e,e+t.height)}getWhitespaceViewportData(){const e=this.getCurrentViewport();return this._linesLayout.getWhitespaceViewportData(e.top,e.top+e.height)}getWhitespaces(){return this._linesLayout.getWhitespaces()}getContentWidth(){return this._scrollable.getScrollDimensions().contentWidth}getScrollWidth(){return this._scrollable.getScrollDimensions().scrollWidth}getContentHeight(){return this._scrollable.getScrollDimensions().contentHeight}getScrollHeight(){return this._scrollable.getScrollDimensions().scrollHeight}getCurrentScrollLeft(){return this._scrollable.getCurrentScrollPosition().scrollLeft}getCurrentScrollTop(){return this._scrollable.getCurrentScrollPosition().scrollTop}validateScrollPosition(e){return this._scrollable.validateScrollPosition(e)}setScrollPosition(e,t){1===t?this._scrollable.setScrollPositionNow(e):this._scrollable.setScrollPositionSmooth(e)}deltaScrollNow(e,t){const i=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollLeft:i.scrollLeft+e,scrollTop:i.scrollTop+t})}}class KC{constructor(e,t){this.index=e,this.remainder=t}}class $C{constructor(e){this.values=e,this.prefixSum=new Uint32Array(e.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(e,t){e=Er(e);const i=this.values,n=this.prefixSum,o=t.length;return 0!==o&&(this.values=new Uint32Array(i.length+o),this.values.set(i.subarray(0,e),0),this.values.set(i.subarray(e),e+o),this.values.set(t,e),e-1=0&&this.prefixSum.set(n.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}changeValue(e,t){return e=Er(e),t=Er(t),this.values[e]!==t&&(this.values[e]=t,e-1=i.length)return!1;let o=i.length-e;return t>=o&&(t=o),0!==t&&(this.values=new Uint32Array(i.length-t),this.values.set(i.subarray(0,e),0),this.values.set(i.subarray(e+t),e),this.prefixSum=new Uint32Array(this.values.length),e-1=0&&this.prefixSum.set(n.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalValue(){return 0===this.values.length?0:this._getAccumulatedValue(this.values.length-1)}getAccumulatedValue(e){return e<0?0:(e=Er(e),this._getAccumulatedValue(e))}_getAccumulatedValue(e){if(e<=this.prefixSumValidIndex[0])return this.prefixSum[e];let t=this.prefixSumValidIndex[0]+1;0===t&&(this.prefixSum[0]=this.values[0],t++),e>=this.values.length&&(e=this.values.length-1);for(let i=t;i<=e;i++)this.prefixSum[i]=this.prefixSum[i-1]+this.values[i];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],e),this.prefixSum[e]}getIndexOf(e){e=Math.floor(e),this.getTotalValue();let t=0,i=this.values.length-1,n=0,o=0,s=0;for(;t<=i;)if(e<(s=(o=this.prefixSum[n=t+(i-t)/2|0])-this.values[n]))i=n-1;else{if(!(e>=o))break;t=n+1}return new KC(n,e-s)}}class jC{constructor(e){this._lines=e}convertViewPositionToModelPosition(e){return this._lines.convertViewPositionToModelPosition(e.lineNumber,e.column)}convertViewRangeToModelRange(e){return this._lines.convertViewRangeToModelRange(e)}validateViewPosition(e,t){return this._lines.validateViewPosition(e.lineNumber,e.column,t)}validateViewRange(e,t){return this._lines.validateViewRange(e,t)}convertModelPositionToViewPosition(e){return this._lines.convertModelPositionToViewPosition(e.lineNumber,e.column)}convertModelRangeToViewRange(e){return this._lines.convertModelRangeToViewRange(e)}modelPositionIsVisible(e){return this._lines.modelPositionIsVisible(e.lineNumber,e.column)}getModelLineViewLineCount(e){return this._lines.getModelLineViewLineCount(e)}}class qC{constructor(e){this._counts=e,this._isValid=!1,this._validEndIndex=-1,this._modelToView=[],this._viewToModel=[]}_invalidate(e){this._isValid=!1,this._validEndIndex=Math.min(this._validEndIndex,e-1)}_ensureValid(){if(!this._isValid){for(let e=this._validEndIndex+1,t=this._counts.length;e0?this._modelToView[e-1]:0;this._modelToView[e]=i+t;for(let n=0;n0?this._modelToView[t-1]:0))}}class GC{constructor(e,t,i,n,o,s,r,a){this.model=e,this._validModelVersionId=-1,this._domLineBreaksComputerFactory=t,this._monospaceLineBreaksComputerFactory=i,this.fontInfo=n,this.tabSize=o,this.wrappingStrategy=s,this.wrappingColumn=r,this.wrappingIndent=a,this._constructLines(!0,null)}dispose(){this.hiddenAreasIds=this.model.deltaDecorations(this.hiddenAreasIds,[])}createCoordinatesConverter(){return new jC(this)}_constructLines(e,t){this.lines=[],e&&(this.hiddenAreasIds=[]);let i=this.model.getLinesContent();const n=i.length,o=this.createLineBreaksComputer();for(let e=0;ethis.model.getDecorationRange(e)).sort(ro.compareRangesUsingStarts),l=1,h=0,c=-1,d=c+1=l&&t<=h));r[e]=i.getViewLineCount(),this.lines[e]=i}this._validModelVersionId=this.model.getVersionId(),this.prefixSumComputer=new qC(r)}getHiddenAreas(){return this.hiddenAreasIds.map(e=>this.model.getDecorationRange(e))}_reduceRanges(e){if(0===e.length)return[];let t=e.map(e=>this.model.validateRange(e)).sort(ro.compareRangesUsingStarts),i=[],n=t[0].startLineNumber,o=t[0].endLineNumber;for(let e=1,s=t.length;eo+1?(i.push(new ro(n,1,o,1)),n=s.startLineNumber,o=s.endLineNumber):s.endLineNumber>o&&(o=s.endLineNumber)}return i.push(new ro(n,1,o,1)),i}setHiddenAreas(e){let t=this._reduceRanges(e),i=this.hiddenAreasIds.map(e=>this.model.getDecorationRange(e)).sort(ro.compareRangesUsingStarts);if(t.length===i.length){let e=!1;for(let n=0;n=s&&t<=r?this.lines[e].isVisible()&&(this.lines[e]=this.lines[e].setVisible(!1),i=!0):(h=!0,this.lines[e].isVisible()||(this.lines[e]=this.lines[e].setVisible(!0),i=!0)),i){let t=this.lines[e].getViewLineCount();this.prefixSumComputer.changeValue(e,t)}}return h||this.setHiddenAreas([]),!0}modelPositionIsVisible(e,t){return!(e<1||e>this.lines.length)&&this.lines[e-1].isVisible()}getModelLineViewLineCount(e){return e<1||e>this.lines.length?1:this.lines[e-1].getViewLineCount()}setTabSize(e){return this.tabSize!==e&&(this.tabSize=e,this._constructLines(!1,null),!0)}setWrappingSettings(e,t,i,n){const o=this.fontInfo.equals(e),s=this.wrappingStrategy===t,r=this.wrappingColumn===i,a=this.wrappingIndent===n;if(o&&s&&r&&a)return!1;const l=o&&s&&!r&&a;this.fontInfo=e,this.wrappingStrategy=t,this.wrappingColumn=i,this.wrappingIndent=n;let h=null;if(l){h=[];for(let e=0,t=this.lines.length;e2&&!this.lines[t-2].isVisible();let s=1===t?1:this.prefixSumComputer.getAccumulatedValue(t-2)+1,r=0,a=[],l=[];for(let e=0,t=n.length;er?(g=(u=1+(h=(l=1===t?1:this.prefixSumComputer.getAccumulatedValue(t-2)+1)+r-1))+(o-r)-1,a=!0):ot?t:0|e}getActiveIndentGuide(e,t,i){e=this._toValidViewLineNumber(e),t=this._toValidViewLineNumber(t),i=this._toValidViewLineNumber(i);const n=this.convertViewPositionToModelPosition(e,this.getViewLineMinColumn(e)),o=this.convertViewPositionToModelPosition(t,this.getViewLineMinColumn(t)),s=this.convertViewPositionToModelPosition(i,this.getViewLineMinColumn(i)),r=this.model.getActiveIndentGuide(n.lineNumber,o.lineNumber,s.lineNumber),a=this.convertModelPositionToViewPosition(r.startLineNumber,1),l=this.convertModelPositionToViewPosition(r.endLineNumber,this.model.getLineMaxColumn(r.endLineNumber));return{startLineNumber:a.lineNumber,endLineNumber:l.lineNumber,indent:r.indent}}getViewLinesIndentGuides(e,t){e=this._toValidViewLineNumber(e),t=this._toValidViewLineNumber(t);const i=this.convertViewPositionToModelPosition(e,this.getViewLineMinColumn(e)),n=this.convertViewPositionToModelPosition(t,this.getViewLineMaxColumn(t));let o=[],s=[],r=[];const a=i.lineNumber-1,l=n.lineNumber-1;let h=null;for(let e=a;e<=l;e++){const t=this.lines[e];if(t.isVisible()){let n=t.getViewLineNumberOfModelPosition(0,e===a?i.column:1),o=t.getViewLineNumberOfModelPosition(0,this.model.getLineMaxColumn(e+1)),l=o-n+1,c=0;l>1&&1===t.getViewLineMinColumn(this.model,e+1,o)&&(c=0===n?1:2),s.push(l),r.push(c),null===h&&(h=new Tt(e+1,0))}else null!==h&&(o=o.concat(this.model.getLinesIndentGuides(h.lineNumber,e)),h=null)}null!==h&&(o=o.concat(this.model.getLinesIndentGuides(h.lineNumber,n.lineNumber)),h=null);const c=t-e+1;let d=new Array(c),u=0;for(let e=0,t=o.length;et&&(d=!0,c=t-o+1),l.getViewLinesData(this.model,n+1,h,h+c,o-e,i,a),o+=c,d)break}return a}validateViewPosition(e,t,i){e=this._toValidViewLineNumber(e);let n=this.prefixSumComputer.getIndexOf(e-1),o=n.index,s=n.remainder,r=this.lines[o],a=r.getViewLineMinColumn(this.model,o+1,s),l=r.getViewLineMaxColumn(this.model,o+1,s);tl&&(t=l);let h=r.getModelColumnOfViewPosition(s,t);return this.model.validatePosition(new Tt(o+1,h)).equals(i)?new Tt(e,t):this.convertModelPositionToViewPosition(i.lineNumber,i.column)}validateViewRange(e,t){const i=this.validateViewPosition(e.startLineNumber,e.startColumn,t.getStartPosition()),n=this.validateViewPosition(e.endLineNumber,e.endColumn,t.getEndPosition());return new ro(i.lineNumber,i.column,n.lineNumber,n.column)}convertViewPositionToModelPosition(e,t){e=this._toValidViewLineNumber(e);let i=this.prefixSumComputer.getIndexOf(e-1),n=i.index,o=this.lines[n].getModelColumnOfViewPosition(i.remainder,t);return this.model.validatePosition(new Tt(n+1,o))}convertViewRangeToModelRange(e){const t=this.convertViewPositionToModelPosition(e.startLineNumber,e.startColumn),i=this.convertViewPositionToModelPosition(e.endLineNumber,e.endColumn);return new ro(t.lineNumber,t.column,i.lineNumber,i.column)}convertModelPositionToViewPosition(e,t){const i=this.model.validatePosition(new Tt(e,t)),n=i.lineNumber,o=i.column;let s=n-1,r=!1;for(;s>0&&!this.lines[s].isVisible();)s--,r=!0;if(0===s&&!this.lines[s].isVisible())return new Tt(1,1);const a=1+(0===s?0:this.prefixSumComputer.getAccumulatedValue(s-1));return r?this.lines[s].getViewPositionOfModelPosition(a,this.model.getLineMaxColumn(s+1)):this.lines[n-1].getViewPositionOfModelPosition(a,o)}convertModelRangeToViewRange(e){let t=this.convertModelPositionToViewPosition(e.startLineNumber,e.startColumn),i=this.convertModelPositionToViewPosition(e.endLineNumber,e.endColumn);return e.startLineNumber===e.endLineNumber&&t.lineNumber!==i.lineNumber&&i.column===this.getViewLineMinColumn(i.lineNumber)?new ro(t.lineNumber,t.column,i.lineNumber-1,this.getViewLineMaxColumn(i.lineNumber-1)):new ro(t.lineNumber,t.column,i.lineNumber,i.column)}_getViewLineNumberForModelPosition(e,t){let i=e-1;if(this.lines[i].isVisible()){const e=1+(0===i?0:this.prefixSumComputer.getAccumulatedValue(i-1));return this.lines[i].getViewLineNumberOfModelPosition(e,t)}for(;i>0&&!this.lines[i].isVisible();)i--;if(0===i&&!this.lines[i].isVisible())return 1;const n=1+(0===i?0:this.prefixSumComputer.getAccumulatedValue(i-1));return this.lines[i].getViewLineNumberOfModelPosition(n,this.model.getLineMaxColumn(i+1))}getAllOverviewRulerDecorations(e,t,i){const n=this.model.getOverviewRulerDecorations(e,t),o=new ow;for(const e of n){const t=e.options.overviewRuler,n=t?t.position:0;if(0===n)continue;const s=t.getColor(i),r=this._getViewLineNumberForModelPosition(e.range.startLineNumber,e.range.startColumn),a=this._getViewLineNumberForModelPosition(e.range.endLineNumber,e.range.endColumn);o.accept(s,r,a,n)}return o.result}getDecorationsInRange(e,t,i){const n=this.convertViewPositionToModelPosition(e.startLineNumber,e.startColumn),o=this.convertViewPositionToModelPosition(e.endLineNumber,e.endColumn);if(o.lineNumber-n.lineNumber<=e.endLineNumber-e.startLineNumber)return this.model.getDecorationsInRange(new ro(n.lineNumber,1,o.lineNumber,o.column),t,i);let s=[];const r=n.lineNumber-1,a=o.lineNumber-1;let l=null;for(let e=r;e<=a;e++)if(this.lines[e].isVisible())null===l&&(l=new Tt(e+1,e===r?n.column:1));else if(null!==l){const n=this.model.getLineMaxColumn(e);s=s.concat(this.model.getDecorationsInRange(new ro(l.lineNumber,l.column,e,n),t,i)),l=null}null!==l&&(s=s.concat(this.model.getDecorationsInRange(new ro(l.lineNumber,l.column,o.lineNumber,o.column),t,i)),l=null),s.sort((e,t)=>{const i=ro.compareRangesUsingStarts(e.range,t.range);return 0===i?e.idt.id?1:0:i});let h=[],c=0,d=null;for(const e of s){const t=e.id;d!==t&&(d=t,h[c++]=e)}return h}}class YC{constructor(){}isVisible(){return!0}setVisible(e){return e?this:ZC.INSTANCE}getLineBreakData(){return null}getViewLineCount(){return 1}getViewLineContent(e,t,i){return e.getLineContent(t)}getViewLineLength(e,t,i){return e.getLineLength(t)}getViewLineMinColumn(e,t,i){return e.getLineMinColumn(t)}getViewLineMaxColumn(e,t,i){return e.getLineMaxColumn(t)}getViewLineData(e,t,i){let n=e.getLineTokens(t),o=n.getLineContent();return new lv(o,!1,1,o.length+1,0,n.inflate())}getViewLinesData(e,t,i,n,o,s,r){r[o]=s[o]?this.getViewLineData(e,t,0):null}getModelColumnOfViewPosition(e,t){return t}getViewPositionOfModelPosition(e,t){return new Tt(e,t)}getViewLineNumberOfModelPosition(e,t){return e}}YC.INSTANCE=new YC;class ZC{constructor(){}isVisible(){return!1}setVisible(e){return e?YC.INSTANCE:this}getLineBreakData(){return null}getViewLineCount(){return 0}getViewLineContent(e,t,i){throw new Error("Not supported")}getViewLineLength(e,t,i){throw new Error("Not supported")}getViewLineMinColumn(e,t,i){throw new Error("Not supported")}getViewLineMaxColumn(e,t,i){throw new Error("Not supported")}getViewLineData(e,t,i){throw new Error("Not supported")}getViewLinesData(e,t,i,n,o,s,r){throw new Error("Not supported")}getModelColumnOfViewPosition(e,t){throw new Error("Not supported")}getViewPositionOfModelPosition(e,t){throw new Error("Not supported")}getViewLineNumberOfModelPosition(e,t){throw new Error("Not supported")}}ZC.INSTANCE=new ZC;class XC{constructor(e,t){this._lineBreakData=e,this._isVisible=t}isVisible(){return this._isVisible}setVisible(e){return this._isVisible=e,this}getLineBreakData(){return this._lineBreakData}getViewLineCount(){return this._isVisible?this._lineBreakData.breakOffsets.length:0}getInputStartOffsetOfOutputLineIndex(e){return rv.getInputOffsetOfOutputPosition(this._lineBreakData.breakOffsets,e,0)}getInputEndOffsetOfOutputLineIndex(e,t,i){return i+1===this._lineBreakData.breakOffsets.length?e.getLineMaxColumn(t)-1:rv.getInputOffsetOfOutputPosition(this._lineBreakData.breakOffsets,i+1,0)}getViewLineContent(e,t,i){if(!this._isVisible)throw new Error("Not supported");let n=this.getInputStartOffsetOfOutputLineIndex(i),o=this.getInputEndOffsetOfOutputLineIndex(e,t,i),s=e.getValueInRange({startLineNumber:t,startColumn:n+1,endLineNumber:t,endColumn:o+1});return i>0&&(s=JC(this._lineBreakData.wrappedTextIndentLength)+s),s}getViewLineLength(e,t,i){if(!this._isVisible)throw new Error("Not supported");let n=this.getInputStartOffsetOfOutputLineIndex(i),o=this.getInputEndOffsetOfOutputLineIndex(e,t,i)-n;return i>0&&(o=this._lineBreakData.wrappedTextIndentLength+o),o}getViewLineMinColumn(e,t,i){if(!this._isVisible)throw new Error("Not supported");return i>0?this._lineBreakData.wrappedTextIndentLength+1:1}getViewLineMaxColumn(e,t,i){if(!this._isVisible)throw new Error("Not supported");return this.getViewLineContent(e,t,i).length+1}getViewLineData(e,t,i){if(!this._isVisible)throw new Error("Not supported");let n=this.getInputStartOffsetOfOutputLineIndex(i),o=this.getInputEndOffsetOfOutputLineIndex(e,t,i),s=e.getValueInRange({startLineNumber:t,startColumn:n+1,endLineNumber:t,endColumn:o+1});i>0&&(s=JC(this._lineBreakData.wrappedTextIndentLength)+s);let r=i>0?this._lineBreakData.wrappedTextIndentLength+1:1,a=s.length+1,l=i+10&&(h=this._lineBreakData.wrappedTextIndentLength);let c=e.getLineTokens(t);return new lv(s,l,r,a,0===i?0:this._lineBreakData.breakOffsetsVisibleColumn[i-1],c.sliceAndInflate(n,o,h))}getViewLinesData(e,t,i,n,o,s,r){if(!this._isVisible)throw new Error("Not supported");for(let a=i;a0&&(i0&&(o+=this._lineBreakData.wrappedTextIndentLength),new Tt(e+n,o)}getViewLineNumberOfModelPosition(e,t){if(!this._isVisible)throw new Error("Not supported");return e+rv.getOutputPositionOfInputOffset(this._lineBreakData.breakOffsets,t-1).outputLineIndex}}let QC=[""];function JC(e){if(e>=QC.length)for(let t=1;t<=e;t++)QC[t]=ew(t);return QC[e]}function ew(e){return new Array(e+1).join(" ")}function tw(e,t){return null===e?t?YC.INSTANCE:ZC.INSTANCE:new XC(e,t)}class iw{constructor(e){this._lines=e}_validPosition(e){return this._lines.model.validatePosition(e)}_validRange(e){return this._lines.model.validateRange(e)}convertViewPositionToModelPosition(e){return this._validPosition(e)}convertViewRangeToModelRange(e){return this._validRange(e)}validateViewPosition(e,t){return this._validPosition(t)}validateViewRange(e,t){return this._validRange(t)}convertModelPositionToViewPosition(e){return this._validPosition(e)}convertModelRangeToViewRange(e){return this._validRange(e)}modelPositionIsVisible(e){const t=this._lines.model.getLineCount();return!(e.lineNumber<1||e.lineNumber>t)}getModelLineViewLineCount(e){return 1}}class nw{constructor(e){this.model=e}dispose(){}createCoordinatesConverter(){return new iw(this)}getHiddenAreas(){return[]}setHiddenAreas(e){return!1}setTabSize(e){return!1}setWrappingSettings(e,t,i,n){return!1}createLineBreaksComputer(){let e=[];return{addRequest:(t,i)=>{e.push(null)},finalize:()=>e}}onModelFlushed(){}onModelLinesDeleted(e,t,i){return new uC(t,i)}onModelLinesInserted(e,t,i,n){return new gC(t,i)}onModelLineChanged(e,t,i){return[!1,new dC(t,t),null,null]}acceptVersionId(e){}getViewLineCount(){return this.model.getLineCount()}getActiveIndentGuide(e,t,i){return{startLineNumber:e,endLineNumber:e,indent:0}}getViewLinesIndentGuides(e,t){const i=t-e+1;let n=new Array(i);for(let e=0;e=t)return void(i>e&&(o[o.length-1]=i));o.push(n,t,i)}else this.result[e]=[n,t,i]}}class sw{constructor(e,t,i,n,o){this.editorId=e,this.model=t,this.configuration=i,this._linesCollection=n,this._coordinatesConverter=o,this._decorationsCache=Object.create(null),this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}_clearCachedModelDecorationsResolver(){this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}dispose(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}reset(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onModelDecorationsChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onLineMappingChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}_getOrCreateViewModelDecoration(e){const t=e.id;let i=this._decorationsCache[t];if(!i){const n=e.range,o=e.options;let s;if(o.isWholeLine){const e=this._coordinatesConverter.convertModelPositionToViewPosition(new Tt(n.startLineNumber,1)),t=this._coordinatesConverter.convertModelPositionToViewPosition(new Tt(n.endLineNumber,this.model.getLineMaxColumn(n.endLineNumber)));s=new ro(e.lineNumber,e.column,t.lineNumber,t.column)}else s=this._coordinatesConverter.convertModelRangeToViewRange(n);i=new dv(s,o),this._decorationsCache[t]=i}return i}getDecorationsViewportData(e){let t=null!==this._cachedModelDecorationsResolver;return(t=t&&e.equalsRange(this._cachedModelDecorationsResolverViewRange))||(this._cachedModelDecorationsResolver=this._getDecorationsViewportData(e),this._cachedModelDecorationsResolverViewRange=e),this._cachedModelDecorationsResolver}_getDecorationsViewportData(e){const t=this._linesCollection.getDecorationsInRange(e,this.editorId,Oo(this.configuration.options)),i=e.startLineNumber,n=e.endLineNumber;let o=[],s=0,r=[];for(let e=i;e<=n;e++)r[e-i]=[];for(let e=0,a=t.length;ethis.tokenizeViewport(),50)),this._updateConfigurationViewLineCount=this._register(new $a(()=>this._updateConfigurationViewLineCountNow(),0)),this._hasFocus=!1,this._viewportStartLine=-1,this._viewportStartLineTrackedRange=null,this._viewportStartLineDelta=0,this.model.isTooLargeForTokenization())this._lines=new nw(this.model);else{const e=this._configuration.options,t=e.get(38),i=e.get(123),s=e.get(130),r=e.get(122);this._lines=new GC(this.model,n,o,t,this.model.getOptions().tabSize,i,s.wrappingColumn,r)}this.coordinatesConverter=this._lines.createCoordinatesConverter(),this._cursor=this._register(new IC(i,this,this.coordinatesConverter,this.cursorConfig)),this.viewLayout=this._register(new UC(this._configuration,this.getLineCount(),s)),this._register(this.viewLayout.onDidScroll(e=>{e.scrollTopChanged&&this._tokenizeViewportSoon.schedule(),this._eventDispatcher.emitSingleViewEvent(new mC(e)),this._eventDispatcher.emitOutgoingEvent(new LC(e.oldScrollWidth,e.oldScrollLeft,e.oldScrollHeight,e.oldScrollTop,e.scrollWidth,e.scrollLeft,e.scrollHeight,e.scrollTop))})),this._register(this.viewLayout.onDidContentSizeChange(e=>{this._eventDispatcher.emitOutgoingEvent(e)})),this._decorations=new sw(this._editorId,this.model,this._configuration,this._lines,this.coordinatesConverter),this._registerModelEvents(),this._register(this._configuration.onDidChangeFast(e=>{try{const t=this._eventDispatcher.beginEmitViewEvents();this._onConfigurationChanged(t,e)}finally{this._eventDispatcher.endEmitViewEvents()}})),this._register(nv.getInstance().onDidChange(()=>{this._eventDispatcher.emitSingleViewEvent(new bC)})),this._updateConfigurationViewLineCountNow()}dispose(){super.dispose(),this._decorations.dispose(),this._lines.dispose(),this.invalidateMinimapColorCache(),this._viewportStartLineTrackedRange=this.model._setTrackedRange(this._viewportStartLineTrackedRange,null,1),this._eventDispatcher.dispose()}createLineBreaksComputer(){return this._lines.createLineBreaksComputer()}addViewEventHandler(e){this._eventDispatcher.addViewEventHandler(e)}removeViewEventHandler(e){this._eventDispatcher.removeViewEventHandler(e)}_updateConfigurationViewLineCountNow(){this._configuration.setViewLineCount(this._lines.getViewLineCount())}tokenizeViewport(){const e=this.viewLayout.getLinesViewportData(),t=this.coordinatesConverter.convertViewPositionToModelPosition(new Tt(e.startLineNumber,1)),i=this.coordinatesConverter.convertViewPositionToModelPosition(new Tt(e.endLineNumber,1));this.model.tokenizeViewport(t.lineNumber,i.lineNumber)}setHasFocus(e){this._hasFocus=e,this._cursor.setHasFocus(e),this._eventDispatcher.emitSingleViewEvent(new lC(e)),this._eventDispatcher.emitOutgoingEvent(new SC(!e,e))}onCompositionStart(){this._eventDispatcher.emitSingleViewEvent(new iC)}onCompositionEnd(){this._eventDispatcher.emitSingleViewEvent(new nC)}onDidColorThemeChange(){this._eventDispatcher.emitSingleViewEvent(new fC)}_onConfigurationChanged(e,t){let i=null;if(-1!==this._viewportStartLine){let e=new Tt(this._viewportStartLine,this.getLineMinColumn(this._viewportStartLine));i=this.coordinatesConverter.convertViewPositionToModelPosition(e)}let n=!1;const o=this._configuration.options,s=o.get(38),r=o.get(123),a=o.get(130),l=o.get(122);if(this._lines.setWrappingSettings(s,r,a.wrappingColumn,l)&&(e.emitViewEvent(new aC),e.emitViewEvent(new cC),e.emitViewEvent(new rC(null)),this._cursor.onLineMappingChanged(e),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),0!==this.viewLayout.getCurrentScrollTop()&&(n=!0),this._updateConfigurationViewLineCount.schedule()),t.hasChanged(77)&&(this._decorations.reset(),e.emitViewEvent(new rC(null))),e.emitViewEvent(new oC(t)),this.viewLayout.onConfigurationChanged(t),n&&i){const e=this.coordinatesConverter.convertModelPositionToViewPosition(i),t=this.viewLayout.getVerticalOffsetForLineNumber(e.lineNumber);this.viewLayout.setScrollPosition({scrollTop:t+this._viewportStartLineDelta},1)}Rc.shouldRecreate(t)&&(this.cursorConfig=new Rc(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig))}_registerModelEvents(){this._register(this.model.onDidChangeRawContentFast(e=>{try{const t=this._eventDispatcher.beginEmitViewEvents();let i=!1,n=!1;const o=e.changes,s=e.versionId,r=this._lines.createLineBreaksComputer();for(const e of o)switch(e.changeType){case 4:for(const t of e.detail)r.addRequest(t,null);break;case 2:r.addRequest(e.detail,null)}const a=r.finalize();let l=0;for(const e of o)switch(e.changeType){case 1:this._lines.onModelFlushed(),t.emitViewEvent(new aC),this._decorations.reset(),this.viewLayout.onFlushed(this.getLineCount()),i=!0;break;case 3:{const n=this._lines.onModelLinesDeleted(s,e.fromLineNumber,e.toLineNumber);null!==n&&(t.emitViewEvent(n),this.viewLayout.onLinesDeleted(n.fromLineNumber,n.toLineNumber)),i=!0;break}case 4:{const n=a.slice(l,l+e.detail.length);l+=e.detail.length;const o=this._lines.onModelLinesInserted(s,e.fromLineNumber,e.toLineNumber,n);null!==o&&(t.emitViewEvent(o),this.viewLayout.onLinesInserted(o.fromLineNumber,o.toLineNumber)),i=!0;break}case 2:{const i=a[l];l++;const[o,r,h,c]=this._lines.onModelLineChanged(s,e.lineNumber,i);n=o,r&&t.emitViewEvent(r),h&&(t.emitViewEvent(h),this.viewLayout.onLinesInserted(h.fromLineNumber,h.toLineNumber)),c&&(t.emitViewEvent(c),this.viewLayout.onLinesDeleted(c.fromLineNumber,c.toLineNumber));break}}this._lines.acceptVersionId(s),this.viewLayout.onHeightMaybeChanged(),!i&&n&&(t.emitViewEvent(new cC),t.emitViewEvent(new rC(null)),this._cursor.onLineMappingChanged(t),this._decorations.onLineMappingChanged())}finally{this._eventDispatcher.endEmitViewEvents()}if(this._viewportStartLine=-1,this._configuration.setMaxLineNumber(this.model.getLineCount()),this._updateConfigurationViewLineCountNow(),!this._hasFocus&&this.model.getAttachedEditorCount()>=2&&this._viewportStartLineTrackedRange){const e=this.model._getTrackedRange(this._viewportStartLineTrackedRange);if(e){const t=this.coordinatesConverter.convertModelPositionToViewPosition(e.getStartPosition()),i=this.viewLayout.getVerticalOffsetForLineNumber(t.lineNumber);this.viewLayout.setScrollPosition({scrollTop:i+this._viewportStartLineDelta},1)}}try{const t=this._eventDispatcher.beginEmitViewEvents();this._cursor.onModelContentChanged(t,e)}finally{this._eventDispatcher.endEmitViewEvents()}})),this._register(this.model.onDidChangeTokens(e=>{let t=[];for(let i=0,n=e.ranges.length;i{this._eventDispatcher.emitSingleViewEvent(new hC),this.cursorConfig=new Rc(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)})),this._register(this.model.onDidChangeLanguage(e=>{this.cursorConfig=new Rc(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)})),this._register(this.model.onDidChangeOptions(e=>{if(this._lines.setTabSize(this.model.getOptions().tabSize)){try{const e=this._eventDispatcher.beginEmitViewEvents();e.emitViewEvent(new aC),e.emitViewEvent(new cC),e.emitViewEvent(new rC(null)),this._cursor.onLineMappingChanged(e),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule()}this.cursorConfig=new Rc(this.model.getLanguageIdentifier(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)})),this._register(this.model.onDidChangeDecorations(e=>{this._decorations.onModelDecorationsChanged(),this._eventDispatcher.emitSingleViewEvent(new rC(e))}))}setHiddenAreas(e){try{const t=this._eventDispatcher.beginEmitViewEvents();this._lines.setHiddenAreas(e)&&(t.emitViewEvent(new aC),t.emitViewEvent(new cC),t.emitViewEvent(new rC(null)),this._cursor.onLineMappingChanged(t),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this.viewLayout.onHeightMaybeChanged())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule()}getVisibleRangesPlusViewportAboveBelow(){const e=this._configuration.options.get(129),t=this._configuration.options.get(54),i=Math.max(20,Math.round(e.height/t)),n=this.viewLayout.getLinesViewportData(),o=Math.max(1,n.completelyVisibleStartLineNumber-i),s=Math.min(this.getLineCount(),n.completelyVisibleEndLineNumber+i);return this._toModelVisibleRanges(new ro(o,this.getLineMinColumn(o),s,this.getLineMaxColumn(s)))}getVisibleRanges(){const e=this.getCompletelyVisibleViewRange();return this._toModelVisibleRanges(e)}_toModelVisibleRanges(e){const t=this.coordinatesConverter.convertViewRangeToModelRange(e),i=this._lines.getHiddenAreas();if(0===i.length)return[t];let n=[],o=0,s=t.startLineNumber,r=t.startColumn,a=t.endLineNumber,l=t.endColumn;for(let e=0,t=i.length;ea||(se.startLineNumber);let o="";for(let e=0;e0&&i[e-1]===i[e]||(o+=this.model.getLineContent(i[e])+n);return o}if(o&&t){let t=[],n=0;for(const o of e){const e=o.startLineNumber;o.isEmpty()?e!==n&&t.push(this.model.getLineContent(e)):t.push(this.model.getValueInRange(o,i?2:0)),n=e}return 1===t.length?t[0]:t}let r=[];for(const t of e)t.isEmpty()||r.push(this.model.getValueInRange(t,i?2:0));return 1===r.length?r[0]:r}getRichTextToCopy(e,t){const i=this.model.getLanguageIdentifier();if(1===i.id)return null;if(1!==e.length)return null;let n=e[0];if(n.isEmpty()){if(!t)return null;const e=n.startLineNumber;n=new ro(e,this.model.getLineMinColumn(e),e,this.model.getLineMaxColumn(e))}const o=this._configuration.options.get(38),s=this._getColorMap();return{mode:i.language,html:'
'+this._getHTMLToCopy(n,s)+"
"}}_getHTMLToCopy(e,t){const i=e.startLineNumber,n=e.startColumn,o=e.endLineNumber,s=e.endColumn,r=this.getTabSize();let a="";for(let e=i;e<=o;e++){const l=this.model.getLineTokens(e),h=l.getLineContent(),c=e===i?n-1:0,d=e===o?s-1:h.length;a+=""===h?"
":PC(h,l.inflate(),t,c,d,r,z)}return a}_getColorMap(){let e=th.getColorMap(),t=["#000000"];if(e)for(let i=1,n=e.length;ithis._cursor.setStates(n,e,t,i))}getCursorColumnSelectData(){return this._cursor.getCursorColumnSelectData()}setCursorColumnSelectData(e){this._cursor.setCursorColumnSelectData(e)}getPrevEditOperationType(){return this._cursor.getPrevEditOperationType()}setPrevEditOperationType(e){this._cursor.setPrevEditOperationType(e)}getSelection(){return this._cursor.getSelection()}getSelections(){return this._cursor.getSelections()}getPosition(){return this._cursor.getPrimaryCursorState().modelState.position}setSelections(e,t,i=0){this._withViewEventsCollector(n=>this._cursor.setSelections(n,e,t,i))}saveCursorState(){return this._cursor.saveState()}restoreCursorState(e){this._withViewEventsCollector(t=>this._cursor.restoreState(t,e))}_executeCursorEdit(e){this._cursor.context.cursorConfig.readOnly?this._eventDispatcher.emitOutgoingEvent(new xC):this._withViewEventsCollector(e)}executeEdits(e,t,i){this._executeCursorEdit(n=>this._cursor.executeEdits(n,e,t,i))}startComposition(){this._cursor.setIsDoingComposition(!0),this._executeCursorEdit(e=>this._cursor.startComposition(e))}endComposition(e){this._cursor.setIsDoingComposition(!1),this._executeCursorEdit(t=>this._cursor.endComposition(t,e))}type(e,t){this._executeCursorEdit(i=>this._cursor.type(i,e,t))}compositionType(e,t,i,n,o){this._executeCursorEdit(s=>this._cursor.compositionType(s,e,t,i,n,o))}paste(e,t,i,n){this._executeCursorEdit(o=>this._cursor.paste(o,e,t,i,n))}cut(e){this._executeCursorEdit(t=>this._cursor.cut(t,e))}executeCommand(e,t){this._executeCursorEdit(i=>this._cursor.executeCommand(i,e,t))}executeCommands(e,t){this._executeCursorEdit(i=>this._cursor.executeCommands(i,e,t))}revealPrimaryCursor(e,t){this._withViewEventsCollector(i=>this._cursor.revealPrimary(i,e,t,0))}revealTopMostCursor(e){const t=this._cursor.getTopMostViewPosition(),i=new ro(t.lineNumber,t.column,t.lineNumber,t.column);this._withViewEventsCollector(t=>t.emitViewEvent(new pC(e,i,null,0,!0,0)))}revealBottomMostCursor(e){const t=this._cursor.getBottomMostViewPosition(),i=new ro(t.lineNumber,t.column,t.lineNumber,t.column);this._withViewEventsCollector(t=>t.emitViewEvent(new pC(e,i,null,0,!0,0)))}revealRange(e,t,i,n,o){this._withViewEventsCollector(s=>s.emitViewEvent(new pC(e,i,null,n,t,o)))}getTabOutScopeRanges(){return this._cursor.getTabOutScopeRanges()}removeTabOutScopeRange(e){this._cursor.removeTabOutScopeRange(e)}getVerticalOffsetForLineNumber(e){return this.viewLayout.getVerticalOffsetForLineNumber(e)}getScrollTop(){return this.viewLayout.getCurrentScrollTop()}setScrollTop(e,t){this.viewLayout.setScrollPosition({scrollTop:e},t)}setScrollPosition(e,t){this.viewLayout.setScrollPosition(e,t)}deltaScrollNow(e,t){this.viewLayout.deltaScrollNow(e,t)}changeWhitespace(e){this.viewLayout.changeWhitespace(e)&&(this._eventDispatcher.emitSingleViewEvent(new vC),this._eventDispatcher.emitOutgoingEvent(new DC))}setMaxLineWidth(e){this.viewLayout.setMaxLineWidth(e)}_withViewEventsCollector(e){try{e(this._eventDispatcher.beginEmitViewEvents())}finally{this._eventDispatcher.endEmitViewEvents()}}}class aw{constructor(...e){this._entries=new Map;for(let[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}var lw;!function(e){e[e.Ignore=0]="Ignore",e[e.Info=1]="Info",e[e.Warning=2]="Warning",e[e.Error=3]="Error"}(lw||(lw={})),function(e){e.fromValue=function t(i){return i?ri("error",i)?e.Error:ri("warning",i)||ri("warn",i)?e.Warning:ri("info",i)?e.Info:e.Ignore:e.Ignore}}(lw||(lw={}));var hw=lw;const cw=kt("notificationService"),dw=kt("accessibilityService"),uw=new Ji("accessibilityModeEnabled",!1);class gw extends xr{constructor(e,t){super(0);for(let t=0;t=0&&e<256?this._asciiMap[e]:e>=12352&&e<=12543||e>=13312&&e<=19903||e>=19968&&e<=40959?3:this._map.get(e)||this._defaultValue}}let pw=[],mw=[];class fw{constructor(e,t){this.classifier=new gw(e,t)}static create(e){return new fw(e.get(118),e.get(117))}createLineBreaksComputer(e,t,i,n){t|=0,i=+i;let o=[],s=[];return{addRequest:(e,t)=>{o.push(e),s.push(t)},finalize:()=>{const r=e.typicalFullwidthCharacterWidth/e.typicalHalfwidthCharacterWidth;let a=[];for(let e=0,l=o.length;e=0){let e=Math.abs(h[v]-_);for(;v+1=e)break;e=t,v++}}for(;vt&&(t=m,o=f);let r=0,c=0,C=0,w=0;if(o<=_){let f=o,b=0===t?0:i.charCodeAt(t-1),v=0===t?0:e.get(b),y=!0;for(let o=t;om&&ww(0,v,a,l)&&(r=t,c=f),(f+=h)>_){t>m?(C=t,w=f-h):(C=o+1,w=f),f-c>d&&(r=0),y=!1;break}b=a,v=l}if(y){p>0&&(u[p]=l[l.length-1],g[p]=h[l.length-1],p++);break}}if(0===r){let a=o,l=i.charCodeAt(t),h=e.get(l),u=!1;for(let n=t-1;n>=m;n--){const t=n+1,o=i.charCodeAt(n);if(9===o){u=!0;break}let g,p;if(ui(o)?(n--,g=0,p=2):(g=e.get(o),p=Li(o)?s:1),a<=_){if(0===C&&(C=t,w=a),a<=_-d)break;if(ww(0,g,l,h)){r=t,c=a;break}}a-=p,l=o,h=g}if(0!==r){const e=d-(w-c);if(e<=n){const t=i.charCodeAt(C);let o;e-(o=di(t)?2:vw(t,w,n,s))<0&&(r=0)}}if(u){v--;continue}}if(0===r&&(r=C,c=w),r<=m){const e=i.charCodeAt(m);di(e)?(r=m+2,c=f+2):(r=m+1,c=f+vw(e,f,n,s))}for(m=r,u[p]=r,f=c,g[p]=c,p++,_=c+d;v<0||v=y)break;y=e,v++}}return 0===p?null:(u.length=p,g.length=p,pw=t.breakOffsets,mw=t.breakOffsetsVisibleColumn,t.breakOffsets=u,t.breakOffsetsVisibleColumn=g,t.wrappedTextIndentLength=c,t)}function bw(e,t,i,n,o,s){if(-1===n)return null;const r=t.length;if(r<=1)return null;const a=yw(t,i,n,o,s),l=n-a;let h=[],c=[],d=0,u=0,g=0,p=n,m=t.charCodeAt(0),f=e.get(m),_=vw(m,0,i,o),b=1;di(m)&&(_+=1,m=t.charCodeAt(1),f=e.get(m),b++);for(let n=b;np&&((0===u||_-g>l)&&(u=s,g=_-b),h[d]=u,c[d]=g,d++,p=g+l,u=0),m=r,f=a}return 0===d?null:(h[d]=r,c[d]=_,new rv(h,c,a))}function vw(e,t,i,n){return 9===e?i-t%i:Li(e)?n:e<32?n:1}function Cw(e,t){return t-e%t}function ww(e,t,i,n){return 32!==i&&(2===t||3===t&&2!==n||1===n||3===n&&1!==t)}function yw(e,t,i,n,o){let s=0;if(0!==o){const r=Zt(e);if(-1!==r){for(let i=0;ii&&(s=0)}}return s}var Sw;const Lw=null===(Sw=window.trustedTypes)||void 0===Sw?void 0:Sw.createPolicy("domLineBreaksComputer",{createHTML:e=>e});class Dw{static create(){return new Dw}constructor(){}createLineBreaksComputer(e,t,i,n){t|=0,i=+i;let o=[];return{addRequest:(e,t)=>{o.push(e)},finalize:()=>(function s(e,t,i,n,o){var s;if(-1===n){const t=[];for(let i=0,n=e.length;ir?(a=0,p=0):m=r-e}const f=s.substr(a),_=Ew(f,p,i,m,l);h[n]=a,c[n]=p,d[n]=f,u[n]=_[0],g[n]=_[1]}const p=l.build(),m=null!==(s=null==Lw?void 0:Lw.createHTML(p))&&void 0!==s?s:p;a.innerHTML=m,a.style.position="absolute",a.style.top="10000",a.style.wordWrap="break-word",document.body.appendChild(a);let f=document.createRange();const _=Array.prototype.slice.call(a.children,0);let b=[];for(let t=0;t');const s=e.length;let r=t,a=0,l=[],h=[],c=0");for(let t=0;t"),l[t]=a,h[t]=r;const n=c;c=t+1"),l[e.length]=a,h[e.length]=r,o.appendASCIIString(""),[l,h]}function xw(e,t,i,n){if(i.length<=1)return null;const o=Array.prototype.slice.call(t.children,0),s=[];try{!function e(t,i,n,o,s,r,a,l){if(o===r)return;if(s=s||kw(t,i,n[o],n[o+1]),a=a||kw(t,i,n[r],n[r+1]),Math.abs(s[0].top-a[0].top)<=.1)return;if(o+1===r)return void l.push(r);const h=o+(r-o)/2|0,c=kw(t,i,n[h],n[h+1]);e(t,i,n,o,s,h,c,l),e(t,i,n,h,c,r,a,l)}(e,o,n,0,null,i.length-1,null,s)}catch(e){return console.log(e),null}return 0===s.length?null:(s.push(i.length),s)}function kw(e,t,i,n){return e.setStart(t[i/16384|0].firstChild,i%16384),e.setEnd(t[n/16384|0].firstChild,n%16384),e.getClientRects()}var Nw=function(e,t){return function(i,n){t(i,n,e)}};let Iw=0;class Tw{constructor(e,t,i,n,o){this.model=e,this.viewModel=t,this.view=i,this.hasRealView=n,this.listenersToRemove=o}dispose(){f(this.listenersToRemove),this.model.onBeforeDetached(),this.hasRealView&&this.view.dispose(),this.viewModel.dispose()}}let Aw=class e extends C{constructor(e,t,i,o,s,r,a,l,h,c){super(),this._onDidDispose=this._register(new oe),this.onDidDispose=this._onDidDispose.event,this._onDidChangeModelContent=this._register(new oe),this.onDidChangeModelContent=this._onDidChangeModelContent.event,this._onDidChangeModelLanguage=this._register(new oe),this.onDidChangeModelLanguage=this._onDidChangeModelLanguage.event,this._onDidChangeModelLanguageConfiguration=this._register(new oe),this.onDidChangeModelLanguageConfiguration=this._onDidChangeModelLanguageConfiguration.event,this._onDidChangeModelOptions=this._register(new oe),this.onDidChangeModelOptions=this._onDidChangeModelOptions.event,this._onDidChangeModelDecorations=this._register(new oe),this.onDidChangeModelDecorations=this._onDidChangeModelDecorations.event,this._onDidChangeConfiguration=this._register(new oe),this.onDidChangeConfiguration=this._onDidChangeConfiguration.event,this._onDidChangeModel=this._register(new oe),this.onDidChangeModel=this._onDidChangeModel.event,this._onDidChangeCursorPosition=this._register(new oe),this.onDidChangeCursorPosition=this._onDidChangeCursorPosition.event,this._onDidChangeCursorSelection=this._register(new oe),this.onDidChangeCursorSelection=this._onDidChangeCursorSelection.event,this._onDidAttemptReadOnlyEdit=this._register(new oe),this.onDidAttemptReadOnlyEdit=this._onDidAttemptReadOnlyEdit.event,this._onDidLayoutChange=this._register(new oe),this.onDidLayoutChange=this._onDidLayoutChange.event,this._editorTextFocus=this._register(new Mw),this.onDidFocusEditorText=this._editorTextFocus.onDidChangeToTrue,this.onDidBlurEditorText=this._editorTextFocus.onDidChangeToFalse,this._editorWidgetFocus=this._register(new Mw),this.onDidFocusEditorWidget=this._editorWidgetFocus.onDidChangeToTrue,this.onDidBlurEditorWidget=this._editorWidgetFocus.onDidChangeToFalse,this._onWillType=this._register(new oe),this.onWillType=this._onWillType.event,this._onDidType=this._register(new oe),this.onDidType=this._onDidType.event,this._onDidCompositionStart=this._register(new oe),this.onDidCompositionStart=this._onDidCompositionStart.event,this._onDidCompositionEnd=this._register(new oe),this.onDidCompositionEnd=this._onDidCompositionEnd.event,this._onDidPaste=this._register(new oe),this.onDidPaste=this._onDidPaste.event,this._onMouseUp=this._register(new oe),this.onMouseUp=this._onMouseUp.event,this._onMouseDown=this._register(new oe),this.onMouseDown=this._onMouseDown.event,this._onMouseDrag=this._register(new oe),this.onMouseDrag=this._onMouseDrag.event,this._onMouseDrop=this._register(new oe),this.onMouseDrop=this._onMouseDrop.event,this._onMouseDropCanceled=this._register(new oe),this.onMouseDropCanceled=this._onMouseDropCanceled.event,this._onContextMenu=this._register(new oe),this.onContextMenu=this._onContextMenu.event,this._onMouseMove=this._register(new oe),this.onMouseMove=this._onMouseMove.event,this._onMouseLeave=this._register(new oe),this.onMouseLeave=this._onMouseLeave.event,this._onMouseWheel=this._register(new oe),this.onMouseWheel=this._onMouseWheel.event,this._onKeyUp=this._register(new oe),this.onKeyUp=this._onKeyUp.event,this._onKeyDown=this._register(new oe),this.onKeyDown=this._onKeyDown.event,this._onDidContentSizeChange=this._register(new oe),this.onDidContentSizeChange=this._onDidContentSizeChange.event,this._onDidScrollChange=this._register(new oe),this.onDidScrollChange=this._onDidScrollChange.event,this._onDidChangeViewZones=this._register(new oe),this.onDidChangeViewZones=this._onDidChangeViewZones.event;const d=Object.assign({},t);let u;this._domElement=e,this._overflowWidgetsDomNode=d.overflowWidgetsDomNode,delete d.overflowWidgetsDomNode,this._id=++Iw,this._decorationTypeKeysToIds={},this._decorationTypeSubtypes={},this.isSimpleWidget=i.isSimpleWidget||!1,this._telemetryData=i.telemetryData,this._configuration=this._register(this._createConfiguration(d,c)),this._register(this._configuration.onDidChange(e=>{this._onDidChangeConfiguration.fire(e);const t=this._configuration.options;if(e.hasChanged(129)){const e=t.get(129);this._onDidLayoutChange.fire(e)}})),this._contextKeyService=this._register(a.createScoped(this._domElement)),this._notificationService=h,this._codeEditorService=s,this._commandService=r,this._themeService=l,this._register(new Ow(this,this._contextKeyService)),this._register(new Rw(this,this._contextKeyService)),this._instantiationService=o.createChild(new aw([en,this._contextKeyService])),this._modelData=null,this._contributions={},this._actions={},this._focusTracker=new Pw(e),this._focusTracker.onChange(()=>{this._editorWidgetFocus.setValue(this._focusTracker.hasFocus())}),this._contentWidgets={},this._overlayWidgets={},u=Array.isArray(i.contributions)?i.contributions:eo.getEditorContributions();for(const e of u)try{const t=this._instantiationService.createInstance(e.ctor,this);this._contributions[e.id]=t}catch(e){n(e)}eo.getEditorActions().forEach(e=>{const t=new AC(e.id,e.label,e.alias,Re(e.precondition),t=>this._instantiationService.invokeFunction(i=>Promise.resolve(e.runEditorCommand(i,this,t))),this._contextKeyService);this._actions[t.id]=t}),this._codeEditorService.addCodeEditor(this)}_createConfiguration(e,t){return new Tg(this.isSimpleWidget,e,this._domElement,t)}getId(){return this.getEditorType()+":"+this._id}getEditorType(){return MC.ICodeEditor}dispose(){this._codeEditorService.removeCodeEditor(this),this._focusTracker.dispose();const e=Object.keys(this._contributions);for(let t=0,i=e.length;tro.lift(e)))}getVisibleColumnFromPosition(e){if(!this._modelData)return e.column;const t=this._modelData.model.validatePosition(e),i=this._modelData.model.getOptions().tabSize;return Hc.visibleColumnFromColumn(this._modelData.model.getLineContent(t.lineNumber),t.column,i)+1}getPosition(){return this._modelData?this._modelData.viewModel.getPosition():null}setPosition(e){if(this._modelData){if(!Tt.isIPosition(e))throw new Error("Invalid arguments");this._modelData.viewModel.setSelections("api",[{selectionStartLineNumber:e.lineNumber,selectionStartColumn:e.column,positionLineNumber:e.lineNumber,positionColumn:e.column}])}}_sendRevealRange(e,t,i,n){if(!this._modelData)return;if(!ro.isIRange(e))throw new Error("Invalid arguments");const o=this._modelData.model.validateRange(e),s=this._modelData.viewModel.coordinatesConverter.convertModelRangeToViewRange(o);this._modelData.viewModel.revealRange("api",i,s,t,n)}revealLine(e,t=0){this._revealLine(e,0,t)}revealLineInCenter(e,t=0){this._revealLine(e,1,t)}revealLineInCenterIfOutsideViewport(e,t=0){this._revealLine(e,2,t)}revealLineNearTop(e,t=0){this._revealLine(e,5,t)}_revealLine(e,t,i){if("number"!=typeof e)throw new Error("Invalid arguments");this._sendRevealRange(new ro(e,1,e,1),t,!1,i)}revealPosition(e,t=0){this._revealPosition(e,0,!0,t)}revealPositionInCenter(e,t=0){this._revealPosition(e,1,!0,t)}revealPositionInCenterIfOutsideViewport(e,t=0){this._revealPosition(e,2,!0,t)}revealPositionNearTop(e,t=0){this._revealPosition(e,5,!0,t)}_revealPosition(e,t,i,n){if(!Tt.isIPosition(e))throw new Error("Invalid arguments");this._sendRevealRange(new ro(e.lineNumber,e.column,e.lineNumber,e.column),t,i,n)}getSelection(){return this._modelData?this._modelData.viewModel.getSelection():null}getSelections(){return this._modelData?this._modelData.viewModel.getSelections():null}setSelection(e){const t=ao.isISelection(e),i=ro.isIRange(e);if(!t&&!i)throw new Error("Invalid arguments");t?this._setSelectionImpl(e):i&&this._setSelectionImpl({selectionStartLineNumber:e.startLineNumber,selectionStartColumn:e.startColumn,positionLineNumber:e.endLineNumber,positionColumn:e.endColumn})}_setSelectionImpl(e){if(!this._modelData)return;const t=new ao(e.selectionStartLineNumber,e.selectionStartColumn,e.positionLineNumber,e.positionColumn);this._modelData.viewModel.setSelections("api",[t])}revealLines(e,t,i=0){this._revealLines(e,t,0,i)}revealLinesInCenter(e,t,i=0){this._revealLines(e,t,1,i)}revealLinesInCenterIfOutsideViewport(e,t,i=0){this._revealLines(e,t,2,i)}revealLinesNearTop(e,t,i=0){this._revealLines(e,t,5,i)}_revealLines(e,t,i,n){if("number"!=typeof e||"number"!=typeof t)throw new Error("Invalid arguments");this._sendRevealRange(new ro(e,1,t,1),i,!1,n)}revealRange(e,t=0,i=!1,n=!0){this._revealRange(e,i?1:0,n,t)}revealRangeInCenter(e,t=0){this._revealRange(e,1,!0,t)}revealRangeInCenterIfOutsideViewport(e,t=0){this._revealRange(e,2,!0,t)}revealRangeNearTop(e,t=0){this._revealRange(e,5,!0,t)}revealRangeNearTopIfOutsideViewport(e,t=0){this._revealRange(e,6,!0,t)}revealRangeAtTop(e,t=0){this._revealRange(e,3,!0,t)}_revealRange(e,t,i,n){if(!ro.isIRange(e))throw new Error("Invalid arguments");this._sendRevealRange(ro.lift(e),t,i,n)}setSelections(e,t="api",i=0){if(this._modelData){if(!e||0===e.length)throw new Error("Invalid arguments");for(let t=0,i=e.length;te.isSupported())}getAction(e){return this._actions[e]||null}trigger(e,t,i){switch(i=i||{},t){case"compositionStart":return void this._startComposition();case"compositionEnd":return void this._endComposition(e);case"type":return void this._type(e,i.text||"");case"replacePreviousChar":return void this._compositionType(e,i.text||"",i.replaceCharCnt||0,0,0);case"compositionType":return void this._compositionType(e,i.text||"",i.replacePrevCharCnt||0,i.replaceNextCharCnt||0,i.positionDelta||0);case"paste":return void this._paste(e,i.text||"",i.pasteOnNewLine||!1,i.multicursorText||null,i.mode||null);case"cut":return void this._cut(e)}const o=this.getAction(t);o?Promise.resolve(o.run()).then(void 0,n):this._modelData&&(this._triggerEditorCommand(e,t,i)||this._commandService.executeCommand(t,i))}_startComposition(){this._modelData&&(this._modelData.viewModel.startComposition(),this._onDidCompositionStart.fire())}_endComposition(e){this._modelData&&(this._modelData.viewModel.endComposition(e),this._onDidCompositionEnd.fire())}_type(e,t){if(!this._modelData||0===t.length)return;const i={text:t,cancelType:!1};"keyboard"===e&&this._onWillType.fire(i),i.cancelType||this._modelData.viewModel.type(t,e),"keyboard"===e&&this._onDidType.fire(t)}_compositionType(e,t,i,n,o){this._modelData&&this._modelData.viewModel.compositionType(t,i,n,o,e)}_paste(e,t,i,n,o){if(!this._modelData||0===t.length)return;const s=this._modelData.viewModel.getSelection().getStartPosition();this._modelData.viewModel.paste(t,i,n,e);const r=this._modelData.viewModel.getSelection().getStartPosition();"keyboard"===e&&this._onDidPaste.fire({range:new ro(s.lineNumber,s.column,r.lineNumber,r.column),mode:o})}_cut(e){this._modelData&&this._modelData.viewModel.cut(e)}_triggerEditorCommand(e,t,i){const o=eo.getEditorCommand(t);return!!o&&((i=i||{}).source=e,this._instantiationService.invokeFunction(e=>{Promise.resolve(o.runEditorCommand(e,this,i)).then(void 0,n)}),!0)}_getViewModel(){return this._modelData?this._modelData.viewModel:null}pushUndoStop(){return!!this._modelData&&!this._configuration.options.get(77)&&(this._modelData.model.pushStackElement(),!0)}popUndoStop(){return!!this._modelData&&!this._configuration.options.get(77)&&(this._modelData.model.popStackElement(),!0)}executeEdits(e,t,i){if(!this._modelData)return!1;if(this._configuration.options.get(77))return!1;let n;return n=i?Array.isArray(i)?()=>i:i:()=>null,this._modelData.viewModel.executeEdits(e,t,n),!0}executeCommand(e,t){this._modelData&&this._modelData.viewModel.executeCommand(t,e)}executeCommands(e,t){this._modelData&&this._modelData.viewModel.executeCommands(t,e)}changeDecorations(e){return this._modelData?this._modelData.model.changeDecorations(e,this._id):null}getLineDecorations(e){return this._modelData?this._modelData.model.getLineDecorations(e,this._id,Oo(this._configuration.options)):null}deltaDecorations(e,t){return this._modelData?0===e.length&&0===t.length?e:this._modelData.model.deltaDecorations(e,t,this._id):[]}removeDecorations(e){const t=this._decorationTypeKeysToIds[e];t&&this.deltaDecorations(t,[]),this._decorationTypeKeysToIds.hasOwnProperty(e)&&delete this._decorationTypeKeysToIds[e],this._decorationTypeSubtypes.hasOwnProperty(e)&&delete this._decorationTypeSubtypes[e]}getLayoutInfo(){return this._configuration.options.get(129)}createOverviewRuler(e){return this._modelData&&this._modelData.hasRealView?this._modelData.view.createOverviewRuler(e):null}getContainerDomNode(){return this._domElement}getDomNode(){return this._modelData&&this._modelData.hasRealView?this._modelData.view.domNode.domNode:null}delegateVerticalScrollbarMouseDown(e){this._modelData&&this._modelData.hasRealView&&this._modelData.view.delegateVerticalScrollbarMouseDown(e)}layout(e){this._configuration.observeReferenceElement(e),this.render()}focus(){this._modelData&&this._modelData.hasRealView&&this._modelData.view.focus()}hasTextFocus(){return!(!this._modelData||!this._modelData.hasRealView)&&this._modelData.view.isFocused()}hasWidgetFocus(){return this._focusTracker&&this._focusTracker.hasFocus()}addContentWidget(e){const t={widget:e,position:e.getPosition()};this._contentWidgets.hasOwnProperty(e.getId())&&console.warn("Overwriting a content widget with the same id."),this._contentWidgets[e.getId()]=t,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addContentWidget(t)}layoutContentWidget(e){const t=e.getId();if(this._contentWidgets.hasOwnProperty(t)){const i=this._contentWidgets[t];i.position=e.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutContentWidget(i)}}removeContentWidget(e){const t=e.getId();if(this._contentWidgets.hasOwnProperty(t)){const e=this._contentWidgets[t];delete this._contentWidgets[t],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeContentWidget(e)}}addOverlayWidget(e){const t={widget:e,position:e.getPosition()};this._overlayWidgets.hasOwnProperty(e.getId())&&console.warn("Overwriting an overlay widget with the same id."),this._overlayWidgets[e.getId()]=t,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addOverlayWidget(t)}layoutOverlayWidget(e){const t=e.getId();if(this._overlayWidgets.hasOwnProperty(t)){const i=this._overlayWidgets[t];i.position=e.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutOverlayWidget(i)}}removeOverlayWidget(e){const t=e.getId();if(this._overlayWidgets.hasOwnProperty(t)){const e=this._overlayWidgets[t];delete this._overlayWidgets[t],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeOverlayWidget(e)}}changeViewZones(e){this._modelData&&this._modelData.hasRealView&&this._modelData.view.change(e)}getTargetAtClientPoint(e,t){return this._modelData&&this._modelData.hasRealView?this._modelData.view.getTargetAtClientPoint(e,t):null}getScrolledVisiblePosition(t){if(!this._modelData||!this._modelData.hasRealView)return null;const i=this._modelData.model.validatePosition(t),n=this._configuration.options,o=n.get(129);return{top:e._getVerticalOffsetForPosition(this._modelData,i.lineNumber,i.column)-this.getScrollTop(),left:this._modelData.view.getOffsetForColumn(i.lineNumber,i.column)+o.glyphMarginWidth+o.lineNumbersWidth+o.decorationsWidth-this.getScrollLeft(),height:n.get(54)}}getOffsetForColumn(e,t){return this._modelData&&this._modelData.hasRealView?this._modelData.view.getOffsetForColumn(e,t):-1}render(e=!1){this._modelData&&this._modelData.hasRealView&&this._modelData.view.render(!0,e)}setAriaOptions(e){this._modelData&&this._modelData.hasRealView&&this._modelData.view.setAriaOptions(e)}applyFontInfo(e){Tg.applyFontInfoSlow(e,this._configuration.options.get(38))}_attachModel(e){if(!e)return void(this._modelData=null);const i=[];this._domElement.setAttribute("data-mode-id",e.getLanguageIdentifier().language),this._configuration.setIsDominatedByLongLines(e.isDominatedByLongLines()),this._configuration.setMaxLineNumber(e.getLineCount()),e.onBeforeAttached();const n=new rw(this._id,this._configuration,e,Dw.create(),fw.create(this._configuration.options),e=>Jd(e));i.push(e.onDidChangeDecorations(e=>this._onDidChangeModelDecorations.fire(e))),i.push(e.onDidChangeLanguage(t=>{this._domElement.setAttribute("data-mode-id",e.getLanguageIdentifier().language),this._onDidChangeModelLanguage.fire(t)})),i.push(e.onDidChangeLanguageConfiguration(e=>this._onDidChangeModelLanguageConfiguration.fire(e))),i.push(e.onDidChangeContent(e=>this._onDidChangeModelContent.fire(e))),i.push(e.onDidChangeOptions(e=>this._onDidChangeModelOptions.fire(e))),i.push(e.onWillDispose(()=>this.setModel(null))),i.push(n.onEvent(e=>{switch(e.kind){case 0:this._onDidContentSizeChange.fire(e);break;case 1:this._editorTextFocus.setValue(e.hasFocus);break;case 2:this._onDidScrollChange.fire(e);break;case 3:this._onDidChangeViewZones.fire();break;case 4:this._onDidAttemptReadOnlyEdit.fire();break;case 5:{e.reachedMaxCursorCount&&this._notificationService.warn(t(0,"The number of cursors has been limited to {0}.",IC.MAX_CURSOR_COUNT));const i=[];for(let t=0,n=e.selections.length;t{this._paste("keyboard",e,t,i,n)},type:e=>{this._type("keyboard",e)},compositionType:(e,t,i,n)=>{this._compositionType("keyboard",e,t,i,n)},startComposition:()=>{this._startComposition()},endComposition:()=>{this._endComposition("keyboard")},cut:()=>{this._cut("keyboard")}}:{paste:(e,t,i,n)=>{this._commandService.executeCommand("paste",{text:e,pasteOnNewLine:t,multicursorText:i,mode:n})},type:e=>{this._commandService.executeCommand("type",{text:e})},compositionType:(e,t,i,n)=>{i||n?this._commandService.executeCommand("compositionType",{text:e,replacePrevCharCnt:t,replaceNextCharCnt:i,positionDelta:n}):this._commandService.executeCommand("replacePreviousChar",{text:e,replaceCharCnt:t})},startComposition:()=>{this._commandService.executeCommand("compositionStart",{})},endComposition:()=>{this._commandService.executeCommand("compositionEnd",{})},cut:()=>{this._commandService.executeCommand("cut",{})}};const i=new J_(e.coordinatesConverter);return i.onKeyDown=e=>this._onKeyDown.fire(e),i.onKeyUp=e=>this._onKeyUp.fire(e),i.onContextMenu=e=>this._onContextMenu.fire(e),i.onMouseMove=e=>this._onMouseMove.fire(e),i.onMouseLeave=e=>this._onMouseLeave.fire(e),i.onMouseDown=e=>this._onMouseDown.fire(e),i.onMouseUp=e=>this._onMouseUp.fire(e),i.onMouseDrag=e=>this._onMouseDrag.fire(e),i.onMouseDrop=e=>this._onMouseDrop.fire(e),i.onMouseDropCanceled=e=>this._onMouseDropCanceled.fire(e),i.onMouseWheel=e=>this._onMouseWheel.fire(e),[new Jv(t,this._configuration,this._themeService,e,i,this._overflowWidgetsDomNode),!0]}_postDetachModelCleanup(e){e&&e.removeAllDecorationsWithOwnerId(this._id)}_detachModel(){if(!this._modelData)return null;const e=this._modelData.model,t=this._modelData.hasRealView?this._modelData.view.domNode.domNode:null;return this._modelData.dispose(),this._modelData=null,this._domElement.removeAttribute("data-mode-id"),t&&this._domElement.contains(t)&&this._domElement.removeChild(t),e}_removeDecorationType(e){this._codeEditorService.removeDecorationType(e)}hasModel(){return null!==this._modelData}};Aw=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([Nw(3,Et),Nw(4,It),Nw(5,on),Nw(6,en),Nw(7,pn),Nw(8,cw),Nw(9,dw)],Aw);class Mw extends C{constructor(){super(),this._onDidChangeToTrue=this._register(new oe),this.onDidChangeToTrue=this._onDidChangeToTrue.event,this._onDidChangeToFalse=this._register(new oe),this.onDidChangeToFalse=this._onDidChangeToFalse.event,this._value=0}setValue(e){const t=e?2:1;this._value!==t&&(this._value=t,2===this._value?this._onDidChangeToTrue.fire():1===this._value&&this._onDidChangeToFalse.fire())}}class Ow extends C{constructor(e,t){super(),this._editor=e,t.createKey("editorId",e.getId()),this._editorSimpleInput=cd.editorSimpleInput.bindTo(t),this._editorFocus=cd.focus.bindTo(t),this._textInputFocus=cd.textInputFocus.bindTo(t),this._editorTextFocus=cd.editorTextFocus.bindTo(t),this._editorTabMovesFocus=cd.tabMovesFocus.bindTo(t),this._editorReadonly=cd.readOnly.bindTo(t),this._inDiffEditor=cd.inDiffEditor.bindTo(t),this._editorColumnSelection=cd.columnSelection.bindTo(t),this._hasMultipleSelections=cd.hasMultipleSelections.bindTo(t),this._hasNonEmptySelection=cd.hasNonEmptySelection.bindTo(t),this._canUndo=cd.canUndo.bindTo(t),this._canRedo=cd.canRedo.bindTo(t),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromConfig())),this._register(this._editor.onDidChangeCursorSelection(()=>this._updateFromSelection())),this._register(this._editor.onDidFocusEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidFocusEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidChangeModel(()=>this._updateFromModel())),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromModel())),this._updateFromConfig(),this._updateFromSelection(),this._updateFromFocus(),this._updateFromModel(),this._editorSimpleInput.set(this._editor.isSimpleWidget)}_updateFromConfig(){const e=this._editor.getOptions();this._editorTabMovesFocus.set(e.get(128)),this._editorReadonly.set(e.get(77)),this._inDiffEditor.set(e.get(49)),this._editorColumnSelection.set(e.get(15))}_updateFromSelection(){const e=this._editor.getSelections();e?(this._hasMultipleSelections.set(e.length>1),this._hasNonEmptySelection.set(e.some(e=>!e.isEmpty()))):(this._hasMultipleSelections.reset(),this._hasNonEmptySelection.reset())}_updateFromFocus(){this._editorFocus.set(this._editor.hasWidgetFocus()&&!this._editor.isSimpleWidget),this._editorTextFocus.set(this._editor.hasTextFocus()&&!this._editor.isSimpleWidget),this._textInputFocus.set(this._editor.hasTextFocus())}_updateFromModel(){const e=this._editor.getModel();this._canUndo.set(Boolean(e&&e.canUndo())),this._canRedo.set(Boolean(e&&e.canRedo()))}}class Rw extends C{constructor(e,t){super(),this._editor=e,this._contextKeyService=t,this._langId=cd.languageId.bindTo(t),this._hasCompletionItemProvider=cd.hasCompletionItemProvider.bindTo(t),this._hasCodeActionsProvider=cd.hasCodeActionsProvider.bindTo(t),this._hasCodeLensProvider=cd.hasCodeLensProvider.bindTo(t),this._hasDefinitionProvider=cd.hasDefinitionProvider.bindTo(t),this._hasDeclarationProvider=cd.hasDeclarationProvider.bindTo(t),this._hasImplementationProvider=cd.hasImplementationProvider.bindTo(t),this._hasTypeDefinitionProvider=cd.hasTypeDefinitionProvider.bindTo(t),this._hasHoverProvider=cd.hasHoverProvider.bindTo(t),this._hasDocumentHighlightProvider=cd.hasDocumentHighlightProvider.bindTo(t),this._hasDocumentSymbolProvider=cd.hasDocumentSymbolProvider.bindTo(t),this._hasReferenceProvider=cd.hasReferenceProvider.bindTo(t),this._hasRenameProvider=cd.hasRenameProvider.bindTo(t),this._hasSignatureHelpProvider=cd.hasSignatureHelpProvider.bindTo(t),this._hasInlineHintsProvider=cd.hasInlineHintsProvider.bindTo(t),this._hasDocumentFormattingProvider=cd.hasDocumentFormattingProvider.bindTo(t),this._hasDocumentSelectionFormattingProvider=cd.hasDocumentSelectionFormattingProvider.bindTo(t),this._hasMultipleDocumentFormattingProvider=cd.hasMultipleDocumentFormattingProvider.bindTo(t),this._hasMultipleDocumentSelectionFormattingProvider=cd.hasMultipleDocumentSelectionFormattingProvider.bindTo(t),this._isInWalkThrough=cd.isInWalkThroughSnippet.bindTo(t);const i=()=>this._update();this._register(e.onDidChangeModel(i)),this._register(e.onDidChangeModelLanguage(i)),this._register(Ml.onDidChange(i)),this._register($l.onDidChange(i)),this._register(Ul.onDidChange(i)),this._register(Wl.onDidChange(i)),this._register(Vl.onDidChange(i)),this._register(zl.onDidChange(i)),this._register(Hl.onDidChange(i)),this._register(Rl.onDidChange(i)),this._register(Fl.onDidChange(i)),this._register(Pl.onDidChange(i)),this._register(Tl.onDidChange(i)),this._register(Al.onDidChange(i)),this._register(jl.onDidChange(i)),this._register(ql.onDidChange(i)),this._register(Ol.onDidChange(i)),this._register(Kl.onDidChange(i)),i()}dispose(){super.dispose()}reset(){this._contextKeyService.bufferChangeEvents(()=>{this._langId.reset(),this._hasCompletionItemProvider.reset(),this._hasCodeActionsProvider.reset(),this._hasCodeLensProvider.reset(),this._hasDefinitionProvider.reset(),this._hasDeclarationProvider.reset(),this._hasImplementationProvider.reset(),this._hasTypeDefinitionProvider.reset(),this._hasHoverProvider.reset(),this._hasDocumentHighlightProvider.reset(),this._hasDocumentSymbolProvider.reset(),this._hasReferenceProvider.reset(),this._hasRenameProvider.reset(),this._hasDocumentFormattingProvider.reset(),this._hasDocumentSelectionFormattingProvider.reset(),this._hasSignatureHelpProvider.reset(),this._isInWalkThrough.reset()})}_update(){const e=this._editor.getModel();e?this._contextKeyService.bufferChangeEvents(()=>{this._langId.set(e.getLanguageIdentifier().language),this._hasCompletionItemProvider.set(Ml.has(e)),this._hasCodeActionsProvider.set($l.has(e)),this._hasCodeLensProvider.set(Ul.has(e)),this._hasDefinitionProvider.set(Wl.has(e)),this._hasDeclarationProvider.set(Vl.has(e)),this._hasImplementationProvider.set(zl.has(e)),this._hasTypeDefinitionProvider.set(Hl.has(e)),this._hasHoverProvider.set(Rl.has(e)),this._hasDocumentHighlightProvider.set(Fl.has(e)),this._hasDocumentSymbolProvider.set(Pl.has(e)),this._hasReferenceProvider.set(Tl.has(e)),this._hasRenameProvider.set(Al.has(e)),this._hasSignatureHelpProvider.set(Ol.has(e)),this._hasInlineHintsProvider.set(Kl.has(e)),this._hasDocumentFormattingProvider.set(jl.has(e)||ql.has(e)),this._hasDocumentSelectionFormattingProvider.set(ql.has(e)),this._hasMultipleDocumentFormattingProvider.set(jl.all(e).length+ql.all(e).length>1),this._hasMultipleDocumentSelectionFormattingProvider.set(ql.all(e).length>1),this._isInWalkThrough.set(e.uri.scheme===Cs.walkThroughSnippet)}):this.reset()}}class Pw extends C{constructor(e){super(),this._onChange=this._register(new oe),this.onChange=this._onChange.event,this._hasFocus=!1,this._domFocusTracker=this._register(Au(e)),this._register(this._domFocusTracker.onDidFocus(()=>{this._hasFocus=!0,this._onChange.fire(void 0)})),this._register(this._domFocusTracker.onDidBlur(()=>{this._hasFocus=!1,this._onChange.fire(void 0)}))}hasFocus(){return this._hasFocus}}const Fw=encodeURIComponent("");function Ww(e){return Fw+encodeURIComponent(e.toString())+Bw}const Vw=encodeURIComponent('');Cn((e,t)=>{const i=e.getColor(Pm);i&&t.addRule(`.monaco-editor .squiggly-error { border-bottom: 4px double ${i}; }`);const n=e.getColor(Rm);n&&t.addRule(`.monaco-editor .squiggly-error { background: url("data:image/svg+xml,${Ww(n)}") repeat-x bottom left; }`);const o=e.getColor(Om);o&&t.addRule(`.monaco-editor .squiggly-error::before { display: block; content: ''; width: 100%; height: 100%; background: ${o}; }`);const s=e.getColor(Wm);s&&t.addRule(`.monaco-editor .squiggly-warning { border-bottom: 4px double ${s}; }`);const r=e.getColor(Bm);r&&t.addRule(`.monaco-editor .squiggly-warning { background: url("data:image/svg+xml,${Ww(r)}") repeat-x bottom left; }`);const a=e.getColor(Fm);a&&t.addRule(`.monaco-editor .squiggly-warning::before { display: block; content: ''; width: 100%; height: 100%; background: ${a}; }`);const l=e.getColor(Hm);l&&t.addRule(`.monaco-editor .squiggly-info { border-bottom: 4px double ${l}; }`);const h=e.getColor(zm);h&&t.addRule(`.monaco-editor .squiggly-info { background: url("data:image/svg+xml,${Ww(h)}") repeat-x bottom left; }`);const c=e.getColor(Vm);c&&t.addRule(`.monaco-editor .squiggly-info::before { display: block; content: ''; width: 100%; height: 100%; background: ${c}; }`);const d=e.getColor(Km);d&&t.addRule(`.monaco-editor .squiggly-hint { border-bottom: 2px dotted ${d}; }`);const u=e.getColor(Um);u&&t.addRule(`.monaco-editor .squiggly-hint { background: url("data:image/svg+xml,${function g(e){return Vw+encodeURIComponent(e.toString())+zw}(u)}") no-repeat bottom left; }`);const p=e.getColor(z_);p&&t.addRule(`.monaco-editor.showUnused .squiggly-inline-unnecessary { opacity: ${p.rgba.a}; }`);const m=e.getColor(V_);m&&t.addRule(`.monaco-editor.showUnused .squiggly-unnecessary { border-bottom: 2px dashed ${m}; }`);const f=e.getColor(jm)||"inherit";t.addRule(`.monaco-editor.showDeprecated .squiggly-inline-deprecated { text-decoration: line-through; text-decoration-color: ${f}}`)});let Hw=!1;var Uw;!function(e){e.North="north",e.South="south",e.East="east",e.West="west"}(Uw||(Uw={}));let Kw=4;const $w=new oe;class jw extends C{constructor(e,t,i){super(),this.hoverDelayer=this._register(new Wa(300)),this._state=3,this._onDidEnablementChange=this._register(new oe),this.onDidEnablementChange=this._onDidEnablementChange.event,this._onDidStart=this._register(new oe),this.onDidStart=this._onDidStart.event,this._onDidChange=this._register(new oe),this.onDidChange=this._onDidChange.event,this._onDidReset=this._register(new oe),this.onDidReset=this._onDidReset.event,this._onDidEnd=this._register(new oe),this.onDidEnd=this._onDidEnd.event,this.linkedSash=void 0,this.orthogonalStartSashDisposables=this._register(new v),this.orthogonalStartDragHandleDisposables=this._register(new v),this.orthogonalEndSashDisposables=this._register(new v),this.orthogonalEndDragHandleDisposables=this._register(new v),this.el=Mu(e,Bu(".monaco-sash")),i.orthogonalEdge&&this.el.classList.add(`orthogonal-edge-${i.orthogonalEdge}`),H&&this.el.classList.add("mac"),this._register(Ed(this.el,"mousedown")(this.onMouseDown,this)),this._register(Ed(this.el,"dblclick")(this.onMouseDoubleClick,this)),this._register(Ed(this.el,"mouseenter")(()=>jw.onMouseEnter(this))),this._register(Ed(this.el,"mouseleave")(()=>jw.onMouseLeave(this))),this._register(Fg.addTarget(this.el)),this._register(Ed(this.el,Pg.Start)(this.onTouchStart,this)),"number"==typeof i.size?(this.size=i.size,0===i.orientation?this.el.style.width=`${this.size}px`:this.el.style.height=`${this.size}px`):(this.size=Kw,this._register($w.event(e=>{this.size=e,this.layout()}))),this.hidden=!1,this.layoutProvider=t,this.orthogonalStartSash=i.orthogonalStartSash,this.orthogonalEndSash=i.orthogonalEndSash,this.orientation=i.orientation||0,1===this.orientation?(this.el.classList.add("horizontal"),this.el.classList.remove("vertical")):(this.el.classList.remove("horizontal"),this.el.classList.add("vertical")),this.el.classList.toggle("debug",Hw),this.layout()}get state(){return this._state}set state(e){this._state!==e&&(this.el.classList.toggle("disabled",0===e),this.el.classList.toggle("minimum",1===e),this.el.classList.toggle("maximum",2===e),this._state=e,this._onDidEnablementChange.fire(e))}get orthogonalStartSash(){return this._orthogonalStartSash}set orthogonalStartSash(e){if(this.orthogonalStartDragHandleDisposables.clear(),this.orthogonalStartSashDisposables.clear(),e){const t=t=>{this.orthogonalStartDragHandleDisposables.clear(),0!==t&&(this._orthogonalStartDragHandle=Mu(this.el,Bu(".orthogonal-drag-handle.start")),this.orthogonalStartDragHandleDisposables.add(b(()=>this._orthogonalStartDragHandle.remove())),Ed(this._orthogonalStartDragHandle,"mouseenter")(()=>jw.onMouseEnter(e),void 0,this.orthogonalStartDragHandleDisposables),Ed(this._orthogonalStartDragHandle,"mouseleave")(()=>jw.onMouseLeave(e),void 0,this.orthogonalStartDragHandleDisposables))};this.orthogonalStartSashDisposables.add(e.onDidEnablementChange(t,this)),t(e.state)}this._orthogonalStartSash=e}get orthogonalEndSash(){return this._orthogonalEndSash}set orthogonalEndSash(e){if(this.orthogonalEndDragHandleDisposables.clear(),this.orthogonalEndSashDisposables.clear(),e){const t=t=>{this.orthogonalEndDragHandleDisposables.clear(),0!==t&&(this._orthogonalEndDragHandle=Mu(this.el,Bu(".orthogonal-drag-handle.end")),this.orthogonalEndDragHandleDisposables.add(b(()=>this._orthogonalEndDragHandle.remove())),Ed(this._orthogonalEndDragHandle,"mouseenter")(()=>jw.onMouseEnter(e),void 0,this.orthogonalEndDragHandleDisposables),Ed(this._orthogonalEndDragHandle,"mouseleave")(()=>jw.onMouseLeave(e),void 0,this.orthogonalEndDragHandleDisposables))};this.orthogonalEndSashDisposables.add(e.onDidEnablementChange(t,this)),t(e.state)}this._orthogonalEndSash=e}onMouseDown(e){Iu.stop(e,!1);let t=!1;if(!e.__orthogonalSashEvent){const i=this.getOrthogonalSash(e);i&&(t=!0,e.__orthogonalSashEvent=!0,i.onMouseDown(e))}if(this.linkedSash&&!e.__linkedSashEvent&&(e.__linkedSashEvent=!0,this.linkedSash.onMouseDown(e)),!this.state)return;const i=[...zu("iframe"),...zu("webview")];for(const e of i)e.style.pointerEvents="none";const n=new Vd(e),o=n.posx,s=n.posy,r=n.altKey,a={startX:o,currentX:o,startY:s,currentY:s,altKey:r};this.el.classList.add("active"),this._onDidStart.fire(a);const l=Su(this.el),h=()=>{let e="";l.textContent=`* { cursor: ${e=t?"all-scroll":1===this.orientation?1===this.state?"s-resize":2===this.state?"n-resize":H?"row-resize":"ns-resize":1===this.state?"e-resize":2===this.state?"w-resize":H?"col-resize":"ew-resize"} !important; }`},c=new v;h(),t||this.onDidEnablementChange(h,null,c),Ed(window,"mousemove")(e=>{Iu.stop(e,!1);const t=new Vd(e);this._onDidChange.fire({startX:o,currentX:t.posx,startY:s,currentY:t.posy,altKey:r})},null,c),Ed(window,"mouseup")(e=>{Iu.stop(e,!1),this.el.removeChild(l),this.el.classList.remove("active"),this._onDidEnd.fire(),c.dispose();for(const e of i)e.style.pointerEvents="auto"},null,c)}onMouseDoubleClick(e){const t=this.getOrthogonalSash(e);t&&t._onDidReset.fire(),this.linkedSash&&this.linkedSash._onDidReset.fire(),this._onDidReset.fire()}onTouchStart(e){Iu.stop(e);const t=[],i=e.pageX,n=e.pageY,o=e.altKey;this._onDidStart.fire({startX:i,currentX:i,startY:n,currentY:n,altKey:o}),t.push(jd(this.el,Pg.Change,e=>{De(e.pageX)&&De(e.pageY)&&this._onDidChange.fire({startX:i,currentX:e.pageX,startY:n,currentY:e.pageY,altKey:o})})),t.push(jd(this.el,Pg.End,()=>{this._onDidEnd.fire(),f(t)}))}static onMouseEnter(e,t=!1){e.el.classList.contains("active")?(e.hoverDelayer.cancel(),e.el.classList.add("hover")):e.hoverDelayer.trigger(()=>e.el.classList.add("hover")),!t&&e.linkedSash&&jw.onMouseEnter(e.linkedSash,!0)}static onMouseLeave(e,t=!1){e.hoverDelayer.cancel(),e.el.classList.remove("hover"),!t&&e.linkedSash&&jw.onMouseLeave(e.linkedSash,!0)}layout(){if(0===this.orientation){const e=this.layoutProvider;this.el.style.left=e.getVerticalSashLeft(this)-this.size/2+"px",e.getVerticalSashTop&&(this.el.style.top=e.getVerticalSashTop(this)+"px"),e.getVerticalSashHeight&&(this.el.style.height=e.getVerticalSashHeight(this)+"px")}else{const e=this.layoutProvider;this.el.style.top=e.getHorizontalSashTop(this)-this.size/2+"px",e.getHorizontalSashLeft&&(this.el.style.left=e.getHorizontalSashLeft(this)+"px"),e.getHorizontalSashWidth&&(this.el.style.width=e.getHorizontalSashWidth(this)+"px")}}hide(){this.hidden=!0,this.el.style.display="none",this.el.setAttribute("aria-hidden","true")}getOrthogonalSash(e){if(e.target&&e.target instanceof HTMLElement)return e.target.classList.contains("orthogonal-drag-handle")?e.target.classList.contains("start")?this.orthogonalStartSash:this.orthogonalEndSash:void 0}dispose(){super.dispose(),this.el.remove()}}class qw{constructor(e,t=[],i=!1){this.ctor=e,this.staticArguments=t,this.supportsDelayedInstantiation=i}}const Gw=[];function Yw(e,t,i){t instanceof qw||(t=new qw(t,[],i)),Gw.push([e,t])}const Zw=kt("IEditorCancelService"),Xw=new Ji("cancellableOperation",!1,t(0,"Whether the editor runs a cancellable operation, e.g. like 'Peek References'"));Yw(Zw,class{constructor(){this._tokens=new WeakMap}add(e,t){let i,n=this._tokens.get(e);return n||(n=e.invokeWithinContext(e=>({key:Xw.bindTo(e.get(en)),tokens:new L})),this._tokens.set(e,n)),n.key.set(!0),i=n.tokens.push(t),()=>{i&&(i(),n.key.set(!n.tokens.isEmpty()),i=void 0)}}cancel(e){const t=this._tokens.get(e);if(!t)return;const i=t.tokens.pop();i&&(i.cancel(),t.key.set(!t.tokens.isEmpty()))}},!0);class Qw extends Oa{constructor(e,t){super(t),this.editor=e,this._unregister=e.invokeWithinContext(t=>t.get(Zw).add(e,this))}dispose(){this._unregister(),super.dispose()}}Xn(new class extends Gn{constructor(){super({id:"editor.cancelOperation",kbOpts:{weight:100,primary:9},precondition:Xw})}runEditorCommand(e,t){e.get(Zw).cancel(t)}});class Jw{constructor(e,t){if(this.flags=t,0!=(1&this.flags)){const t=e.getModel();this.modelVersionId=t?Ut("{0}#{1}",t.uri.toString(),t.getVersionId()):null}else this.modelVersionId=null;this.position=0!=(4&this.flags)?e.getPosition():null,this.selection=0!=(2&this.flags)?e.getSelection():null,0!=(8&this.flags)?(this.scrollLeft=e.getScrollLeft(),this.scrollTop=e.getScrollTop()):(this.scrollLeft=-1,this.scrollTop=-1)}_equals(e){if(!(e instanceof Jw))return!1;const t=e;return this.modelVersionId===t.modelVersionId&&this.scrollLeft===t.scrollLeft&&this.scrollTop===t.scrollTop&&!(!this.position&&t.position||this.position&&!t.position||this.position&&t.position&&!this.position.equals(t.position))&&!(!this.selection&&t.selection||this.selection&&!t.selection||this.selection&&t.selection&&!this.selection.equalsRange(t.selection))}validate(e){return this._equals(new Jw(e,this.flags))}}class ey extends Qw{constructor(e,t,i,n){super(e,n),this.editor=e,this._listener=new v,4&t&&this._listener.add(e.onDidChangeCursorPosition(e=>{i&&ro.containsPosition(i,e.position)||this.cancel()})),2&t&&this._listener.add(e.onDidChangeCursorSelection(e=>{i&&ro.containsRange(i,e.selection)||this.cancel()})),8&t&&this._listener.add(e.onDidScrollChange(e=>this.cancel())),1&t&&(this._listener.add(e.onDidChangeModel(e=>this.cancel())),this._listener.add(e.onDidChangeModelContent(e=>this.cancel())))}dispose(){this._listener.dispose(),super.dispose()}}class ty extends Oa{constructor(e,t){super(t),this._listener=e.onDidChangeContent(()=>this.cancel())}dispose(){this._listener.dispose(),super.dispose()}}class iy{constructor(e,t,i){this._visiblePosition=e,this._visiblePositionScrollDelta=t,this._cursorPosition=i}static capture(e){let t=null,i=0;if(0!==e.getScrollTop()){const n=e.getVisibleRanges();if(n.length>0){t=n[0].getStartPosition();const o=e.getTopForPosition(t.lineNumber,t.column);i=e.getScrollTop()-o}}return new iy(t,i,e.getPosition())}restore(e){if(this._visiblePosition){const t=e.getTopForPosition(this._visiblePosition.lineNumber,this._visiblePosition.column);e.setScrollTop(t+this._visiblePositionScrollDelta)}}restoreRelativeVerticalPositionOfCursor(e){const t=e.getPosition();if(!this._cursorPosition||!t)return;const i=e.getTopForLineNumber(t.lineNumber)-e.getTopForLineNumber(this._cursorPosition.lineNumber);e.setScrollTop(e.getScrollTop()+i)}}const ny={RESOURCES:"ResourceURLs",DOWNLOAD_URL:"DownloadURL",FILES:"Files",TEXT:"text/plain"};class oy{constructor(e){this.data=e}update(){}getData(){return this.data}}const sy={CurrentDragAndDropData:void 0};class ry extends C{constructor(e,t,i={}){super(),this.options=i,this._context=e||this,this._action=t,t instanceof Pt&&this._register(t.onDidChange(e=>{this.element&&this.handleActionChangeEvent(e)}))}handleActionChangeEvent(e){void 0!==e.enabled&&this.updateEnabled(),void 0!==e.checked&&this.updateChecked(),void 0!==e.class&&this.updateClass(),void 0!==e.label&&(this.updateLabel(),this.updateTooltip()),void 0!==e.tooltip&&this.updateTooltip()}get actionRunner(){return this._actionRunner||(this._actionRunner=this._register(new Ft)),this._actionRunner}set actionRunner(e){this._actionRunner=e}getAction(){return this._action}isEnabled(){return this._action.enabled}setActionContext(e){this._context=e}render(e){const t=this.element=e;this._register(Fg.addTarget(e));const i=this.options&&this.options.draggable;i&&(e.draggable=!0,ge&&this._register(jd(e,Nu.DRAG_START,e=>{var t;return null===(t=e.dataTransfer)||void 0===t?void 0:t.setData(ny.TEXT,this._action.label)}))),this._register(jd(t,Pg.Tap,e=>this.onClick(e))),this._register(jd(t,Nu.MOUSE_DOWN,e=>{i||Iu.stop(e,!0),this._action.enabled&&0===e.button&&t.classList.add("active")})),H&&this._register(jd(t,Nu.CONTEXT_MENU,e=>{0===e.button&&!0===e.ctrlKey&&this.onClick(e)})),this._register(jd(t,Nu.CLICK,e=>{Iu.stop(e,!0),this.options&&this.options.isMenu||Y(()=>this.onClick(e))})),this._register(jd(t,Nu.DBLCLICK,e=>{Iu.stop(e,!0)})),[Nu.MOUSE_UP,Nu.MOUSE_OUT].forEach(e=>{this._register(jd(t,e,e=>{Iu.stop(e),t.classList.remove("active")}))})}onClick(e){var t;Iu.stop(e,!0);const i=ke(this._context)?(null===(t=this.options)||void 0===t?void 0:t.useEventAsContext)?e:void 0:this._context;this.actionRunner.run(this._action,i)}focus(){this.element&&(this.element.tabIndex=0,this.element.focus(),this.element.classList.add("focused"))}blur(){this.element&&(this.element.blur(),this.element.tabIndex=-1,this.element.classList.remove("focused"))}setFocusable(e){this.element&&(this.element.tabIndex=e?0:-1)}get trapsArrowNavigation(){return!1}updateEnabled(){}updateLabel(){}updateTooltip(){}updateClass(){}updateChecked(){}dispose(){this.element&&(this.element.remove(),this.element=void 0),super.dispose()}}class ay extends ry{constructor(e,t,i={}){super(e,t,i),this.options=i,this.options.icon=void 0!==i.icon&&i.icon,this.options.label=void 0===i.label||i.label,this.cssClass=""}render(e){super.render(e),this.element&&(this.label=Mu(this.element,Bu("a.action-label"))),this.label&&this.label.setAttribute("role",this._action.id===Bt.ID?"presentation":this.options.isMenu?"menuitem":"button"),this.options.label&&this.options.keybinding&&this.element&&(Mu(this.element,Bu("span.keybinding")).textContent=this.options.keybinding),this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked()}focus(){this.label&&(this.label.tabIndex=0,this.label.focus())}blur(){this.label&&(this.label.tabIndex=-1)}setFocusable(e){this.label&&(this.label.tabIndex=e?0:-1)}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this.getAction().label)}updateTooltip(){let e=null;this.getAction().tooltip?e=this.getAction().tooltip:!this.options.label&&this.getAction().label&&this.options.icon&&(e=this.getAction().label,this.options.keybinding&&(e=t(0,"{0} ({1})",e,this.options.keybinding))),e&&this.label&&(this.label.title=e)}updateClass(){this.cssClass&&this.label&&this.label.classList.remove(...this.cssClass.split(" ")),this.options.icon?(this.cssClass=this.getAction().class,this.label&&(this.label.classList.add("codicon"),this.cssClass&&this.label.classList.add(...this.cssClass.split(" "))),this.updateEnabled()):this.label&&this.label.classList.remove("codicon")}updateEnabled(){this.getAction().enabled?(this.label&&(this.label.removeAttribute("aria-disabled"),this.label.classList.remove("disabled")),this.element&&this.element.classList.remove("disabled")):(this.label&&(this.label.setAttribute("aria-disabled","true"),this.label.classList.add("disabled")),this.element&&this.element.classList.add("disabled"))}updateChecked(){this.label&&(this.getAction().checked?this.label.classList.add("checked"):this.label.classList.remove("checked"))}}class ly extends C{constructor(e,t={}){var i,n,o,s,r,a;let l,h;switch(super(),this.triggerKeyDown=!1,this.focusable=!0,this._onDidBlur=this._register(new oe),this.onDidBlur=this._onDidBlur.event,this._onDidCancel=this._register(new oe({onFirstListenerAdd:()=>this.cancelHasListener=!0})),this.onDidCancel=this._onDidCancel.event,this.cancelHasListener=!1,this._onDidRun=this._register(new oe),this.onDidRun=this._onDidRun.event,this._onBeforeRun=this._register(new oe),this.onBeforeRun=this._onBeforeRun.event,this.options=t,this._context=null!==(i=t.context)&&void 0!==i?i:null,this._orientation=null!==(n=this.options.orientation)&&void 0!==n?n:0,this._triggerKeys={keyDown:null!==(s=null===(o=this.options.triggerKeys)||void 0===o?void 0:o.keyDown)&&void 0!==s&&s,keys:null!==(a=null===(r=this.options.triggerKeys)||void 0===r?void 0:r.keys)&&void 0!==a?a:[3,10]},this.options.actionRunner?this._actionRunner=this.options.actionRunner:(this._actionRunner=new Ft,this._register(this._actionRunner)),this._register(this._actionRunner.onDidRun(e=>this._onDidRun.fire(e))),this._register(this._actionRunner.onBeforeRun(e=>this._onBeforeRun.fire(e))),this._actionIds=[],this.viewItems=[],this.focusedItem=void 0,this.domNode=document.createElement("div"),this.domNode.className="monaco-action-bar",!1!==t.animated&&this.domNode.classList.add("animated"),this._orientation){case 0:l=[15],h=[17];break;case 1:l=[17],h=[15],this.domNode.className+=" reverse";break;case 2:l=[16],h=[18],this.domNode.className+=" vertical";break;case 3:l=[18],h=[16],this.domNode.className+=" vertical reverse"}this._register(jd(this.domNode,Nu.KEY_DOWN,e=>{const t=new Rd(e);let i=!0;const n="number"==typeof this.focusedItem?this.viewItems[this.focusedItem]:void 0;l&&(t.equals(l[0])||t.equals(l[1]))?i=this.focusPrevious():h&&(t.equals(h[0])||t.equals(h[1]))?i=this.focusNext():t.equals(9)&&this.cancelHasListener?this._onDidCancel.fire():t.equals(2)&&n instanceof ry&&n.trapsArrowNavigation?this.focusNext():this.isTriggerKeyEvent(t)?this._triggerKeys.keyDown?this.doTrigger(t):this.triggerKeyDown=!0:i=!1,i&&(t.preventDefault(),t.stopPropagation())})),this._register(jd(this.domNode,Nu.KEY_UP,e=>{const t=new Rd(e);this.isTriggerKeyEvent(t)?(!this._triggerKeys.keyDown&&this.triggerKeyDown&&(this.triggerKeyDown=!1,this.doTrigger(t)),t.preventDefault(),t.stopPropagation()):(t.equals(2)||t.equals(1026))&&this.updateFocusedItem()})),this.focusTracker=this._register(Au(this.domNode)),this._register(this.focusTracker.onDidBlur(()=>{yu()!==this.domNode&&fu(yu(),this.domNode)||(this._onDidBlur.fire(),this.focusedItem=void 0,this.triggerKeyDown=!1)})),this._register(this.focusTracker.onDidFocus(()=>this.updateFocusedItem())),this.actionsList=document.createElement("ul"),this.actionsList.className="actions-container",this.actionsList.setAttribute("role","toolbar"),this.options.ariaLabel&&this.actionsList.setAttribute("aria-label",this.options.ariaLabel),this.domNode.appendChild(this.actionsList),e.appendChild(this.domNode)}isTriggerKeyEvent(e){let t=!1;return this._triggerKeys.keys.forEach(i=>{t=t||e.equals(i)}),t}updateFocusedItem(){for(let e=0;et.setActionContext(e))}get actionRunner(){return this._actionRunner}set actionRunner(e){e&&(this._actionRunner=e,this.viewItems.forEach(t=>t.actionRunner=e))}getContainer(){return this.domNode}push(e,t={}){const i=Array.isArray(e)?e:[e];let n=De(t.index)?t.index:null;i.forEach(e=>{const i=document.createElement("li");let o;i.className="action-item",i.setAttribute("role","presentation"),this.options.allowContextMenu||this._register(jd(i,Nu.CONTEXT_MENU,e=>{Iu.stop(e,!0)})),this.options.actionViewItemProvider&&(o=this.options.actionViewItemProvider(e)),o||(o=new ay(this.context,e,t)),o.actionRunner=this._actionRunner,o.setActionContext(this.context),o.render(i),this.focusable&&o instanceof ry&&0===this.viewItems.length&&o.setFocusable(!0),null===n||n<0||n>=this.actionsList.children.length?(this.actionsList.appendChild(i),this.viewItems.push(o),this._actionIds.push(e.id)):(this.actionsList.insertBefore(i,this.actionsList.children[n]),this.viewItems.splice(n,0,o),this._actionIds.splice(n,0,e.id),n++)}),"number"==typeof this.focusedItem&&this.focus(this.focusedItem)}clear(){f(this.viewItems),this.viewItems=[],this._actionIds=[],Ud(this.actionsList)}focus(e){let t=!1,i=void 0;if(void 0===e?t=!0:"number"==typeof e?i=e:"boolean"==typeof e&&(t=e),t&&void 0===this.focusedItem){const e=this.viewItems.findIndex(e=>e.isEnabled());this.focusedItem=-1===e?void 0:e,this.updateFocus()}else void 0!==i&&(this.focusedItem=i),this.updateFocus()}focusNext(){void 0===this.focusedItem&&(this.focusedItem=this.viewItems.length-1);const e=this.focusedItem;let t;do{if(this.options.preventLoopNavigation&&this.focusedItem+1>=this.viewItems.length)return this.focusedItem=e,!1;this.focusedItem=(this.focusedItem+1)%this.viewItems.length,t=this.viewItems[this.focusedItem]}while(this.focusedItem!==e&&this.options.focusOnlyEnabledItems&&!t.isEnabled());return this.updateFocus(),!0}focusPrevious(){void 0===this.focusedItem&&(this.focusedItem=0);const e=this.focusedItem;let t;do{if(this.focusedItem=this.focusedItem-1,this.focusedItem<0){if(this.options.preventLoopNavigation)return this.focusedItem=e,!1;this.focusedItem=this.viewItems.length-1}t=this.viewItems[this.focusedItem]}while(this.focusedItem!==e&&this.options.focusOnlyEnabledItems&&!t.isEnabled());return this.updateFocus(!0),!0}updateFocus(e,t){void 0===this.focusedItem&&this.actionsList.focus({preventScroll:t});for(let i=0;ithis.iconsById[e])}getIcon(e){return this.iconsById[e]}getIconSchema(){return this.iconSchema}getIconFont(e){return this.iconFontsById[e]}toString(){const e=(e,t)=>e.id.localeCompare(t.id),t=e=>{for(;fn.isThemeIcon(e.defaults);)e=this.iconsById[e.defaults.id];return`codicon codicon-${e?e.id:""}`};let i=[];i.push("| preview | identifier | default codicon ID | description"),i.push("| ----------- | --------------------------------- | --------------------------------- | --------------------------------- |");const n=Object.keys(this.iconsById).map(e=>this.iconsById[e]);for(const o of n.filter(e=>!!e.description).sort(e))i.push(`||${o.id}|${fn.isThemeIcon(o.defaults)?o.defaults.id:o.id}|${o.description||""}|`);i.push("| preview | identifier "),i.push("| ----------- | --------------------------------- |");for(const o of n.filter(e=>!fn.isThemeIcon(e.defaults)).sort(e))i.push(`||${o.id}|`);return i.join("\n")}};function cy(e,t,i,n){return hy.registerIcon(e,t,i,n)}an.add("base.contributions.icons",hy),function dy(){for(const e of cn.all)hy.registerIcon(e.id,e.definition,e.description);cn.onDidRegister(e=>hy.registerIcon(e.id,e.definition,e.description))}();let uy=an.as("base.contributions.json");uy.registerSchema("vscode://schemas/icons",hy.getIconSchema());const gy=new $a(()=>uy.notifySchemaChanged("vscode://schemas/icons"),200);var py;hy.onDidChange(()=>{gy.isScheduled()||gy.schedule()}),cy("widget-close",un.close,t(0,"Icon for the close action in widgets."));const my=3;class fy{constructor(e,t,i,n){this.originalLineStart=e,this.originalLineEnd=t,this.modifiedLineStart=i,this.modifiedLineEnd=n}getType(){return 0===this.originalLineStart?1:0===this.modifiedLineStart?2:0}}class _y{constructor(e){this.entries=e}}const by=cy("diff-review-insert",un.add,t(0,"Icon for 'Insert' in diff review.")),vy=cy("diff-review-remove",un.remove,t(0,"Icon for 'Remove' in diff review.")),Cy=cy("diff-review-close",un.close,t(0,"Icon for 'Close' in diff review."));class wy extends C{constructor(e){super(),this._width=0,this._diffEditor=e,this._isVisible=!1,this.shadow=Mg(document.createElement("div")),this.shadow.setClassName("diff-review-shadow"),this.actionBarContainer=Mg(document.createElement("div")),this.actionBarContainer.setClassName("diff-review-actions"),this._actionBar=this._register(new ly(this.actionBarContainer.domNode)),this._actionBar.push(new Pt("diffreview.close",t(0,"Close"),"close-diff-review "+fn.asClassName(Cy),!0,()=>(this.hide(),Promise.resolve(null))),{label:!1,icon:!0}),this.domNode=Mg(document.createElement("div")),this.domNode.setClassName("diff-review monaco-editor-background"),this._content=Mg(document.createElement("div")),this._content.setClassName("diff-review-content"),this._content.setAttribute("role","code"),this.scrollbar=this._register(new Kb(this._content.domNode,{})),this.domNode.domNode.appendChild(this.scrollbar.getDomNode()),this._register(e.onDidUpdateDiff(()=>{this._isVisible&&(this._diffs=this._compute(),this._render())})),this._register(e.getModifiedEditor().onDidChangeCursorPosition(()=>{this._isVisible&&this._render()})),this._register(Gd(this.domNode.domNode,"click",e=>{e.preventDefault();let t=_u(e.target,"diff-review-row");t&&this._goToRow(t)})),this._register(Gd(this.domNode.domNode,"keydown",e=>{(e.equals(18)||e.equals(2066)||e.equals(530))&&(e.preventDefault(),this._goToRow(this._getNextRow())),(e.equals(16)||e.equals(2064)||e.equals(528))&&(e.preventDefault(),this._goToRow(this._getPrevRow())),(e.equals(9)||e.equals(2057)||e.equals(521)||e.equals(1033))&&(e.preventDefault(),this.hide()),(e.equals(10)||e.equals(3))&&(e.preventDefault(),this.accept())})),this._diffs=[],this._currentDiff=null}prev(){let e=0;if(this._isVisible||(this._diffs=this._compute()),this._isVisible){let t=-1;for(let e=0,i=this._diffs.length;e0){const t=e[s-1];n=0===t.originalEndLineNumber?t.originalStartLineNumber+1:t.originalEndLineNumber+1,o=0===t.modifiedEndLineNumber?t.modifiedStartLineNumber+1:t.modifiedEndLineNumber+1}let r=t-my+1,a=i-my+1;if(ra){const e=a-m;m+=e,f+=e}if(f>p){const e=p-f;m+=e,f+=e}u[g++]=new fy(n,m,o,f)}n[o++]=new _y(u)}let s=n[0].entries,r=[],a=0;for(let e=1,t=n.length;ed)&&(d=n),0!==o&&(0===u||og)&&(g=s)}let p=document.createElement("div");p.className="diff-review-row";let m=document.createElement("div");m.className="diff-review-cell diff-review-summary";const f=d-c+1,_=g-u+1;m.appendChild(document.createTextNode(`${a+1}/${this._diffs.length}: @@ -${c},${f} +${u},${_} @@`)),p.setAttribute("data-line",String(u));const b=e=>0===e?t(0,"no lines changed"):1===e?t(0,"1 line changed"):t(0,"{0} lines changed",e),v=b(f),C=b(_);p.setAttribute("aria-label",t(0,"Difference {0} of {1}: original line {2}, {3}, modified line {4}, {5}",a+1,this._diffs.length,c,v,u,C)),p.appendChild(m),p.setAttribute("role","listitem"),h.appendChild(p);const w=i.get(54);let y=u;for(let t=0,a=l.length;te}),Cn((e,t)=>{const i=e.getColor(I_);i&&t.addRule(`.monaco-diff-editor .diff-review-line-number { color: ${i}; }`);const n=e.getColor(Nm);n&&t.addRule(`.monaco-diff-editor .diff-review-shadow { box-shadow: ${n} 0 -6px 6px -6px inset; }`)}),Qn(class extends Yn{constructor(){super({id:"editor.action.diffReview.next",label:t(0,"Go to Next Difference"),alias:"Go to Next Difference",precondition:Ri.has("isInDiffEditor"),kbOpts:{kbExpr:null,primary:65,weight:100}})}run(e,t){const i=yy(e);i&&i.diffReviewNext()}}),Qn(class extends Yn{constructor(){super({id:"editor.action.diffReview.prev",label:t(0,"Go to Previous Difference"),alias:"Go to Previous Difference",precondition:Ri.has("isInDiffEditor"),kbOpts:{kbExpr:null,primary:1089,weight:100}})}run(e,t){const i=yy(e);i&&i.diffReviewPrev()}});const Sy=kt("editorWorkerService"),Ly=kt("contextViewService"),Dy=kt("contextMenuService");var Ey=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class xy extends C{constructor(e,i,n,o,s,r){super(),this._viewZoneId=e,this._marginDomNode=i,this.editor=n,this.diff=o,this._contextMenuService=s,this._clipboardService=r,this._visibility=!1,this._marginDomNode.style.zIndex="10",this._diffActions=document.createElement("div"),this._diffActions.className=un.lightBulb.classNames+" lightbulb-glyph",this._diffActions.style.position="absolute";const a=n.getOption(54),l=n.getModel().getEOL();this._diffActions.style.right="0px",this._diffActions.style.visibility="hidden",this._diffActions.style.height=`${a}px`,this._diffActions.style.lineHeight=`${a}px`,this._marginDomNode.appendChild(this._diffActions);const h=[];h.push(new Pt("diff.clipboard.copyDeletedContent",t(0,o.originalEndLineNumber>o.modifiedStartLineNumber?"Copy deleted lines":"Copy deleted line"),void 0,!0,()=>Ey(this,void 0,void 0,(function*(){const e=new ro(o.originalStartLineNumber,1,o.originalEndLineNumber+1,1),t=o.originalModel.getValueInRange(e);yield this._clipboardService.writeText(t)}))));let c=0,d=void 0;o.originalEndLineNumber>o.modifiedStartLineNumber&&(d=new Pt("diff.clipboard.copyDeletedLineContent",t(0,"Copy deleted line ({0})",o.originalStartLineNumber),void 0,!0,()=>Ey(this,void 0,void 0,(function*(){const e=o.originalModel.getLineContent(o.originalStartLineNumber+c);yield this._clipboardService.writeText(e)}))),h.push(d)),n.getOption(77)||h.push(new Pt("diff.inline.revertChange",t(0,"Revert this change"),void 0,!0,()=>Ey(this,void 0,void 0,(function*(){const e=new ro(o.originalStartLineNumber,1,o.originalEndLineNumber,o.originalModel.getLineMaxColumn(o.originalEndLineNumber)),t=o.originalModel.getValueInRange(e);if(0===o.modifiedEndLineNumber){const e=n.getModel().getLineMaxColumn(o.modifiedStartLineNumber);n.executeEdits("diffEditor",[{range:new ro(o.modifiedStartLineNumber,e,o.modifiedStartLineNumber,e),text:l+t}])}else{const e=n.getModel().getLineMaxColumn(o.modifiedEndLineNumber);n.executeEdits("diffEditor",[{range:new ro(o.modifiedStartLineNumber,1,o.modifiedEndLineNumber,e),text:t}])}}))));const u=(e,i)=>{this._contextMenuService.showContextMenu({getAnchor:()=>({x:e,y:i}),getActions:()=>(d&&(d.label=t(0,"Copy deleted line ({0})",o.originalStartLineNumber+c)),h),autoSelectFirstItem:!0})};this._register(Gd(this._diffActions,"mousedown",e=>{const{top:t,height:i}=cu(this._diffActions);let n=Math.floor(a/3);e.preventDefault(),u(e.posx,t+i+n)})),this._register(n.onMouseMove(e=>{8!==e.target.type&&5!==e.target.type||e.target.detail.viewZoneId!==this._viewZoneId?this.visibility=!1:(this.visibility=!0,c=this._updateLightBulbPosition(this._marginDomNode,e.event.browserEvent.y,a))})),this._register(n.onMouseDown(e=>{!e.event.rightButton||8!==e.target.type&&5!==e.target.type||e.target.detail.viewZoneId===this._viewZoneId&&(e.event.preventDefault(),c=this._updateLightBulbPosition(this._marginDomNode,e.event.browserEvent.y,a),u(e.event.posx,e.event.posy+a))}))}get visibility(){return this._visibility}set visibility(e){this._visibility!==e&&(this._visibility=e,this._diffActions.style.visibility=e?"visible":"hidden")}_updateLightBulbPosition(e,t,i){const{top:n}=cu(e),o=Math.floor((t-n)/i);if(this._diffActions.style.top=`${o*i}px`,this.diff.viewLineCounts){let e=0;for(let t=0;t!this._zonesMap[String(e.id)])}clean(e){this._zones.length>0&&e.changeViewZones(e=>{for(const t of this._zones)e.removeZone(t)}),this._zones=[],this._zonesMap={},this._decorations=e.deltaDecorations(this._decorations,[])}apply(e,t,i,n){const o=n?iy.capture(e):null;e.changeViewZones(t=>{for(const e of this._zones)t.removeZone(e);for(const e of this._inlineDiffMargins)e.dispose();this._zones=[],this._zonesMap={},this._inlineDiffMargins=[];for(let n=0,o=i.zones.length;ne});let By=class e extends C{constructor(t,i,o,s,r,a,l,h,c,d,u,g){super(),this._editorProgressService=g,this._onDidDispose=this._register(new oe),this.onDidDispose=this._onDidDispose.event,this._onDidUpdateDiff=this._register(new oe),this.onDidUpdateDiff=this._onDidUpdateDiff.event,this._onDidContentSizeChange=this._register(new oe),this._lastOriginalWarning=null,this._lastModifiedWarning=null,this._editorWorkerService=r,this._codeEditorService=h,this._contextKeyService=this._register(a.createScoped(t)),this._instantiationService=l.createChild(new aw([en,this._contextKeyService])),this._contextKeyService.createKey("isInDiffEditor",!0),this._themeService=c,this._notificationService=d,this._id=++Oy,this._state=0,this._updatingDiffProgress=null,this._domElement=t,i=i||{},this._renderSideBySide=!0,void 0!==i.renderSideBySide&&(this._renderSideBySide=i.renderSideBySide),this._maxComputationTime=5e3,void 0!==i.maxComputationTime&&(this._maxComputationTime=i.maxComputationTime),this._ignoreTrimWhitespace=!0,void 0!==i.ignoreTrimWhitespace&&(this._ignoreTrimWhitespace=i.ignoreTrimWhitespace),this._renderIndicators=!0,void 0!==i.renderIndicators&&(this._renderIndicators=i.renderIndicators),this._originalIsEditable=yo(i.originalEditable,!1),this._diffCodeLens=yo(i.diffCodeLens,!1),this._diffWordWrap=Gy(i.diffWordWrap,"inherit"),this._contextKeyService.createKey("isInEmbeddedDiffEditor",void 0!==i.isInEmbeddedEditor&&i.isInEmbeddedEditor),this._renderOverviewRuler=!0,void 0!==i.renderOverviewRuler&&(this._renderOverviewRuler=Boolean(i.renderOverviewRuler)),this._updateDecorationsRunner=this._register(new $a(()=>this._updateDecorations(),0)),this._containerDomElement=document.createElement("div"),this._containerDomElement.className=e._getClassName(this._themeService.getColorTheme(),this._renderSideBySide),this._containerDomElement.style.position="relative",this._containerDomElement.style.height="100%",this._domElement.appendChild(this._containerDomElement),this._overviewViewportDomElement=Mg(document.createElement("div")),this._overviewViewportDomElement.setClassName("diffViewport"),this._overviewViewportDomElement.setPosition("absolute"),this._overviewDomElement=document.createElement("div"),this._overviewDomElement.className="diffOverview",this._overviewDomElement.style.position="absolute",this._overviewDomElement.appendChild(this._overviewViewportDomElement.domNode),this._register(Gd(this._overviewDomElement,"mousedown",e=>{this._modifiedEditor.delegateVerticalScrollbarMouseDown(e)})),this._renderOverviewRuler&&this._containerDomElement.appendChild(this._overviewDomElement),this._originalDomNode=document.createElement("div"),this._originalDomNode.className="editor original",this._originalDomNode.style.position="absolute",this._originalDomNode.style.height="100%",this._containerDomElement.appendChild(this._originalDomNode),this._modifiedDomNode=document.createElement("div"),this._modifiedDomNode.className="editor modified",this._modifiedDomNode.style.position="absolute",this._modifiedDomNode.style.height="100%",this._containerDomElement.appendChild(this._modifiedDomNode),this._beginUpdateDecorationsTimeout=-1,this._currentlyChangingViewZones=!1,this._diffComputationToken=0,this._originalEditorState=new My(u,s),this._modifiedEditorState=new My(u,s),this._isVisible=!0,this._isHandlingScrollEvent=!1,this._elementSizeObserver=this._register(new Yu(this._containerDomElement,i.dimension,()=>this._onDidContainerSizeChanged())),i.automaticLayout&&this._elementSizeObserver.startObserving(),this._diffComputationResult=null,this._originalEditor=this._createLeftHandSideEditor(i,o.originalEditor||{}),this._modifiedEditor=this._createRightHandSideEditor(i,o.modifiedEditor||{}),this._originalOverviewRuler=null,this._modifiedOverviewRuler=null,this._reviewPane=new wy(this),this._containerDomElement.appendChild(this._reviewPane.domNode.domNode),this._containerDomElement.appendChild(this._reviewPane.shadow.domNode),this._containerDomElement.appendChild(this._reviewPane.actionBarContainer.domNode),this._enableSplitViewResizing=!0,void 0!==i.enableSplitViewResizing&&(this._enableSplitViewResizing=i.enableSplitViewResizing),this._setStrategy(this._renderSideBySide?new Ky(this._createDataSource(),this._enableSplitViewResizing):new jy(this._createDataSource(),this._enableSplitViewResizing)),this._register(c.onDidColorThemeChange(t=>{this._strategy&&this._strategy.applyColors(t)&&this._updateDecorationsRunner.schedule(),this._containerDomElement.className=e._getClassName(this._themeService.getColorTheme(),this._renderSideBySide)}));const p=eo.getDiffEditorContributions();for(const e of p)try{this._register(l.createInstance(e.ctor,this))}catch(e){n(e)}this._codeEditorService.addDiffEditor(this)}_setState(e){this._state!==e&&(this._state=e,this._updatingDiffProgress&&(this._updatingDiffProgress.done(),this._updatingDiffProgress=null),1===this._state&&(this._updatingDiffProgress=this._editorProgressService.show(!0,1e3)))}diffReviewNext(){this._reviewPane.next()}diffReviewPrev(){this._reviewPane.prev()}static _getClassName(e,t){let i="monaco-diff-editor monaco-editor-background ";return t&&(i+="side-by-side "),i+bn(e.type)}_recreateOverviewRulers(){this._renderOverviewRuler&&(this._originalOverviewRuler&&(this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()),this._originalOverviewRuler.dispose()),this._originalEditor.hasModel()&&(this._originalOverviewRuler=this._originalEditor.createOverviewRuler("original diffOverviewRuler"),this._overviewDomElement.appendChild(this._originalOverviewRuler.getDomNode())),this._modifiedOverviewRuler&&(this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()),this._modifiedOverviewRuler.dispose()),this._modifiedEditor.hasModel()&&(this._modifiedOverviewRuler=this._modifiedEditor.createOverviewRuler("modified diffOverviewRuler"),this._overviewDomElement.appendChild(this._modifiedOverviewRuler.getDomNode())),this._layoutOverviewRulers())}_createLeftHandSideEditor(t,i){const n=this._createInnerEditor(this._instantiationService,this._originalDomNode,this._adjustOptionsForLeftHandSide(t),i);this._register(n.onDidScrollChange(e=>{this._isHandlingScrollEvent||(e.scrollTopChanged||e.scrollLeftChanged||e.scrollHeightChanged)&&(this._isHandlingScrollEvent=!0,this._modifiedEditor.setScrollPosition({scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}),this._isHandlingScrollEvent=!1,this._layoutOverviewViewport())})),this._register(n.onDidChangeViewZones(()=>{this._onViewZonesChanged()})),this._register(n.onDidChangeConfiguration(e=>{n.getModel()&&(e.hasChanged(38)&&this._updateDecorationsRunner.schedule(),e.hasChanged(130)&&(this._updateDecorationsRunner.cancel(),this._updateDecorations()))})),this._register(n.onDidChangeModelContent(()=>{this._isVisible&&this._beginUpdateDecorationsSoon()}));const o=this._contextKeyService.createKey("isInDiffLeftEditor",n.hasWidgetFocus());return this._register(n.onDidFocusEditorWidget(()=>o.set(!0))),this._register(n.onDidBlurEditorWidget(()=>o.set(!1))),this._register(n.onDidContentSizeChange(t=>{const i=this._originalEditor.getContentWidth()+this._modifiedEditor.getContentWidth()+e.ONE_OVERVIEW_WIDTH,n=Math.max(this._modifiedEditor.getContentHeight(),this._originalEditor.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:n,contentWidth:i,contentHeightChanged:t.contentHeightChanged,contentWidthChanged:t.contentWidthChanged})})),n}_createRightHandSideEditor(t,i){const n=this._createInnerEditor(this._instantiationService,this._modifiedDomNode,this._adjustOptionsForRightHandSide(t),i);this._register(n.onDidScrollChange(e=>{this._isHandlingScrollEvent||(e.scrollTopChanged||e.scrollLeftChanged||e.scrollHeightChanged)&&(this._isHandlingScrollEvent=!0,this._originalEditor.setScrollPosition({scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}),this._isHandlingScrollEvent=!1,this._layoutOverviewViewport())})),this._register(n.onDidChangeViewZones(()=>{this._onViewZonesChanged()})),this._register(n.onDidChangeConfiguration(e=>{n.getModel()&&(e.hasChanged(38)&&this._updateDecorationsRunner.schedule(),e.hasChanged(130)&&(this._updateDecorationsRunner.cancel(),this._updateDecorations()))})),this._register(n.onDidChangeModelContent(()=>{this._isVisible&&this._beginUpdateDecorationsSoon()})),this._register(n.onDidChangeModelOptions(e=>{e.tabSize&&this._updateDecorationsRunner.schedule()}));const o=this._contextKeyService.createKey("isInDiffRightEditor",n.hasWidgetFocus());return this._register(n.onDidFocusEditorWidget(()=>o.set(!0))),this._register(n.onDidBlurEditorWidget(()=>o.set(!1))),this._register(n.onDidContentSizeChange(t=>{const i=this._originalEditor.getContentWidth()+this._modifiedEditor.getContentWidth()+e.ONE_OVERVIEW_WIDTH,n=Math.max(this._modifiedEditor.getContentHeight(),this._originalEditor.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:n,contentWidth:i,contentHeightChanged:t.contentHeightChanged,contentWidthChanged:t.contentWidthChanged})})),n}_createInnerEditor(e,t,i,n){return e.createInstance(Aw,t,i,n)}dispose(){this._codeEditorService.removeDiffEditor(this),-1!==this._beginUpdateDecorationsTimeout&&(window.clearTimeout(this._beginUpdateDecorationsTimeout),this._beginUpdateDecorationsTimeout=-1),this._cleanViewZonesAndDecorations(),this._originalOverviewRuler&&(this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()),this._originalOverviewRuler.dispose()),this._modifiedOverviewRuler&&(this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()),this._modifiedOverviewRuler.dispose()),this._overviewDomElement.removeChild(this._overviewViewportDomElement.domNode),this._renderOverviewRuler&&this._containerDomElement.removeChild(this._overviewDomElement),this._containerDomElement.removeChild(this._originalDomNode),this._originalEditor.dispose(),this._containerDomElement.removeChild(this._modifiedDomNode),this._modifiedEditor.dispose(),this._strategy.dispose(),this._containerDomElement.removeChild(this._reviewPane.domNode.domNode),this._containerDomElement.removeChild(this._reviewPane.shadow.domNode),this._containerDomElement.removeChild(this._reviewPane.actionBarContainer.domNode),this._reviewPane.dispose(),this._domElement.removeChild(this._containerDomElement),this._onDidDispose.fire(),super.dispose()}getId(){return this.getEditorType()+":"+this._id}getEditorType(){return MC.IDiffEditor}getLineChanges(){return this._diffComputationResult?this._diffComputationResult.changes:null}getOriginalEditor(){return this._originalEditor}getModifiedEditor(){return this._modifiedEditor}updateOptions(t){let i=!1;void 0!==t.renderSideBySide&&this._renderSideBySide!==t.renderSideBySide&&(this._renderSideBySide=t.renderSideBySide,i=!0),void 0!==t.maxComputationTime&&(this._maxComputationTime=t.maxComputationTime,this._isVisible&&this._beginUpdateDecorationsSoon());let n=!1;void 0!==t.ignoreTrimWhitespace&&this._ignoreTrimWhitespace!==t.ignoreTrimWhitespace&&(this._ignoreTrimWhitespace=t.ignoreTrimWhitespace,n=!0),void 0!==t.renderIndicators&&this._renderIndicators!==t.renderIndicators&&(this._renderIndicators=t.renderIndicators,n=!0),n&&this._beginUpdateDecorations(),this._originalIsEditable=yo(t.originalEditable,this._originalIsEditable),this._diffCodeLens=yo(t.diffCodeLens,this._diffCodeLens),this._diffWordWrap=Gy(t.diffWordWrap,this._diffWordWrap),this._modifiedEditor.updateOptions(this._adjustOptionsForRightHandSide(t)),this._originalEditor.updateOptions(this._adjustOptionsForLeftHandSide(t)),void 0!==t.enableSplitViewResizing&&(this._enableSplitViewResizing=t.enableSplitViewResizing),this._strategy.setEnableSplitViewResizing(this._enableSplitViewResizing),i&&(this._setStrategy(this._renderSideBySide?new Ky(this._createDataSource(),this._enableSplitViewResizing):new jy(this._createDataSource(),this._enableSplitViewResizing)),this._containerDomElement.className=e._getClassName(this._themeService.getColorTheme(),this._renderSideBySide)),void 0!==t.renderOverviewRuler&&this._renderOverviewRuler!==t.renderOverviewRuler&&(this._renderOverviewRuler=t.renderOverviewRuler,this._renderOverviewRuler?this._containerDomElement.appendChild(this._overviewDomElement):this._containerDomElement.removeChild(this._overviewDomElement))}getModel(){return{original:this._originalEditor.getModel(),modified:this._modifiedEditor.getModel()}}setModel(e){if(e&&(!e.original||!e.modified))throw new Error(e.original?"DiffEditorWidget.setModel: Modified model is null":"DiffEditorWidget.setModel: Original model is null");this._cleanViewZonesAndDecorations(),this._originalEditor.setModel(e?e.original:null),this._modifiedEditor.setModel(e?e.modified:null),this._updateDecorationsRunner.cancel(),e&&(this._originalEditor.setScrollTop(0),this._modifiedEditor.setScrollTop(0)),this._diffComputationResult=null,this._diffComputationToken++,this._setState(0),e&&(this._recreateOverviewRulers(),this._beginUpdateDecorations()),this._layoutOverviewViewport()}getDomNode(){return this._domElement}getVisibleColumnFromPosition(e){return this._modifiedEditor.getVisibleColumnFromPosition(e)}getPosition(){return this._modifiedEditor.getPosition()}setPosition(e){this._modifiedEditor.setPosition(e)}revealLine(e,t=0){this._modifiedEditor.revealLine(e,t)}revealLineInCenter(e,t=0){this._modifiedEditor.revealLineInCenter(e,t)}revealLineInCenterIfOutsideViewport(e,t=0){this._modifiedEditor.revealLineInCenterIfOutsideViewport(e,t)}revealLineNearTop(e,t=0){this._modifiedEditor.revealLineNearTop(e,t)}revealPosition(e,t=0){this._modifiedEditor.revealPosition(e,t)}revealPositionInCenter(e,t=0){this._modifiedEditor.revealPositionInCenter(e,t)}revealPositionInCenterIfOutsideViewport(e,t=0){this._modifiedEditor.revealPositionInCenterIfOutsideViewport(e,t)}revealPositionNearTop(e,t=0){this._modifiedEditor.revealPositionNearTop(e,t)}getSelection(){return this._modifiedEditor.getSelection()}getSelections(){return this._modifiedEditor.getSelections()}setSelection(e){this._modifiedEditor.setSelection(e)}setSelections(e){this._modifiedEditor.setSelections(e)}revealLines(e,t,i=0){this._modifiedEditor.revealLines(e,t,i)}revealLinesInCenter(e,t,i=0){this._modifiedEditor.revealLinesInCenter(e,t,i)}revealLinesInCenterIfOutsideViewport(e,t,i=0){this._modifiedEditor.revealLinesInCenterIfOutsideViewport(e,t,i)}revealLinesNearTop(e,t,i=0){this._modifiedEditor.revealLinesNearTop(e,t,i)}revealRange(e,t=0,i=!1,n=!0){this._modifiedEditor.revealRange(e,t,i,n)}revealRangeInCenter(e,t=0){this._modifiedEditor.revealRangeInCenter(e,t)}revealRangeInCenterIfOutsideViewport(e,t=0){this._modifiedEditor.revealRangeInCenterIfOutsideViewport(e,t)}revealRangeNearTop(e,t=0){this._modifiedEditor.revealRangeNearTop(e,t)}revealRangeNearTopIfOutsideViewport(e,t=0){this._modifiedEditor.revealRangeNearTopIfOutsideViewport(e,t)}revealRangeAtTop(e,t=0){this._modifiedEditor.revealRangeAtTop(e,t)}getSupportedActions(){return this._modifiedEditor.getSupportedActions()}saveViewState(){return{original:this._originalEditor.saveViewState(),modified:this._modifiedEditor.saveViewState()}}restoreViewState(e){if(e&&e.original&&e.modified){const t=e;this._originalEditor.restoreViewState(t.original),this._modifiedEditor.restoreViewState(t.modified)}}layout(e){this._elementSizeObserver.observe(e)}focus(){this._modifiedEditor.focus()}hasTextFocus(){return this._originalEditor.hasTextFocus()||this._modifiedEditor.hasTextFocus()}trigger(e,t,i){this._modifiedEditor.trigger(e,t,i)}changeDecorations(e){return this._modifiedEditor.changeDecorations(e)}_onDidContainerSizeChanged(){this._doLayout()}_getReviewHeight(){return this._reviewPane.isVisible()?this._elementSizeObserver.getHeight():0}_layoutOverviewRulers(){if(!this._renderOverviewRuler)return;if(!this._originalOverviewRuler||!this._modifiedOverviewRuler)return;const t=this._elementSizeObserver.getHeight(),i=this._getReviewHeight(),n=e.ENTIRE_DIFF_OVERVIEW_WIDTH-2*e.ONE_OVERVIEW_WIDTH;this._modifiedEditor.getLayoutInfo()&&(this._originalOverviewRuler.setLayout({top:0,width:e.ONE_OVERVIEW_WIDTH,right:n+e.ONE_OVERVIEW_WIDTH,height:t-i}),this._modifiedOverviewRuler.setLayout({top:0,right:0,width:e.ONE_OVERVIEW_WIDTH,height:t-i}))}_onViewZonesChanged(){this._currentlyChangingViewZones||this._updateDecorationsRunner.schedule()}_beginUpdateDecorationsSoon(){-1!==this._beginUpdateDecorationsTimeout&&(window.clearTimeout(this._beginUpdateDecorationsTimeout),this._beginUpdateDecorationsTimeout=-1),this._beginUpdateDecorationsTimeout=window.setTimeout(()=>this._beginUpdateDecorations(),e.UPDATE_DIFF_DECORATIONS_DELAY)}static _equals(e,t){return!e&&!t||!(!e||!t)&&e.toString()===t.toString()}_beginUpdateDecorations(){this._beginUpdateDecorationsTimeout=-1;const i=this._originalEditor.getModel(),n=this._modifiedEditor.getModel();if(!i||!n)return;this._diffComputationToken++;const o=this._diffComputationToken;this._setState(1),this._editorWorkerService.canComputeDiff(i.uri,n.uri)?this._editorWorkerService.computeDiff(i.uri,n.uri,this._ignoreTrimWhitespace,this._maxComputationTime).then(e=>{o===this._diffComputationToken&&i===this._originalEditor.getModel()&&n===this._modifiedEditor.getModel()&&(this._setState(2),this._diffComputationResult=e,this._updateDecorationsRunner.schedule(),this._onDidUpdateDiff.fire())},e=>{o===this._diffComputationToken&&i===this._originalEditor.getModel()&&n===this._modifiedEditor.getModel()&&(this._setState(2),this._diffComputationResult=null,this._updateDecorationsRunner.schedule())}):e._equals(i.uri,this._lastOriginalWarning)&&e._equals(n.uri,this._lastModifiedWarning)||(this._lastOriginalWarning=i.uri,this._lastModifiedWarning=n.uri,this._notificationService.warn(t(0,"Cannot compare files because one file is too large.")))}_cleanViewZonesAndDecorations(){this._originalEditorState.clean(this._originalEditor),this._modifiedEditorState.clean(this._modifiedEditor)}_updateDecorations(){if(!this._originalEditor.getModel()||!this._modifiedEditor.getModel())return;const e=this._diffComputationResult?this._diffComputationResult.changes:[],t=this._originalEditorState.getForeignViewZones(this._originalEditor.getWhitespaces()),i=this._modifiedEditorState.getForeignViewZones(this._modifiedEditor.getWhitespaces()),n=this._strategy.getEditorsDiffDecorations(e,this._ignoreTrimWhitespace,this._renderIndicators,t,i);try{this._currentlyChangingViewZones=!0,this._originalEditorState.apply(this._originalEditor,this._originalOverviewRuler,n.original,!1),this._modifiedEditorState.apply(this._modifiedEditor,this._modifiedOverviewRuler,n.modified,!0)}finally{this._currentlyChangingViewZones=!1}}_adjustOptionsForSubEditor(e){const t=Object.assign({},e);return t.inDiffEditor=!0,t.automaticLayout=!1,t.scrollbar=Object.assign({},t.scrollbar||{}),t.scrollbar.vertical="visible",t.folding=!1,t.codeLens=this._diffCodeLens,t.fixedOverflowWidgets=!0,t.minimap=Object.assign({},t.minimap||{}),t.minimap.enabled=!1,t}_adjustOptionsForLeftHandSide(e){const t=this._adjustOptionsForSubEditor(e);return t.wordWrapOverride1=this._renderSideBySide?this._diffWordWrap:"off",e.originalAriaLabel&&(t.ariaLabel=e.originalAriaLabel),t.readOnly=!this._originalIsEditable,t.extraEditorClassName="original-in-monaco-diff-editor",Object.assign(Object.assign({},t),{dimension:{height:0,width:0}})}_adjustOptionsForRightHandSide(t){const i=this._adjustOptionsForSubEditor(t);return t.modifiedAriaLabel&&(i.ariaLabel=t.modifiedAriaLabel),i.wordWrapOverride1=this._diffWordWrap,i.revealHorizontalRightPadding=Wo.revealHorizontalRightPadding.defaultValue+e.ENTIRE_DIFF_OVERVIEW_WIDTH,i.scrollbar.verticalHasArrows=!1,i.extraEditorClassName="modified-in-monaco-diff-editor",Object.assign(Object.assign({},i),{dimension:{height:0,width:0}})}doLayout(){this._elementSizeObserver.observe(),this._doLayout()}_doLayout(){const t=this._elementSizeObserver.getWidth(),i=this._elementSizeObserver.getHeight(),n=this._getReviewHeight(),o=this._strategy.layout();this._originalDomNode.style.width=o+"px",this._originalDomNode.style.left="0px",this._modifiedDomNode.style.width=t-o+"px",this._modifiedDomNode.style.left=o+"px",this._overviewDomElement.style.top="0px",this._overviewDomElement.style.height=i-n+"px",this._overviewDomElement.style.width=e.ENTIRE_DIFF_OVERVIEW_WIDTH+"px",this._overviewDomElement.style.left=t-e.ENTIRE_DIFF_OVERVIEW_WIDTH+"px",this._overviewViewportDomElement.setWidth(e.ENTIRE_DIFF_OVERVIEW_WIDTH),this._overviewViewportDomElement.setHeight(30),this._originalEditor.layout({width:o,height:i-n}),this._modifiedEditor.layout({width:t-o-(this._renderOverviewRuler?e.ENTIRE_DIFF_OVERVIEW_WIDTH:0),height:i-n}),(this._originalOverviewRuler||this._modifiedOverviewRuler)&&this._layoutOverviewRulers(),this._reviewPane.layout(i-n,t,n),this._layoutOverviewViewport()}_layoutOverviewViewport(){const e=this._computeOverviewViewport();e?(this._overviewViewportDomElement.setTop(e.top),this._overviewViewportDomElement.setHeight(e.height)):(this._overviewViewportDomElement.setTop(0),this._overviewViewportDomElement.setHeight(0))}_computeOverviewViewport(){const e=this._modifiedEditor.getLayoutInfo();if(!e)return null;const t=this._modifiedEditor.getScrollTop(),i=this._modifiedEditor.getScrollHeight(),n=Math.max(0,e.height),o=Math.max(0,n-0),s=i>0?o/i:0;return{height:Math.max(0,Math.floor(e.height*s)),top:Math.floor(t*s)}}_createDataSource(){return{getWidth:()=>this._elementSizeObserver.getWidth(),getHeight:()=>this._elementSizeObserver.getHeight()-this._getReviewHeight(),getOptions:()=>({renderOverviewRuler:this._renderOverviewRuler}),getContainerDomNode:()=>this._containerDomElement,relayoutEditors:()=>{this._doLayout()},getOriginalEditor:()=>this._originalEditor,getModifiedEditor:()=>this._modifiedEditor}}_setStrategy(e){this._strategy&&this._strategy.dispose(),this._strategy=e,e.applyColors(this._themeService.getColorTheme()),this._diffComputationResult&&this._updateDecorations(),this._doLayout()}_getLineChangeAtOrBeforeLineNumber(e,t){const i=this._diffComputationResult?this._diffComputationResult.changes:[];if(0===i.length||e=a?n=s+1:(n=s,o=s)}return i[n]}_getEquivalentLineForOriginalLineNumber(e){const t=this._getLineChangeAtOrBeforeLineNumber(e,e=>e.originalStartLineNumber);if(!t)return e;const i=t.modifiedStartLineNumber+(t.modifiedEndLineNumber>0?-1:0),n=t.originalEndLineNumber>0?t.originalEndLineNumber-t.originalStartLineNumber+1:0,o=t.modifiedEndLineNumber>0?t.modifiedEndLineNumber-t.modifiedStartLineNumber+1:0,s=e-(t.originalStartLineNumber+(t.originalEndLineNumber>0?-1:0));return s<=n?i+Math.min(s,o):i+o-n+s}_getEquivalentLineForModifiedLineNumber(e){const t=this._getLineChangeAtOrBeforeLineNumber(e,e=>e.modifiedStartLineNumber);if(!t)return e;const i=t.originalStartLineNumber+(t.originalEndLineNumber>0?-1:0),n=t.originalEndLineNumber>0?t.originalEndLineNumber-t.originalStartLineNumber+1:0,o=t.modifiedEndLineNumber>0?t.modifiedEndLineNumber-t.modifiedStartLineNumber+1:0,s=e-(t.modifiedStartLineNumber+(t.modifiedEndLineNumber>0?-1:0));return s<=o?i+Math.min(s,n):i+n-o+s}getDiffLineInformationForOriginal(e){return this._diffComputationResult?{equivalentLineNumber:this._getEquivalentLineForOriginalLineNumber(e)}:null}getDiffLineInformationForModified(e){return this._diffComputationResult?{equivalentLineNumber:this._getEquivalentLineForModifiedLineNumber(e)}:null}};By.ONE_OVERVIEW_WIDTH=15,By.ENTIRE_DIFF_OVERVIEW_WIDTH=30,By.UPDATE_DIFF_DECORATIONS_DELAY=200,By=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([Ay(3,ky),Ay(4,Sy),Ay(5,en),Ay(6,Et),Ay(7,It),Ay(8,pn),Ay(9,cw),Ay(10,Dy),Ay(11,Iy)],By);class Wy extends C{constructor(e){super(),this._dataSource=e,this._insertColor=null,this._removeColor=null}applyColors(e){const t=(e.getColor(vf)||_f).transparent(2),i=(e.getColor(Cf)||bf).transparent(2),n=!t.equals(this._insertColor)||!i.equals(this._removeColor);return this._insertColor=t,this._removeColor=i,n}getEditorsDiffDecorations(e,t,i,n,o){o=o.sort((e,t)=>e.afterLineNumber-t.afterLineNumber),n=n.sort((e,t)=>e.afterLineNumber-t.afterLineNumber);const s=this._getViewZones(e,n,o,i),r=this._getOriginalEditorDecorations(e,t,i),a=this._getModifiedEditorDecorations(e,t,i);return{original:{decorations:r.decorations,overviewZones:r.overviewZones,zones:s.original},modified:{decorations:a.decorations,overviewZones:a.overviewZones,zones:s.modified}}}}class Vy{constructor(e){this._source=e,this._index=-1,this.current=null,this.advance()}advance(){this._index++,this.current=this._indexe.afterLineNumber-t.afterLineNumber,_=(e,t)=>{if(null===t.domNode&&e.length>0){const i=e[e.length-1];if(i.afterLineNumber===t.afterLineNumber&&null===i.domNode)return void(i.heightInLines+=t.heightInLines)}e.push(t)},b=new Vy(this._modifiedForeignVZ),v=new Vy(this._originalForeignVZ);let C=1,w=1;for(let i=0,n=this._lineChanges.length;i<=n;i++){const y=i0?-1:0),g=y.modifiedStartLineNumber+(y.modifiedEndLineNumber>0?-1:0),d=y.originalEndLineNumber>0?zy._getViewLineCount(this._originalEditor,y.originalStartLineNumber,y.originalEndLineNumber):0,c=y.modifiedEndLineNumber>0?zy._getViewLineCount(this._modifiedEditor,y.modifiedStartLineNumber,y.modifiedEndLineNumber):0,p=Math.max(y.originalStartLineNumber,y.originalEndLineNumber),m=Math.max(y.modifiedStartLineNumber,y.modifiedEndLineNumber)):(p=u+=1e7+d,m=g+=1e7+c);let S=[],L=[];if(o){let e;e=y?y.originalEndLineNumber>0?y.originalStartLineNumber-C:y.modifiedStartLineNumber-w:s.getLineCount()-C;for(let t=0;to&&L.push({afterLineNumber:i,heightInLines:n-o,domNode:null,marginDomNode:null})}y&&(C=(y.originalEndLineNumber>0?y.originalEndLineNumber:y.originalStartLineNumber)+1,w=(y.modifiedEndLineNumber>0?y.modifiedEndLineNumber:y.modifiedStartLineNumber)+1)}for(;b.current&&b.current.afterLineNumber<=m;){let e;e=b.current.afterLineNumber<=g?u-g+b.current.afterLineNumber:p;let i=null;y&&y.modifiedStartLineNumber<=b.current.afterLineNumber&&b.current.afterLineNumber<=y.modifiedEndLineNumber&&(i=this._createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion()),S.push({afterLineNumber:e,heightInLines:b.current.height/t,domNode:null,marginDomNode:i}),b.advance()}for(;v.current&&v.current.afterLineNumber<=p;){let t;L.push({afterLineNumber:t=v.current.afterLineNumber<=u?g-u+v.current.afterLineNumber:m,heightInLines:v.current.height/e,domNode:null}),v.advance()}if(null!==y&&Yy(y)){const e=this._produceOriginalFromDiff(y,d,c);e&&S.push(e)}if(null!==y&&Zy(y)){const e=this._produceModifiedFromDiff(y,d,c);e&&L.push(e)}let D=0,E=0;for(S=S.sort(f),L=L.sort(f);D=t.heightInLines?(e.heightInLines-=t.heightInLines,E++):(t.heightInLines-=e.heightInLines,D++)}for(;D(e.domNode||(e.domNode=Xy()),e))}}function Hy(e,t,i,n,o){return{range:new ro(e,t,i,n),options:o}}const Uy={charDelete:xc.register({className:"char-delete"}),charDeleteWholeLine:xc.register({className:"char-delete",isWholeLine:!0}),charInsert:xc.register({className:"char-insert"}),charInsertWholeLine:xc.register({className:"char-insert",isWholeLine:!0}),lineInsert:xc.register({className:"line-insert",marginClassName:"line-insert",isWholeLine:!0}),lineInsertWithSign:xc.register({className:"line-insert",linesDecorationsClassName:"insert-sign "+fn.asClassName(Ry),marginClassName:"line-insert",isWholeLine:!0}),lineDelete:xc.register({className:"line-delete",marginClassName:"line-delete",isWholeLine:!0}),lineDeleteWithSign:xc.register({className:"line-delete",linesDecorationsClassName:"delete-sign "+fn.asClassName(Py),marginClassName:"line-delete",isWholeLine:!0}),lineDeleteMargin:xc.register({marginClassName:"line-delete"})};class Ky extends Wy{constructor(e,t){super(e),this._disableSash=!1===t,this._sashRatio=null,this._sashPosition=null,this._startSashPosition=null,this._sash=this._register(new jw(this._dataSource.getContainerDomNode(),this,{orientation:0})),this._disableSash&&(this._sash.state=0),this._sash.onDidStart(()=>this._onSashDragStart()),this._sash.onDidChange(e=>this._onSashDrag(e)),this._sash.onDidEnd(()=>this._onSashDragEnd()),this._sash.onDidReset(()=>this._onSashReset())}setEnableSplitViewResizing(e){const t=!1===e;this._disableSash!==t&&(this._disableSash=t,this._sash.state=this._disableSash?0:3)}layout(e=this._sashRatio){const t=this._dataSource.getWidth()-(this._dataSource.getOptions().renderOverviewRuler?By.ENTIRE_DIFF_OVERVIEW_WIDTH:0);let i=Math.floor((e||.5)*t);const n=Math.floor(.5*t);return i=this._disableSash?n:i||n,t>2*Ky.MINIMUM_EDITOR_WIDTH?(it-Ky.MINIMUM_EDITOR_WIDTH&&(i=t-Ky.MINIMUM_EDITOR_WIDTH)):i=n,this._sashPosition!==i&&(this._sashPosition=i,this._sash.layout()),this._sashPosition}_onSashDragStart(){this._startSashPosition=this._sashPosition}_onSashDrag(e){const t=this._dataSource.getWidth()-(this._dataSource.getOptions().renderOverviewRuler?By.ENTIRE_DIFF_OVERVIEW_WIDTH:0),i=this.layout((this._startSashPosition+(e.currentX-e.startX))/t);this._sashRatio=i/t,this._dataSource.relayoutEditors()}_onSashDragEnd(){this._sash.layout()}_onSashReset(){this._sashRatio=.5,this._dataSource.relayoutEditors(),this._sash.layout()}getVerticalSashTop(e){return 0}getVerticalSashLeft(e){return this._sashPosition}getVerticalSashHeight(e){return this._dataSource.getHeight()}_getViewZones(e,t,i){const n=this._dataSource.getOriginalEditor(),o=this._dataSource.getModifiedEditor();return new $y(e,t,i,n,o).getViewZones()}_getOriginalEditorDecorations(e,t,i){const n=this._dataSource.getOriginalEditor(),o=String(this._removeColor),s={decorations:[],overviewZones:[]},r=n.getModel(),a=n._getViewModel();for(const n of e)if(Zy(n)){s.decorations.push({range:new ro(n.originalStartLineNumber,1,n.originalEndLineNumber,1073741824),options:i?Uy.lineDeleteWithSign:Uy.lineDelete}),Yy(n)&&n.charChanges||s.decorations.push(Hy(n.originalStartLineNumber,1,n.originalEndLineNumber,1073741824,Uy.charDeleteWholeLine));const e=Qy(r,a,n.originalStartLineNumber,n.originalEndLineNumber);if(s.overviewZones.push(new Ov(e.startLineNumber,e.endLineNumber,o)),n.charChanges)for(const e of n.charChanges)if(Zy(e))if(t)for(let t=e.originalStartLineNumber;t<=e.originalEndLineNumber;t++){let i,n;i=t===e.originalStartLineNumber?e.originalStartColumn:r.getLineFirstNonWhitespaceColumn(t),n=t===e.originalEndLineNumber?e.originalEndColumn:r.getLineLastNonWhitespaceColumn(t),s.decorations.push(Hy(t,i,t,n,Uy.charDelete))}else s.decorations.push(Hy(e.originalStartLineNumber,e.originalStartColumn,e.originalEndLineNumber,e.originalEndColumn,Uy.charDelete))}return s}_getModifiedEditorDecorations(e,t,i){const n=this._dataSource.getModifiedEditor(),o=String(this._insertColor),s={decorations:[],overviewZones:[]},r=n.getModel(),a=n._getViewModel();for(const n of e)if(Yy(n)){s.decorations.push({range:new ro(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824),options:i?Uy.lineInsertWithSign:Uy.lineInsert}),Zy(n)&&n.charChanges||s.decorations.push(Hy(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824,Uy.charInsertWholeLine));const e=Qy(r,a,n.modifiedStartLineNumber,n.modifiedEndLineNumber);if(s.overviewZones.push(new Ov(e.startLineNumber,e.endLineNumber,o)),n.charChanges)for(const e of n.charChanges)if(Yy(e))if(t)for(let t=e.modifiedStartLineNumber;t<=e.modifiedEndLineNumber;t++){let i,n;i=t===e.modifiedStartLineNumber?e.modifiedStartColumn:r.getLineFirstNonWhitespaceColumn(t),n=t===e.modifiedEndLineNumber?e.modifiedEndColumn:r.getLineLastNonWhitespaceColumn(t),s.decorations.push(Hy(t,i,t,n,Uy.charInsert))}else s.decorations.push(Hy(e.modifiedStartLineNumber,e.modifiedStartColumn,e.modifiedEndLineNumber,e.modifiedEndColumn,Uy.charInsert))}return s}}Ky.MINIMUM_EDITOR_WIDTH=100;class $y extends zy{constructor(e,t,i,n,o){super(e,t,i,n,o)}_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion(){return null}_produceOriginalFromDiff(e,t,i){return i>t?{afterLineNumber:Math.max(e.originalStartLineNumber,e.originalEndLineNumber),heightInLines:i-t,domNode:null}:null}_produceModifiedFromDiff(e,t,i){return t>i?{afterLineNumber:Math.max(e.modifiedStartLineNumber,e.modifiedEndLineNumber),heightInLines:t-i,domNode:null}:null}}class jy extends Wy{constructor(e,t){super(e),this._decorationsLeft=e.getOriginalEditor().getLayoutInfo().decorationsLeft,this._register(e.getOriginalEditor().onDidLayoutChange(t=>{this._decorationsLeft!==t.decorationsLeft&&(this._decorationsLeft=t.decorationsLeft,e.relayoutEditors())}))}setEnableSplitViewResizing(e){}_getViewZones(e,t,i,n){const o=this._dataSource.getOriginalEditor(),s=this._dataSource.getModifiedEditor();return new qy(e,t,i,o,s,n).getViewZones()}_getOriginalEditorDecorations(e,t,i){const n=String(this._removeColor),o={decorations:[],overviewZones:[]},s=this._dataSource.getOriginalEditor(),r=s.getModel(),a=s._getViewModel();for(const t of e)if(Zy(t)){o.decorations.push({range:new ro(t.originalStartLineNumber,1,t.originalEndLineNumber,1073741824),options:Uy.lineDeleteMargin});const e=Qy(r,a,t.originalStartLineNumber,t.originalEndLineNumber);o.overviewZones.push(new Ov(e.startLineNumber,e.endLineNumber,n))}return o}_getModifiedEditorDecorations(e,t,i){const n=this._dataSource.getModifiedEditor(),o=String(this._insertColor),s={decorations:[],overviewZones:[]},r=n.getModel(),a=n._getViewModel();for(const n of e)if(Yy(n)){s.decorations.push({range:new ro(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824),options:i?Uy.lineInsertWithSign:Uy.lineInsert});const e=Qy(r,a,n.modifiedStartLineNumber,n.modifiedEndLineNumber);if(s.overviewZones.push(new Ov(e.startLineNumber,e.endLineNumber,o)),n.charChanges){for(const e of n.charChanges)if(Yy(e))if(t)for(let t=e.modifiedStartLineNumber;t<=e.modifiedEndLineNumber;t++){let i,n;i=t===e.modifiedStartLineNumber?e.modifiedStartColumn:r.getLineFirstNonWhitespaceColumn(t),n=t===e.modifiedEndLineNumber?e.modifiedEndColumn:r.getLineLastNonWhitespaceColumn(t),s.decorations.push(Hy(t,i,t,n,Uy.charInsert))}else s.decorations.push(Hy(e.modifiedStartLineNumber,e.modifiedStartColumn,e.modifiedEndLineNumber,e.modifiedEndColumn,Uy.charInsert))}else s.decorations.push(Hy(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824,Uy.charInsertWholeLine))}return s}layout(){return Math.max(5,this._decorationsLeft)}}class qy extends zy{constructor(e,t,i,n,o,s){super(e,t,i,n,o),this._originalModel=n.getModel(),this._renderIndicators=s,this._pendingLineChange=[],this._pendingViewZones=[],this._lineBreaksComputer=this._modifiedEditor._getViewModel().createLineBreaksComputer()}getViewZones(){const e=super.getViewZones();return this._finalize(e),e}_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion(){const e=document.createElement("div");return e.className="inline-added-margin-view-zone",e}_produceOriginalFromDiff(e,t,i){const n=document.createElement("div");return n.className="inline-added-margin-view-zone",{afterLineNumber:Math.max(e.originalStartLineNumber,e.originalEndLineNumber),heightInLines:i,domNode:document.createElement("div"),marginDomNode:n}}_produceModifiedFromDiff(e,t,i){const n=document.createElement("div");n.className=`view-lines line-delete ${G_}`;const o=document.createElement("div");o.className="inline-deleted-margin-view-zone";const s={shouldNotShrink:!0,afterLineNumber:0===e.modifiedEndLineNumber?e.modifiedStartLineNumber:e.modifiedStartLineNumber-1,heightInLines:t,minWidthInPx:0,domNode:n,marginDomNode:o,diff:{originalStartLineNumber:e.originalStartLineNumber,originalEndLineNumber:e.originalEndLineNumber,modifiedStartLineNumber:e.modifiedStartLineNumber,modifiedEndLineNumber:e.modifiedEndLineNumber,originalModel:this._originalModel,viewLineCounts:null}};for(let t=e.originalStartLineNumber;t<=e.originalEndLineNumber;t++)this._lineBreaksComputer.addRequest(this._originalModel.getLineContent(t),null);return this._pendingLineChange.push(e),this._pendingViewZones.push(s),s}_finalize(e){const t=this._modifiedEditor.getOptions(),i=this._modifiedEditor.getModel().getOptions().tabSize,n=t.get(38),o=t.get(26),s=n.typicalHalfwidthCharacterWidth,r=t.get(91),a=this._originalModel.mightContainNonBasicASCII(),l=this._originalModel.mightContainRTL(),h=t.get(54),c=t.get(129).decorationsWidth,d=t.get(105),u=t.get(86),g=t.get(79),p=t.get(39),m=this._lineBreaksComputer.finalize();let f=0;for(let t=0;t0,S=cs(1e4);let L=0,D=0,E=null;for(let t=_.originalStartLineNumber;t<=_.originalEndLineNumber;t++){const s=t-_.originalStartLineNumber,r=this._originalModel.getLineTokens(t),v=r.getLineContent(),x=m[f++],k=sp.filter(w,t,1,v.length+1);if(x){let m=0;for(const e of x.breakOffsets){const t=r.sliceAndInflate(m,e,0),s=v.substring(m,e);L=Math.max(L,this._renderOriginalLine(D++,s,t,sp.extractWrapped(k,m,e),y,a,l,n,o,h,c,d,u,g,p,i,S,C)),m=e}for(E||(E=[]);E.lengthe.afterLineNumber-t.afterLineNumber)}_renderOriginalLine(e,t,i,n,o,s,r,a,l,h,c,d,u,g,p,m,f,_){f.appendASCIIString('
');const b=hv.isBasicASCII(t,s),v=hv.containsRTL(t,b,r),C=pp(new dp(a.isMonospace&&!l,a.canUseHalfwidthRightwardsArrow,t,!1,b,v,0,i,n,m,0,a.spaceWidth,a.middotWidth,a.wsmiddotWidth,d,u,g,p!==To.OFF,null),f);if(f.appendASCIIString("
"),this._renderIndicators){const t=document.createElement("div");t.className=`delete-sign ${fn.asClassName(Py)}`,t.setAttribute("style",`position:absolute;top:${e*h}px;width:${c}px;height:${h}px;right:0;`),_.appendChild(t)}const w=C.characterMapping.getAbsoluteOffsets();return w.length>0?w[w.length-1]:0}}function Gy(e,t){return xo(e,t,["off","on","inherit"])}function Yy(e){return e.modifiedEndLineNumber>0}function Zy(e){return e.originalEndLineNumber>0}function Xy(){const e=document.createElement("div");return e.className="diagonal-fill",e}function Qy(e,t,i,n){const o=e.getLineCount();return i=Math.min(o,Math.max(1,i)),n=Math.min(o,Math.max(1,n)),t.coordinatesConverter.convertModelRangeToViewRange(new ro(i,e.getLineMinColumn(i),n,e.getLineMaxColumn(n)))}Cn((e,t)=>{const i=e.getColor(vf);i&&(t.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { background-color: ${i}; }`),t.addRule(`.monaco-diff-editor .line-insert, .monaco-diff-editor .char-insert { background-color: ${i}; }`),t.addRule(`.monaco-editor .inline-added-margin-view-zone { background-color: ${i}; }`));const n=e.getColor(Cf);n&&(t.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { background-color: ${n}; }`),t.addRule(`.monaco-diff-editor .line-delete, .monaco-diff-editor .char-delete { background-color: ${n}; }`),t.addRule(`.monaco-editor .inline-deleted-margin-view-zone { background-color: ${n}; }`));const o=e.getColor(wf);o&&t.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { border: 1px ${"hc"===e.type?"dashed":"solid"} ${o}; }`);const s=e.getColor(yf);s&&t.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { border: 1px ${"hc"===e.type?"dashed":"solid"} ${s}; }`);const r=e.getColor(Nm);r&&t.addRule(`.monaco-diff-editor.side-by-side .editor.modified { box-shadow: -6px 0 5px -5px ${r}; }`);const a=e.getColor(Sf);a&&t.addRule(`.monaco-diff-editor.side-by-side .editor.modified { border-left: 1px solid ${a}; }`);const l=e.getColor(Im);l&&t.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport {\n\t\t\t\tbackground: ${l};\n\t\t\t}\n\t\t`);const h=e.getColor(Tm);h&&t.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport:hover {\n\t\t\t\tbackground: ${h};\n\t\t\t}\n\t\t`);const c=e.getColor(Am);c&&t.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport:active {\n\t\t\t\tbackground: ${c};\n\t\t\t}\n\t\t`);const d=e.getColor(Lf);t.addRule(`\n\t.monaco-editor .diagonal-fill {\n\t\tbackground-image: linear-gradient(\n\t\t\t-45deg,\n\t\t\t${d} 12.5%,\n\t\t\t#0000 12.5%, #0000 50%,\n\t\t\t${d} 50%, ${d} 62.5%,\n\t\t\t#0000 62.5%, #0000 100%\n\t\t);\n\t\tbackground-size: 8px 8px;\n\t}\n\t`)});const Jy=im("editorOverviewRuler.bracketMatchForeground",{dark:"#A0A0A0",light:"#A0A0A0",hc:"#A0A0A0"},t(0,"Overview ruler marker color for matching brackets."));class eS{constructor(e,t,i){this.position=e,this.brackets=t,this.options=i}}class tS extends C{constructor(e){super(),this._editor=e,this._lastBracketsData=[],this._lastVersionId=0,this._decorations=[],this._updateBracketsSoon=this._register(new $a(()=>this._updateBrackets(),50)),this._matchBrackets=this._editor.getOption(59),this._updateBracketsSoon.schedule(),this._register(e.onDidChangeCursorPosition(e=>{"never"!==this._matchBrackets&&this._updateBracketsSoon.schedule()})),this._register(e.onDidChangeModelContent(e=>{this._updateBracketsSoon.schedule()})),this._register(e.onDidChangeModel(e=>{this._lastBracketsData=[],this._decorations=[],this._updateBracketsSoon.schedule()})),this._register(e.onDidChangeModelLanguageConfiguration(e=>{this._lastBracketsData=[],this._updateBracketsSoon.schedule()})),this._register(e.onDidChangeConfiguration(e=>{e.hasChanged(59)&&(this._matchBrackets=this._editor.getOption(59),this._decorations=this._editor.deltaDecorations(this._decorations,[]),this._lastBracketsData=[],this._lastVersionId=0,this._updateBracketsSoon.schedule())}))}static get(e){return e.getContribution(tS.ID)}jumpToBracket(){if(!this._editor.hasModel())return;const e=this._editor.getModel(),t=this._editor.getSelections().map(t=>{const i=t.getStartPosition(),n=e.matchBracket(i);let o=null;if(n)n[0].containsPosition(i)?o=n[1].getStartPosition():n[1].containsPosition(i)&&(o=n[0].getStartPosition());else{const t=e.findEnclosingBrackets(i);if(t)o=t[0].getStartPosition();else{const t=e.findNextBracket(i);t&&t.range&&(o=t.range.getStartPosition())}}return o?new ao(o.lineNumber,o.column,o.lineNumber,o.column):new ao(i.lineNumber,i.column,i.lineNumber,i.column)});this._editor.setSelections(t),this._editor.revealRange(t[0])}selectToBracket(e){if(!this._editor.hasModel())return;const t=this._editor.getModel(),i=[];this._editor.getSelections().forEach(n=>{const o=n.getStartPosition();let s=t.matchBracket(o);if(!s&&!(s=t.findEnclosingBrackets(o))){const e=t.findNextBracket(o);e&&e.range&&(s=t.matchBracket(e.range.getStartPosition()))}let r=null,a=null;if(s){s.sort(ro.compareRangesUsingStarts);const[t,i]=s;r=e?t.getStartPosition():t.getEndPosition(),a=e?i.getEndPosition():i.getStartPosition()}r&&a&&i.push(new ao(r.lineNumber,r.column,a.lineNumber,a.column))}),i.length>0&&(this._editor.setSelections(i),this._editor.revealRange(i[0]))}_updateBrackets(){if("never"===this._matchBrackets)return;this._recomputeBrackets();let e=[],t=0;for(const i of this._lastBracketsData){let n=i.brackets;n&&(e[t++]={range:n[0],options:i.options},e[t++]={range:n[1],options:i.options})}this._decorations=this._editor.deltaDecorations(this._decorations,e)}_recomputeBrackets(){if(!this._editor.hasModel())return this._lastBracketsData=[],void(this._lastVersionId=0);const e=this._editor.getSelections();if(e.length>100)return this._lastBracketsData=[],void(this._lastVersionId=0);const t=this._editor.getModel(),i=t.getVersionId();let n=[];this._lastVersionId===i&&(n=this._lastBracketsData);let o=[],s=0;for(let t=0,i=e.length;t1&&o.sort(Tt.compare);let r=[],a=0,l=0,h=n.length;for(let e=0,i=o.length;e{const i=e.getColor(R_);i&&t.addRule(`.monaco-editor .bracket-match { background-color: ${i}; }`);const n=e.getColor(P_);n&&t.addRule(`.monaco-editor .bracket-match { border: 1px solid ${n}; }`)}),En.appendMenuItem(Ln.MenubarGoMenu,{group:"5_infile_nav",command:{id:"editor.action.jumpToBracket",title:t(0,"Go to &&Bracket")},order:2});class iS{constructor(e,t){this._selection=e,this._isMovingLeft=t}getEditOperations(e,t){if(this._selection.startLineNumber!==this._selection.endLineNumber||this._selection.isEmpty())return;const i=this._selection.startLineNumber,n=this._selection.startColumn,o=this._selection.endColumn;if((!this._isMovingLeft||1!==n)&&(this._isMovingLeft||o!==e.getLineMaxColumn(i)))if(this._isMovingLeft){const s=new ro(i,n-1,i,n),r=e.getValueInRange(s);t.addEditOperation(s,null),t.addEditOperation(new ro(i,o,i,o),r)}else{const s=new ro(i,o,i,o+1),r=e.getValueInRange(s);t.addEditOperation(s,null),t.addEditOperation(new ro(i,n,i,n),r)}}computeCursorState(e,t){return this._isMovingLeft?new ao(this._selection.startLineNumber,this._selection.startColumn-1,this._selection.endLineNumber,this._selection.endColumn-1):new ao(this._selection.startLineNumber,this._selection.startColumn+1,this._selection.endLineNumber,this._selection.endColumn+1)}}class nS extends Yn{constructor(e,t){super(t),this.left=e}run(e,t){if(!t.hasModel())return;let i=[],n=t.getSelections();for(const e of n)i.push(new iS(e,this.left));t.pushUndoStop(),t.executeCommands(this.id,i),t.pushUndoStop()}}Qn(class extends nS{constructor(){super(!0,{id:"editor.action.moveCarretLeftAction",label:t(0,"Move Selected Text Left"),alias:"Move Selected Text Left",precondition:cd.writable})}}),Qn(class extends nS{constructor(){super(!1,{id:"editor.action.moveCarretRightAction",label:t(0,"Move Selected Text Right"),alias:"Move Selected Text Right",precondition:cd.writable})}}),Qn(class extends Yn{constructor(){super({id:"editor.action.transposeLetters",label:t(0,"Transpose Letters"),alias:"Transpose Letters",precondition:cd.writable,kbOpts:{kbExpr:cd.textInputFocus,primary:0,mac:{primary:306},weight:100}})}run(e,t){if(!t.hasModel())return;let i=t.getModel(),n=[],o=t.getSelections();for(let e of o){if(!e.isEmpty())continue;let t=e.startLineNumber,o=e.startColumn,s=i.getLineMaxColumn(t);if(1===t&&(1===o||2===o&&2===s))continue;let r=o===s?e.getPosition():Qc.rightPosition(i,e.getPosition().lineNumber,e.getPosition().column),a=Qc.leftPosition(i,r.lineNumber,r.column),l=Qc.leftPosition(i,a.lineNumber,a.column),h=i.getValueInRange(ro.fromPositions(l,a)),c=i.getValueInRange(ro.fromPositions(a,r)),d=ro.fromPositions(l,r);n.push(new $c(d,c+h))}n.length>0&&(t.pushUndoStop(),t.executeCommands(this.id,n),t.pushUndoStop())}});const oS=K||document.queryCommandSupported("cut"),sS=K||document.queryCommandSupported("copy"),rS=void 0!==navigator.clipboard&&!ge||document.queryCommandSupported("paste");function aS(e){return e.register(),e}const lS=oS?aS(new jn({id:"editor.action.clipboardCutAction",precondition:void 0,kbOpts:K?{primary:2102,win:{primary:2102,secondary:[1044]},weight:100}:void 0,menuOpts:[{menuId:Ln.MenubarEditMenu,group:"2_ccp",title:t(0,"Cu&&t"),order:1},{menuId:Ln.EditorContext,group:"9_cutcopypaste",title:t(0,"Cut"),when:cd.writable,order:1},{menuId:Ln.CommandPalette,group:"",title:t(0,"Cut"),order:1}]})):void 0,hS=sS?aS(new jn({id:"editor.action.clipboardCopyAction",precondition:void 0,kbOpts:K?{primary:2081,win:{primary:2081,secondary:[2067]},weight:100}:void 0,menuOpts:[{menuId:Ln.MenubarEditMenu,group:"2_ccp",title:t(0,"&&Copy"),order:2},{menuId:Ln.EditorContext,group:"9_cutcopypaste",title:t(0,"Copy"),order:2},{menuId:Ln.CommandPalette,group:"",title:t(0,"Copy"),order:1}]})):void 0,cS=rS?aS(new jn({id:"editor.action.clipboardPasteAction",precondition:void 0,kbOpts:K?{primary:2100,win:{primary:2100,secondary:[1043]},linux:{primary:2100,secondary:[1043]},weight:100}:void 0,menuOpts:[{menuId:Ln.MenubarEditMenu,group:"2_ccp",title:t(0,"&&Paste"),order:3},{menuId:Ln.EditorContext,group:"9_cutcopypaste",title:t(0,"Paste"),when:cd.writable,order:3},{menuId:Ln.CommandPalette,group:"",title:t(0,"Paste"),order:1}]})):void 0;function dS(e,t){e&&(e.addImplementation(1e4,(e,i)=>{const n=e.get(It).getFocusedCodeEditor();if(n&&n.hasTextFocus()){const e=n.getOption(28),i=n.getSelection();return!(!i||!i.isEmpty()||e)||(document.execCommand(t),!0)}return!1}),e.addImplementation(0,(e,i)=>(document.execCommand(t),!0)))}dS(lS,"cut"),dS(hS,"copy"),cS&&(cS.addImplementation(1e4,(e,t)=>{const i=e.get(It),n=e.get(ky),o=i.getFocusedCodeEditor();return!(!o||!o.hasTextFocus()||!document.execCommand("paste")&&$&&((()=>(function(e,t,i,n){return new(i||(i=Promise))((function(e,t){function o(e){try{r(n.next(e))}catch(e){t(e)}}function s(e){try{r(n.throw(e))}catch(e){t(e)}}function r(t){t.done?e(t.value):function n(e){return e instanceof i?e:new i((function(t){t(e)}))}(t.value).then(o,s)}r((n=n.apply(void 0,[])).next())}))})(0,0,void 0,(function*(){const e=yield n.readText();if(""!==e){const t=qp.INSTANCE.get(e);let i=!1,n=null,s=null;t&&(i=o.getOption(28)&&!!t.isFromEmptySelection,n=void 0!==t.multicursorText?t.multicursorText:null,s=t.mode),o.trigger("keyboard","paste",{text:e,pasteOnNewLine:i,multicursorText:n,mode:s})}})))(),0))}),cS.addImplementation(0,(e,t)=>(document.execCommand("paste"),!0))),sS&&Qn(class extends Yn{constructor(){super({id:"editor.action.clipboardCopyWithSyntaxHighlightingAction",label:t(0,"Copy With Syntax Highlighting"),alias:"Copy With Syntax Highlighting",precondition:void 0,kbOpts:{kbExpr:cd.textInputFocus,primary:0,weight:100}})}run(e,t){t.hasModel()&&(!t.getOption(28)&&t.getSelection().isEmpty()||(jp.forceCopyWithSyntaxHighlighting=!0,t.focus(),document.execCommand("copy"),jp.forceCopyWithSyntaxHighlighting=!1))}});class uS{constructor(e){this.executor=e,this._didRun=!1}getValue(){if(!this._didRun)try{this._value=this.executor()}catch(e){this._error=e}finally{this._didRun=!0}if(this._error)throw this._error;return this._value}get rawValue(){return this._value}}const gS=kt("IWorkspaceEditService");class pS{constructor(e){this.metadata=e}static convert(e){return e.edits.map(e=>{if(function t(e){return Le(e)&&mt.isUri(e.resource)&&Le(e.edit)}(e))return new mS(e.resource,e.edit,e.modelVersionId,e.metadata);if(function i(e){return Le(e)&&(Boolean(e.newUri)||Boolean(e.oldUri))}(e))return new fS(e.oldUri,e.newUri,e.options,e.metadata);throw new Error("Unsupported edit")})}}class mS extends pS{constructor(e,t,i,n){super(n),this.resource=e,this.textEdit=t,this.versionId=i,this.metadata=n}}class fS extends pS{constructor(e,t,i,n){super(n),this.oldResource=e,this.newResource=t,this.options=i,this.metadata=n}}class _S{constructor(e){this.value=e}equals(e){return this.value===e.value}contains(e){return this.equals(e)||""===this.value||e.value.startsWith(this.value+_S.sep)}intersects(e){return this.contains(e)||e.contains(this)}append(e){return new _S(this.value+_S.sep+e)}}function bS(e,t,i){return!(!t.contains(e)||i&&t.contains(i))}_S.sep=".",_S.None=new _S("@@none@@"),_S.Empty=new _S(""),_S.QuickFix=new _S("quickfix"),_S.Refactor=new _S("refactor"),_S.Source=new _S("source"),_S.SourceOrganizeImports=_S.Source.append("organizeImports"),_S.SourceFixAll=_S.Source.append("fixAll");class vS{constructor(e,t,i){this.kind=e,this.apply=t,this.preferred=i}static fromUser(e,t){return e&&"object"==typeof e?new vS(vS.getKindFromUser(e,t.kind),vS.getApplyFromUser(e,t.apply),vS.getPreferredUser(e)):new vS(t.kind,t.apply,!1)}static getApplyFromUser(e,t){switch("string"==typeof e.apply?e.apply.toLowerCase():""){case"first":return"first";case"never":return"never";case"ifsingle":return"ifSingle";default:return t}}static getKindFromUser(e,t){return"string"==typeof e.kind?new _S(e.kind):t}static getPreferredUser(e){return"boolean"==typeof e.preferred&&e.preferred}}var CS=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const wS="editor.action.organizeImports",yS="editor.action.fixAll";class SS{constructor(e,t){this.action=e,this.provider=t}resolve(e){var t;return CS(this,void 0,void 0,(function*(){if((null===(t=this.provider)||void 0===t?void 0:t.resolveCodeAction)&&!this.action.edit){let t;try{t=yield this.provider.resolveCodeAction(this.action,e)}catch(e){o(e)}t&&(this.action.edit=t.edit)}return this}))}}class LS extends C{constructor(e,t,i){super(),this.documentation=t,this._register(i),this.allActions=Jr([...e],LS.codeActionsComparator),this.validActions=this.allActions.filter(({action:e})=>!e.disabled)}static codeActionsComparator({action:e},{action:t}){return e.isPreferred&&!t.isPreferred?-1:!e.isPreferred&&t.isPreferred?1:na(e.diagnostics)?na(t.diagnostics)?e.diagnostics[0].message.localeCompare(t.diagnostics[0].message):-1:na(t.diagnostics)?1:0}get hasAutoFix(){return this.validActions.some(({action:e})=>!!e.kind&&_S.QuickFix.contains(new _S(e.kind))&&!!e.isPreferred)}}const DS={actions:[],documentation:void 0};function ES(e,t,i,n,s){var r;const l=i.filter||{},h={only:null===(r=l.include)||void 0===r?void 0:r.value,trigger:i.type},c=new ty(e,s),d=function u(e,t){return $l.all(e).filter(e=>!e.providedCodeActionKinds||e.providedCodeActionKinds.some(e=>(function i(e,t){return!(e.include&&!e.include.intersects(t)||e.excludes&&e.excludes.some(i=>bS(t,i,e.include))||!e.includeSourceActions&&_S.Source.contains(t))})(t,new _S(e))))}(e,l),g=new v,p=d.map(i=>CS(this,void 0,void 0,(function*(){try{n.report(i);const o=yield i.provideCodeActions(e,t,h,c.token);if(o&&g.add(o),c.token.isCancellationRequested)return DS;const s=((null==o?void 0:o.actions)||[]).filter(e=>e&&function t(e,i){const n=i.kind?new _S(i.kind):void 0;return!(!(!e.include||n&&e.include.contains(n))||e.excludes&&n&&e.excludes.some(t=>bS(n,t,e.include))||!e.includeSourceActions&&n&&_S.Source.contains(n)||e.onlyIncludePreferredActions&&!i.isPreferred)}(l,e)),r=function s(e,t,i){if(!e.documentation)return;const n=e.documentation.map(e=>({kind:new _S(e.kind),command:e.command}));if(i){let e;for(const t of n)t.kind.contains(i)&&(e?e.kind.contains(t.kind)&&(e=t):e=t);if(e)return null==e?void 0:e.command}for(const e of t)if(e.kind)for(const t of n)if(t.kind.contains(new _S(e.kind)))return t.command}(i,s,l.include);return{actions:s.map(e=>new SS(e,i)),documentation:r}}catch(e){if(a(e))throw e;return o(e),DS}}))),m=$l.onDidChange(()=>{Zr($l.all(e),d)||c.cancel()});return Promise.all(p).then(e=>{const t=aa(e.map(e=>e.actions)),i=ta(e.map(e=>e.documentation));return new LS(t,i,g)}).finally(()=>{m.dispose(),c.dispose()})}sn.registerCommand("_executeCodeActionProvider",(function(e,t,i,n,o){return CS(this,void 0,void 0,(function*(){if(!(t instanceof mt))throw h();const s=e.get(At).getModel(t);if(!s)throw h();const r=ao.isISelection(i)?ao.liftSelection(i):ro.isIRange(i)?s.validateRange(i):void 0;if(!r)throw h();const a="string"==typeof n?new _S(n):void 0,l=yield ES(s,r,{type:2,filter:{includeSourceActions:!0,include:a}},Ny.None,Aa.None),c=[],d=Math.min(l.validActions.length,"number"==typeof o?o:0);for(let e=0;ee.action)}finally{setTimeout(()=>l.dispose(),100)}}))}));const xS=2e4;let kS,NS,IS,TS,AS;function MS(e){kS&&(NS.textContent!==e?(Ud(IS),OS(NS,e)):(Ud(NS),OS(IS,e)))}function OS(e,t){Ud(e),t.length>xS&&(t=t.substr(0,xS)),e.textContent=t,e.style.visibility="hidden",e.style.visibility="visible"}let RS=class e{constructor(t,i){this._messageWidget=new w,this._messageListeners=new v,this._editor=t,this._visible=e.MESSAGE_VISIBLE.bindTo(i),this._editorListener=this._editor.onDidAttemptReadOnlyEdit(()=>this._onDidAttemptReadOnlyEdit())}static get(t){return t.getContribution(e.ID)}dispose(){this._editorListener.dispose(),this._messageListeners.dispose(),this._messageWidget.dispose(),this._visible.reset()}showMessage(e,t){let i;MS(e),this._visible.set(!0),this._messageWidget.clear(),this._messageListeners.clear(),this._messageWidget.value=new PS(this._editor,t,e),this._messageListeners.add(this._editor.onDidBlurEditorText(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidChangeCursorPosition(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidDispose(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidChangeModel(()=>this.closeMessage())),this._messageListeners.add(new Ua(()=>this.closeMessage(),3e3)),this._messageListeners.add(this._editor.onMouseMove(e=>{e.target.position&&(i?i.containsPosition(e.target.position)||this.closeMessage():i=new ro(t.lineNumber-3,1,e.target.position.lineNumber+3,1))}))}closeMessage(){this._visible.reset(),this._messageListeners.clear(),this._messageWidget.value&&this._messageListeners.add(PS.fadeOut(this._messageWidget.value))}_onDidAttemptReadOnlyEdit(){this._editor.hasModel()&&this.showMessage(t(0,"Cannot edit in read-only editor"),this._editor.getPosition())}};RS.ID="editor.contrib.messageController",RS.MESSAGE_VISIBLE=new Ji("messageVisible",!1,t(0,"Whether the editor is currently showing an inline message")),RS=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,1)}}(0,en)],RS),Xn(new(Gn.bindToContribution(RS.get))({id:"leaveEditorMessage",precondition:RS.MESSAGE_VISIBLE,handler:e=>e.closeMessage(),kbOpts:{weight:130,primary:9}}));class PS{constructor(e,{lineNumber:t,column:i},n){this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._editor=e,this._editor.revealLinesInCenterIfOutsideViewport(t,t,0),this._position={lineNumber:t,column:i-1},this._domNode=document.createElement("div"),this._domNode.classList.add("monaco-editor-overlaymessage");const o=document.createElement("div");o.classList.add("anchor","top"),this._domNode.appendChild(o);const s=document.createElement("div");s.classList.add("message"),s.textContent=n,this._domNode.appendChild(s);const r=document.createElement("div");r.classList.add("anchor","below"),this._domNode.appendChild(r),this._editor.addContentWidget(this),this._domNode.classList.add("fadeIn")}static fadeOut(e){let t;const i=()=>{e.dispose(),clearTimeout(t),e.getDomNode().removeEventListener("animationend",i)};return t=setTimeout(i,110),e.getDomNode().addEventListener("animationend",i),e.getDomNode().classList.add("fadeOut"),{dispose:i}}dispose(){this._editor.removeContentWidget(this)}getId(){return"messageoverlay"}getDomNode(){return this._domNode}getPosition(){return{position:this._position,preference:[1,2]}}afterRender(e){this._domNode.classList.toggle("below",2===e)}}Jn(RS.ID,RS),Cn((e,t)=>{const i=e.getColor(mm);if(i){let n=e.type===ln.HIGH_CONTRAST?2:1;t.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.below { border-top-color: ${i}; }`),t.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.top { border-bottom-color: ${i}; }`),t.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { border: ${n}px solid ${i}; }`)}const n=e.getColor(gm);n&&t.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { background-color: ${n}; }`);const o=e.getColor(pm);o&&t.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { color: ${o}; }`)});const FS=kt("keybindingService");var BS=function(e,t){return function(i,n){t(i,n,e)}};class WS extends Pt{constructor(e,t){super(e.command?e.command.id:e.title,function i(e){return e.replace(/\r\n|\r|\n/g," ")}(e.title),void 0,!e.disabled,t),this.action=e}}let VS=class extends C{constructor(e,t,i,n){super(),this._editor=e,this._delegate=t,this._contextMenuService=i,this._visible=!1,this._showingActions=this._register(new w),this._keybindingResolver=new zS({getKeybindings:()=>n.getKeybindings()})}get isVisible(){return this._visible}show(e,t,i,n){return o=this,void 0,r=function*(){const o=n.includeDisabledActions?t.allActions:t.validActions;if(!o.length)return void(this._visible=!1);if(!this._editor.getDomNode())throw this._visible=!1,l();this._visible=!0,this._showingActions.value=t;const s=this.getMenuActions(e,o,t.documentation),r=Tt.isIPosition(i)?this._toCoords(i):i||{x:0,y:0},a=this._keybindingResolver.getResolver();this._contextMenuService.showContextMenu({domForShadowRoot:this._editor.getDomNode(),getAnchor:()=>r,getActions:()=>s,onHide:()=>{this._visible=!1,this._editor.focus()},autoSelectFirstItem:!0,getKeyBinding:e=>e instanceof WS?a(e.action):void 0})},new((s=void 0)||(s=Promise))((function(e,t){function i(e){try{a(r.next(e))}catch(e){t(e)}}function n(e){try{a(r.throw(e))}catch(e){t(e)}}function a(t){t.done?e(t.value):function o(e){return e instanceof s?e:new s((function(t){t(e)}))}(t.value).then(i,n)}a((r=r.apply(o,[])).next())}));var o,s,r}getMenuActions(e,t,i){var n,o;const s=e=>new WS(e.action,()=>this._delegate.onSelectCodeAction(e)),r=t.map(s),a=[...i],l=this._editor.getModel();if(l&&r.length)for(const i of $l.all(l))i._getAdditionalMenuItems&&a.push(...i._getAdditionalMenuItems({trigger:e.type,only:null===(o=null===(n=e.filter)||void 0===n?void 0:n.include)||void 0===o?void 0:o.value},t.map(e=>e.action)));return a.length&&r.push(new Bt,...a.map(e=>s(new SS({title:e.title,command:e},void 0)))),r}_toCoords(e){if(!this._editor.hasModel())return{x:0,y:0};this._editor.revealPosition(e,1),this._editor.render();const t=this._editor.getScrolledVisiblePosition(e),i=cu(this._editor.getDomNode());return{x:i.left+t.left,y:i.top+t.top+t.height}}};VS=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([BS(2,Dy),BS(3,FS)],VS);class zS{constructor(e){this._keybindingProvider=e}getResolver(){const e=new uS(()=>this._keybindingProvider.getKeybindings().filter(e=>zS.codeActionCommands.indexOf(e.command)>=0).filter(e=>e.resolvedKeybinding).map(e=>{let t=e.commandArgs;return e.command===wS?t={kind:_S.SourceOrganizeImports.value}:e.command===yS&&(t={kind:_S.SourceFixAll.value}),Object.assign({resolvedKeybinding:e.resolvedKeybinding},vS.fromUser(t,{kind:_S.None,apply:"never"}))}));return t=>{if(t.kind){const i=this.bestKeybindingForCodeAction(t,e.getValue());return null==i?void 0:i.resolvedKeybinding}}}bestKeybindingForCodeAction(e,t){if(!e.kind)return;const i=new _S(e.kind);return t.filter(e=>e.kind.contains(i)).filter(t=>!t.preferred||e.isPreferred).reduceRight((e,t)=>e?e.kind.contains(t.kind)?t:e:t,void 0)}}var HS;zS.codeActionCommands=["editor.action.refactor","editor.action.codeAction","editor.action.sourceAction",wS,yS],function(e){e.Hidden={type:0},e.Showing=class{constructor(e,t,i,n){this.actions=e,this.trigger=t,this.editorPosition=i,this.widgetPosition=n,this.type=1}}}(HS||(HS={}));let US=class e extends C{constructor(e,t,i,n){super(),this._editor=e,this._quickFixActionId=t,this._preferredFixActionId=i,this._keybindingService=n,this._onClick=this._register(new oe),this.onClick=this._onClick.event,this._state=HS.Hidden,this._domNode=document.createElement("div"),this._domNode.className=un.lightBulb.classNames,this._editor.addContentWidget(this),this._register(this._editor.onDidChangeModelContent(e=>{const t=this._editor.getModel();(1!==this.state.type||!t||this.state.editorPosition.lineNumber>=t.getLineCount())&&this.hide()})),Fg.ignoreTarget(this._domNode),this._register(function e(t,i,n){return Yd(t,qd(i),n)}(this._domNode,e=>{if(1!==this.state.type)return;this._editor.focus(),e.preventDefault();const{top:t,height:i}=cu(this._domNode),n=this._editor.getOption(54);let o=Math.floor(n/3);null!==this.state.widgetPosition.position&&this.state.widgetPosition.position.lineNumber{if(1!=(1&e.buttons))return;this.hide();const t=new Wg;t.startMonitoring(e.target,e.buttons,Bg,()=>{},()=>{t.dispose()})})),this._register(this._editor.onDidChangeConfiguration(e=>{e.hasChanged(52)&&!this._editor.getOption(52).enabled&&this.hide()})),this._updateLightBulbTitleAndIcon(),this._register(this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitleAndIcon,this))}dispose(){super.dispose(),this._editor.removeContentWidget(this)}getId(){return"LightBulbWidget"}getDomNode(){return this._domNode}getPosition(){return 1===this._state.type?this._state.widgetPosition:null}update(t,i,n){if(t.validActions.length<=0)return this.hide();const o=this._editor.getOptions();if(!o.get(52).enabled)return this.hide();const s=this._editor.getModel();if(!s)return this.hide();const{lineNumber:r,column:a}=s.validatePosition(n),l=s.getOptions().tabSize,h=o.get(38),c=s.getLineContent(r),d=wc.computeIndentLevel(c,l),u=e=>e>2&&this._editor.getTopForLineNumber(e)===this._editor.getTopForLineNumber(e-1);let g=r;if(!(h.spaceWidth*d>22))if(r>1&&!u(r-1))g-=1;else if(u(r+1)){if(a*h.spaceWidth<22)return this.hide()}else g+=1;this.state=new HS.Showing(t,i,n,{position:{lineNumber:g,column:1},preference:e._posPref}),this._editor.layoutContentWidget(this)}hide(){this.state=HS.Hidden,this._editor.layoutContentWidget(this)}get state(){return this._state}set state(e){this._state=e,this._updateLightBulbTitleAndIcon()}_updateLightBulbTitleAndIcon(){if(1===this.state.type&&this.state.actions.hasAutoFix){this._domNode.classList.remove(...un.lightBulb.classNamesArray),this._domNode.classList.add(...un.lightbulbAutofix.classNamesArray);const e=this._keybindingService.lookupKeybinding(this._preferredFixActionId);if(e)return void(this.title=t(0,"Show Fixes. Preferred Fix Available ({0})",e.getLabel()))}this._domNode.classList.remove(...un.lightbulbAutofix.classNamesArray),this._domNode.classList.add(...un.lightBulb.classNamesArray);const e=this._keybindingService.lookupKeybinding(this._quickFixActionId);this.title=e?t(0,"Show Fixes ({0})",e.getLabel()):t(0,"Show Fixes")}set title(e){this._domNode.title=e}};US._posPref=[0],US=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,3)}}(0,FS)],US),Cn((e,t)=>{var i;const n=null===(i=e.getColor($m))||void 0===i?void 0:i.transparent(.7),o=e.getColor(mf);o&&t.addRule(`\n\t\t.monaco-editor .contentWidgets ${un.lightBulb.cssSelector} {\n\t\t\tcolor: ${o};\n\t\t\tbackground-color: ${n};\n\t\t}`);const s=e.getColor(ff);s&&t.addRule(`\n\t\t.monaco-editor .contentWidgets ${un.lightbulbAutofix.cssSelector} {\n\t\t\tcolor: ${s};\n\t\t\tbackground-color: ${n};\n\t\t}`)});var KS,$S=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let jS=class extends C{constructor(e,t,i,n,o){super(),this._editor=e,this.delegate=n,this._activeCodeActions=this._register(new w),KS.set(this,!1),this._codeActionWidget=new uS(()=>this._register(o.createInstance(VS,this._editor,{onSelectCodeAction:e=>$S(this,void 0,void 0,(function*(){this.delegate.applyCodeAction(e,!0)}))}))),this._lightBulbWidget=new uS(()=>{const e=this._register(o.createInstance(US,this._editor,t,i));return this._register(e.onClick(e=>this.showCodeActionList(e.trigger,e.actions,e,{includeDisabledActions:!1}))),e})}dispose(){(function(e,t,i){if(!t.has(e))throw new TypeError("attempted to set private field on non-instance");t.set(e,!0)})(this,KS),super.dispose()}update(e){var t,i,o;return $S(this,void 0,void 0,(function*(){if(1!==e.type)return void(null===(t=this._lightBulbWidget.rawValue)||void 0===t||t.hide());let s;try{s=yield e.actions}catch(e){return void n(e)}if(!function(e,t){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return t.get(e)}(this,KS))if(this._lightBulbWidget.getValue().update(s,e.trigger,e.position),2===e.trigger.type){if(null===(i=e.trigger.filter)||void 0===i?void 0:i.include){const t=this.tryGetValidActionToApply(e.trigger,s);if(t){try{yield this.delegate.applyCodeAction(t,!1)}finally{s.dispose()}return}if(e.trigger.context){const t=this.getInvalidActionThatWouldHaveBeenApplied(e.trigger,s);if(t&&t.action.disabled)return RS.get(this._editor).showMessage(t.action.disabled,e.trigger.context.position),void s.dispose()}}const t=!!(null===(o=e.trigger.filter)||void 0===o?void 0:o.include);if(e.trigger.context&&(!s.allActions.length||!t&&!s.validActions.length))return RS.get(this._editor).showMessage(e.trigger.context.notAvailableMessage,e.trigger.context.position),this._activeCodeActions.value=s,void s.dispose();this._activeCodeActions.value=s,this._codeActionWidget.getValue().show(e.trigger,s,e.position,{includeDisabledActions:t})}else this._codeActionWidget.getValue().isVisible?s.dispose():this._activeCodeActions.value=s}))}getInvalidActionThatWouldHaveBeenApplied(e,t){if(t.allActions.length)return"first"===e.autoApply&&0===t.validActions.length||"ifSingle"===e.autoApply&&1===t.allActions.length?t.allActions.find(({action:e})=>e.disabled):void 0}tryGetValidActionToApply(e,t){if(t.validActions.length)return"first"===e.autoApply&&t.validActions.length>0||"ifSingle"===e.autoApply&&1===t.validActions.length?t.validActions[0]:void 0}showCodeActionList(e,t,i,n){return $S(this,void 0,void 0,(function*(){this._codeActionWidget.getValue().show(e,t,i,n)}))}};var qS,GS;KS=new WeakMap,jS=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,4)}}(0,Et)],jS),function(e){e[e.Hint=1]="Hint",e[e.Info=2]="Info",e[e.Warning=4]="Warning",e[e.Error=8]="Error"}(qS||(qS={})),function(e){e.compare=function i(e,t){return t-e};const n=Object.create(null);n[e.Error]=t(0,"Error"),n[e.Warning]=t(0,"Warning"),n[e.Info]=t(0,"Info"),e.toString=function o(e){return n[e]||""},e.fromSeverity=function s(t){switch(t){case hw.Error:return e.Error;case hw.Warning:return e.Warning;case hw.Info:return e.Info;case hw.Ignore:return e.Hint}},e.toSeverity=function r(t){switch(t){case e.Error:return hw.Error;case e.Warning:return hw.Warning;case e.Info:return hw.Info;case e.Hint:return hw.Ignore}}}(qS||(qS={})),function(e){const t="";function i(e,i){let n=[t];return n.push(e.source?e.source.replace("¦","\\¦"):t),n.push(e.code?"string"==typeof e.code?e.code.replace("¦","\\¦"):e.code.value.replace("¦","\\¦"):t),n.push(null!=e.severity?qS.toString(e.severity):t),n.push(e.message&&i?e.message.replace("¦","\\¦"):t),n.push(null!=e.startLineNumber?e.startLineNumber.toString():t),n.push(null!=e.startColumn?e.startColumn.toString():t),n.push(null!=e.endLineNumber?e.endLineNumber.toString():t),n.push(null!=e.endColumn?e.endColumn.toString():t),n.push(t),n.join("¦")}e.makeKey=function n(e){return i(e,!0)},e.makeKeyOptionalMessage=i}(GS||(GS={}));const YS=kt("markerService");var ZS,XS=function(e,t){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return t.get(e)},QS=function(e,t,i){if(!t.has(e))throw new TypeError("attempted to set private field on non-instance");return t.set(e,i),i};const JS=new Ji("supportedCodeAction","");class eL extends C{constructor(e,t,i,n=250){super(),this._editor=e,this._markerService=t,this._signalChange=i,this._delay=n,this._autoTriggerTimer=this._register(new Ua),this._register(this._markerService.onMarkerChanged(e=>this._onMarkerChanges(e))),this._register(this._editor.onDidChangeCursorPosition(()=>this._onCursorChange()))}trigger(e){const t=this._getRangeOfSelectionUnlessWhitespaceEnclosed(e);return this._createEventAndSignalChange(e,t)}_onMarkerChanges(e){const t=this._editor.getModel();t&&e.some(e=>Ds(e,t.uri))&&this._autoTriggerTimer.cancelAndSet(()=>{this.trigger({type:1})},this._delay)}_onCursorChange(){this._autoTriggerTimer.cancelAndSet(()=>{this.trigger({type:1})},this._delay)}_getRangeOfMarker(e){const t=this._editor.getModel();if(t)for(const i of this._markerService.read({resource:t.uri})){const n=t.validateRange(i);if(ro.intersectRanges(n,e))return ro.lift(n)}}_getRangeOfSelectionUnlessWhitespaceEnclosed(e){if(!this._editor.hasModel())return;const t=this._editor.getModel(),i=this._editor.getSelection();if(i.isEmpty()&&1===e.type){const{lineNumber:e,column:n}=i.getPosition(),o=t.getLineContent(e);if(0===o.length)return;if(1===n){if(/\s/.test(o[0]))return}else if(n===t.getLineMaxColumn(e)){if(/\s/.test(o[o.length-1]))return}else if(/\s/.test(o[n-2])&&/\s/.test(o[n-1]))return}return i}_createEventAndSignalChange(e,t){const i=this._editor.getModel();if(!t||!i)return void this._signalChange(void 0);const n=this._getRangeOfMarker(t),o=n?n.getStartPosition():t.getStartPosition(),s={trigger:e,selection:t,position:o};return this._signalChange(s),s}}var tL;!function(e){e.Empty={type:0},e.Triggered=class{constructor(e,t,i,n){this.trigger=e,this.rangeOrSelection=t,this.position=i,this._cancellablePromise=n,this.type=1,this.actions=n.catch(e=>{if(a(e))return iL;throw e})}cancel(){this._cancellablePromise.cancel()}}}(tL||(tL={}));const iL={allActions:[],validActions:[],dispose:()=>{},documentation:[],hasAutoFix:!1};class nL extends C{constructor(e,t,i,n){super(),this._editor=e,this._markerService=t,this._progressService=n,this._codeActionOracle=this._register(new w),this._state=tL.Empty,this._onDidChangeState=this._register(new oe),this.onDidChangeState=this._onDidChangeState.event,ZS.set(this,!1),this._supportedCodeActions=JS.bindTo(i),this._register(this._editor.onDidChangeModel(()=>this._update())),this._register(this._editor.onDidChangeModelLanguage(()=>this._update())),this._register($l.onDidChange(()=>this._update())),this._update()}dispose(){XS(this,ZS)||(QS(this,ZS,!0),super.dispose(),this.setState(tL.Empty,!0))}_update(){if(XS(this,ZS))return;this._codeActionOracle.value=void 0,this.setState(tL.Empty);const e=this._editor.getModel();if(e&&$l.has(e)&&!this._editor.getOption(77)){const t=[];for(const i of $l.all(e))Array.isArray(i.providedCodeActionKinds)&&t.push(...i.providedCodeActionKinds);this._supportedCodeActions.set(t.join(" ")),this._codeActionOracle.value=new eL(this._editor,this._markerService,t=>{var i;if(!t)return void this.setState(tL.Empty);const n=Pa(i=>ES(e,t.selection,t.trigger,Ny.None,i));2===t.trigger.type&&(null===(i=this._progressService)||void 0===i||i.showWhile(n,250)),this.setState(new tL.Triggered(t.trigger,t.selection,t.position,n))},void 0),this._codeActionOracle.value.trigger({type:1})}else this._supportedCodeActions.reset()}trigger(e){this._codeActionOracle.value&&this._codeActionOracle.value.trigger(e)}setState(e,t){e!==this._state&&(1===this._state.type&&this._state.cancel(),this._state=e,t||XS(this,ZS)||this._onDidChangeState.fire(e))}}ZS=new WeakMap;var oL=function(e,t){return function(i,n){t(i,n,e)}},sL=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function rL(e){return Ri.regex(JS.keys()[0],new RegExp("(\\s|^)"+$t(e.value)+"\\b"))}const aL={type:"object",defaultSnippets:[{body:{kind:""}}],properties:{kind:{type:"string",description:t(0,"Kind of the code action to run.")},apply:{type:"string",description:t(0,"Controls when the returned actions are applied."),default:"ifSingle",enum:["first","ifSingle","never"],enumDescriptions:[t(0,"Always apply the first returned code action."),t(0,"Apply the first returned code action if it is the only one."),t(0,"Do not apply the returned code actions.")]},preferred:{type:"boolean",default:!1,description:t(0,"Controls if only preferred code actions should be returned.")}}};let lL=class e extends C{constructor(e,t,i,n,o){super(),this._instantiationService=o,this._editor=e,this._model=this._register(new nL(this._editor,t,i,n)),this._register(this._model.onDidChangeState(e=>this.update(e))),this._ui=new uS(()=>this._register(new jS(e,dL.Id,uL.Id,{applyCodeAction:(e,t)=>sL(this,void 0,void 0,(function*(){try{yield this._applyCodeAction(e)}finally{t&&this._trigger({type:1,filter:{}})}}))},this._instantiationService)))}static get(t){return t.getContribution(e.ID)}update(e){this._ui.getValue().update(e)}showCodeActions(e,t,i){return this._ui.getValue().showCodeActionList(e,t,i,{includeDisabledActions:!1})}manualTriggerAtCurrentPosition(e,t,i){if(!this._editor.hasModel())return;RS.get(this._editor).closeMessage();const n=this._editor.getPosition();this._trigger({type:2,filter:t,autoApply:i,context:{notAvailableMessage:e,position:n}})}_trigger(e){return this._model.trigger(e)}_applyCodeAction(e){return this._instantiationService.invokeFunction(hL,e,this._editor)}};function hL(e,i,n){return sL(this,void 0,void 0,(function*(){const o=e.get(gS),s=e.get(on),r=e.get(Kn),a=e.get(cw);if(r.publicLog2("codeAction.applyCodeAction",{codeActionTitle:i.action.title,codeActionKind:i.action.kind,codeActionIsPreferred:!!i.action.isPreferred}),yield i.resolve(Aa.None),i.action.edit&&(yield o.apply(pS.convert(i.action.edit),{editor:n,label:i.action.title})),i.action.command)try{yield s.executeCommand(i.action.command.id,...i.action.command.arguments||[])}catch(e){const i=function l(e){return"string"==typeof e?e:e instanceof Error&&"string"==typeof e.message?e.message:void 0}(e);a.error("string"==typeof i?i:t(0,"An unknown error occurred while applying the code action"))}}))}function cL(e,t,i,n){if(e.hasModel()){const o=lL.get(e);o&&o.manualTriggerAtCurrentPosition(t,i,n)}}lL.ID="editor.contrib.quickFixController",lL=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([oL(1,YS),oL(2,en),oL(3,Iy),oL(4,Et)],lL);class dL extends Yn{constructor(){super({id:dL.Id,label:t(0,"Quick Fix..."),alias:"Quick Fix...",precondition:Ri.and(cd.writable,cd.hasCodeActionsProvider),kbOpts:{kbExpr:cd.editorTextFocus,primary:2132,weight:100}})}run(e,i){return cL(i,t(0,"No code actions available"),void 0,void 0)}}dL.Id="editor.action.quickFix";class uL extends Yn{constructor(){super({id:uL.Id,label:t(0,"Auto Fix..."),alias:"Auto Fix...",precondition:Ri.and(cd.writable,rL(_S.QuickFix)),kbOpts:{kbExpr:cd.editorTextFocus,primary:1620,mac:{primary:2644},weight:100}})}run(e,i){return cL(i,t(0,"No auto fixes available"),{include:_S.QuickFix,onlyIncludePreferredActions:!0},"ifSingle")}}uL.Id="editor.action.autoFix",Jn(lL.ID,lL),Qn(dL),Qn(class extends Yn{constructor(){super({id:"editor.action.refactor",label:t(0,"Refactor..."),alias:"Refactor...",precondition:Ri.and(cd.writable,cd.hasCodeActionsProvider),kbOpts:{kbExpr:cd.editorTextFocus,primary:3120,mac:{primary:1328},weight:100},contextMenuOpts:{group:"1_modification",order:2,when:Ri.and(cd.writable,rL(_S.Refactor))},description:{description:"Refactor...",args:[{name:"args",schema:aL}]}})}run(e,i,n){const o=vS.fromUser(n,{kind:_S.Refactor,apply:"never"});return cL(i,"string"==typeof(null==n?void 0:n.kind)?t(0,o.preferred?"No preferred refactorings for '{0}' available":"No refactorings for '{0}' available",n.kind):t(0,o.preferred?"No preferred refactorings available":"No refactorings available"),{include:_S.Refactor.contains(o.kind)?o.kind:_S.None,onlyIncludePreferredActions:o.preferred},o.apply)}}),Qn(class extends Yn{constructor(){super({id:"editor.action.sourceAction",label:t(0,"Source Action..."),alias:"Source Action...",precondition:Ri.and(cd.writable,cd.hasCodeActionsProvider),contextMenuOpts:{group:"1_modification",order:2.1,when:Ri.and(cd.writable,rL(_S.Source))},description:{description:"Source Action...",args:[{name:"args",schema:aL}]}})}run(e,i,n){const o=vS.fromUser(n,{kind:_S.Source,apply:"never"});return cL(i,"string"==typeof(null==n?void 0:n.kind)?t(0,o.preferred?"No preferred source actions for '{0}' available":"No source actions for '{0}' available",n.kind):t(0,o.preferred?"No preferred source actions available":"No source actions available"),{include:_S.Source.contains(o.kind)?o.kind:_S.None,includeSourceActions:!0,onlyIncludePreferredActions:o.preferred},o.apply)}}),Qn(class extends Yn{constructor(){super({id:wS,label:t(0,"Organize Imports"),alias:"Organize Imports",precondition:Ri.and(cd.writable,rL(_S.SourceOrganizeImports)),kbOpts:{kbExpr:cd.editorTextFocus,primary:1581,weight:100}})}run(e,i){return cL(i,t(0,"No organize imports action available"),{include:_S.SourceOrganizeImports,includeSourceActions:!0},"ifSingle")}}),Qn(uL),Qn(class extends Yn{constructor(){super({id:yS,label:t(0,"Fix All"),alias:"Fix All",precondition:Ri.and(cd.writable,rL(_S.SourceFixAll))})}run(e,i){return cL(i,t(0,"No fix all action available"),{include:_S.SourceFixAll,includeSourceActions:!0},"ifSingle")}}),Xn(new class extends Gn{constructor(){super({id:"editor.action.codeAction",precondition:Ri.and(cd.writable,cd.hasCodeActionsProvider),description:{description:"Trigger a code action",args:[{name:"args",schema:aL}]}})}runEditorCommand(e,i,n){const o=vS.fromUser(n,{kind:_S.Empty,apply:"ifSingle"});return cL(i,"string"==typeof(null==n?void 0:n.kind)?t(0,o.preferred?"No preferred code actions for '{0}' available":"No code actions for '{0}' available",n.kind):t(0,o.preferred?"No preferred code actions available":"No code actions available"),{include:o.kind,includeSourceActions:!0,onlyIncludePreferredActions:o.preferred},o.apply)}});var gL=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class pL{constructor(){this.lenses=[],this._disposables=new v}dispose(){this._disposables.dispose()}add(e,t){this._disposables.add(e);for(const i of e.lenses)this.lenses.push({symbol:i,provider:t})}}function mL(e,t){return gL(this,void 0,void 0,(function*(){const i=Ul.ordered(e),n=new Map,s=new pL,r=i.map((i,r)=>gL(this,void 0,void 0,(function*(){n.set(i,r);try{const n=yield Promise.resolve(i.provideCodeLenses(e,t));n&&s.add(n,i)}catch(e){o(e)}})));return yield Promise.all(r),s.lenses=Jr(s.lenses,(e,t)=>e.symbol.range.startLineNumbert.symbol.range.startLineNumber?1:n.get(e.provider)n.get(t.provider)?1:e.symbol.range.startColumnt.symbol.range.startColumn?1:0),s}))}sn.registerCommand("_executeCodeLensProvider",(function(e,...t){let[i,n]=t;Ne(mt.isUri(i)),Ne("number"==typeof n||!n);const o=e.get(At).getModel(i);if(!o)throw h();const s=[],r=new v;return mL(o,Aa.None).then(e=>{r.add(e);let t=[];for(const i of e.lenses)null==n||Boolean(i.symbol.command)?s.push(i.symbol):n-- >0&&i.provider.resolveCodeLens&&t.push(Promise.resolve(i.provider.resolveCodeLens(o,i.symbol,Aa.None)).then(e=>s.push(e||i.symbol)));return Promise.all(t)}).then(()=>s).finally(()=>{setTimeout(()=>r.dispose(),100)})}));const fL=new RegExp(`(\\\\)?\\$\\((${gn.iconNameExpression}(?:${gn.iconModifierExpression})?)\\)`,"g");function _L(e){const t=new Array;let i,n=0,o=0;for(;null!==(i=fL.exec(e));){t.push(e.substring(n,o=i.index||0)),n=(i.index||0)+i[0].length;const[,s,r]=i;t.push(s?`$(${r})`:bL({id:r}))}return n{e.symbol.command&&l.push(e.symbol),n.addDecoration({range:e.symbol.range,options:xc.EMPTY},e=>this._decorationIds[t]=e),a=a?ro.plusRange(a,e.symbol.range):ro.lift(e.symbol.range)}),this._viewZone=new vL(a.startLineNumber-1,s,r),this._viewZoneId=o.addZone(this._viewZone),l.length>0&&(this._createContentWidgetIfNecessary(),this._contentWidget.withCommands(l,!1))}_createContentWidgetIfNecessary(){this._contentWidget?this._editor.layoutContentWidget(this._contentWidget):(this._contentWidget=new CL(this._editor,this._className,this._viewZone.afterLineNumber+1),this._editor.addContentWidget(this._contentWidget))}dispose(e,t){this._decorationIds.forEach(e.removeDecoration,e),this._decorationIds=[],t&&t.removeZone(this._viewZoneId),this._contentWidget&&(this._editor.removeContentWidget(this._contentWidget),this._contentWidget=void 0),this._isDisposed=!0}isDisposed(){return this._isDisposed}isValid(){return this._decorationIds.some((e,t)=>{const i=this._editor.getModel().getDecorationRange(e);return!(!i||ro.isEmpty(this._data[t].symbol.range)!==i.isEmpty())})}updateCodeLensSymbols(e,t){this._decorationIds.forEach(t.removeDecoration,t),this._decorationIds=[],this._data=e,this._data.forEach((e,i)=>{t.addDecoration({range:e.symbol.range,options:xc.EMPTY},e=>this._decorationIds[i]=e)})}updateHeight(e,t){this._viewZone.heightInPx=e,t.layoutZone(this._viewZoneId),this._contentWidget&&this._editor.layoutContentWidget(this._contentWidget)}computeIfNecessary(e){if(!this._viewZone.domNode.hasAttribute("monaco-visible-view-zone"))return null;for(let t=0;t{const i=e.getColor(O_);i&&(t.addRule(`.monaco-editor .codelens-decoration { color: ${i}; }`),t.addRule(`.monaco-editor .codelens-decoration .codicon { color: ${i}; }`));const n=e.getColor(pf);n&&(t.addRule(`.monaco-editor .codelens-decoration > a:hover { color: ${n} !important; }`),t.addRule(`.monaco-editor .codelens-decoration > a:hover .codicon { color: ${n} !important; }`))});var SL,LL=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};!function(e){e[e.None=0]="None",e[e.Initialized=1]="Initialized",e[e.Closed=2]="Closed"}(SL||(SL={}));class DL extends C{constructor(e,t=Object.create(null)){super(),this.database=e,this.options=t,this._onDidChangeStorage=this._register(new oe),this.onDidChangeStorage=this._onDidChangeStorage.event,this.state=SL.None,this.cache=new Map,this.flushDelayer=new Va(DL.DEFAULT_FLUSH_DELAY),this.pendingDeletes=new Set,this.pendingInserts=new Map,this.whenFlushedCallbacks=[],this.registerListeners()}registerListeners(){this._register(this.database.onDidChangeItemsExternal(e=>this.onDidChangeItemsExternal(e)))}onDidChangeItemsExternal(e){var t,i;null===(t=e.changed)||void 0===t||t.forEach((e,t)=>this.accept(t,e)),null===(i=e.deleted)||void 0===i||i.forEach(e=>this.accept(e,void 0))}accept(e,t){if(this.state===SL.Closed)return;let i=!1;ke(t)?i=this.cache.delete(e):this.cache.get(e)!==t&&(this.cache.set(e,t),i=!0),i&&this._onDidChangeStorage.fire(e)}get(e,t){const i=this.cache.get(e);return ke(i)?t:i}getBoolean(e,t){const i=this.get(e);return ke(i)?t:"true"===i}getNumber(e,t){const i=this.get(e);return ke(i)?t:parseInt(i,10)}set(e,t){return LL(this,void 0,void 0,(function*(){if(this.state===SL.Closed)return;if(ke(t))return this.delete(e);const i=String(t);return this.cache.get(e)!==i?(this.cache.set(e,i),this.pendingInserts.set(e,i),this.pendingDeletes.delete(e),this._onDidChangeStorage.fire(e),this.flushDelayer.trigger(()=>this.flushPending())):void 0}))}delete(e){return LL(this,void 0,void 0,(function*(){if(this.state!==SL.Closed)return this.cache.delete(e)?(this.pendingDeletes.has(e)||this.pendingDeletes.add(e),this.pendingInserts.delete(e),this._onDidChangeStorage.fire(e),this.flushDelayer.trigger(()=>this.flushPending())):void 0}))}get hasPending(){return this.pendingInserts.size>0||this.pendingDeletes.size>0}flushPending(){return LL(this,void 0,void 0,(function*(){if(!this.hasPending)return;const e={insert:this.pendingInserts,delete:this.pendingDeletes};return this.pendingDeletes=new Set,this.pendingInserts=new Map,this.database.updateItems(e).finally(()=>{var e;if(!this.hasPending)for(;this.whenFlushedCallbacks.length;)null===(e=this.whenFlushedCallbacks.pop())||void 0===e||e()})}))}dispose(){this.flushDelayer.cancel(),this.flushDelayer.dispose(),super.dispose()}}DL.DEFAULT_FLUSH_DELAY=100;class EL{constructor(){this.onDidChangeItemsExternal=ie.None,this.items=new Map}updateItems(e){return LL(this,void 0,void 0,(function*(){e.insert&&e.insert.forEach((e,t)=>this.items.set(t,e)),e.delete&&e.delete.forEach(e=>this.items.delete(e))}))}}const xL="__$__targetStorageMarker",kL=kt("storageService");var NL;!function(e){e[e.NONE=0]="NONE",e[e.SHUTDOWN=1]="SHUTDOWN"}(NL||(NL={}));class IL extends C{constructor(e={flushInterval:IL.DEFAULT_FLUSH_INTERVAL}){super(),this.options=e,this._onDidChangeValue=this._register(new se),this._onDidChangeTarget=this._register(new se),this._onWillSaveState=this._register(new oe),this.onWillSaveState=this._onWillSaveState.event,this._workspaceKeyTargets=void 0,this._globalKeyTargets=void 0}emitDidChangeValue(e,t){t===xL?(0===e?this._globalKeyTargets=void 0:1===e&&(this._workspaceKeyTargets=void 0),this._onDidChangeTarget.fire({scope:e})):this._onDidChangeValue.fire({scope:e,key:t,target:this.getKeyTargets(e)[t]})}get(e,t,i){var n;return null===(n=this.getStorage(t))||void 0===n?void 0:n.get(e,i)}getBoolean(e,t,i){var n;return null===(n=this.getStorage(t))||void 0===n?void 0:n.getBoolean(e,i)}getNumber(e,t,i){var n;return null===(n=this.getStorage(t))||void 0===n?void 0:n.getNumber(e,i)}store(e,t,i,n){ke(t)?this.remove(e,i):this.withPausedEmitters(()=>{var o;this.updateKeyTarget(e,i,n),null===(o=this.getStorage(i))||void 0===o||o.set(e,t)})}remove(e,t){this.withPausedEmitters(()=>{var i;this.updateKeyTarget(e,t,void 0),null===(i=this.getStorage(t))||void 0===i||i.delete(e)})}withPausedEmitters(e){this._onDidChangeValue.pause(),this._onDidChangeTarget.pause();try{e()}finally{this._onDidChangeValue.resume(),this._onDidChangeTarget.resume()}}updateKeyTarget(e,t,i){var n,o;const s=this.getKeyTargets(t);"number"==typeof i?s[e]!==i&&(s[e]=i,null===(n=this.getStorage(t))||void 0===n||n.set(xL,JSON.stringify(s))):"number"==typeof s[e]&&(delete s[e],null===(o=this.getStorage(t))||void 0===o||o.set(xL,JSON.stringify(s)))}get workspaceKeyTargets(){return this._workspaceKeyTargets||(this._workspaceKeyTargets=this.loadKeyTargets(1)),this._workspaceKeyTargets}get globalKeyTargets(){return this._globalKeyTargets||(this._globalKeyTargets=this.loadKeyTargets(0)),this._globalKeyTargets}getKeyTargets(e){return 0===e?this.globalKeyTargets:this.workspaceKeyTargets}loadKeyTargets(e){const t=this.get(xL,e);if(t)try{return JSON.parse(t)}catch(e){}return Object.create(null)}}IL.DEFAULT_FLUSH_INTERVAL=6e4;class TL extends IL{constructor(){super(),this.globalStorage=new DL(new EL),this.workspaceStorage=new DL(new EL),this._register(this.workspaceStorage.onDidChangeStorage(e=>this.emitDidChangeValue(1,e))),this._register(this.globalStorage.onDidChangeStorage(e=>this.emitDidChangeValue(0,e)))}getStorage(e){return 0===e?this.globalStorage:this.workspaceStorage}}const AL=kt("ICodeLensCache");class ML{constructor(e,t){this.lineCount=e,this.data=t}}let OL=class{constructor(e){this._fakeProvider=new class{provideCodeLenses(){throw new Error("not supported")}},this._cache=new ka(20,.75),ja(()=>e.remove("codelens/cache",1));const t="codelens/cache2",i=e.get(t,1,"{}");this._deserialize(i),mv(e.onWillSaveState)(i=>{i.reason===NL.SHUTDOWN&&e.store(t,this._serialize(),1,1)})}put(e,t){const i=t.lenses.map(e=>{var t;return{range:e.symbol.range,command:e.symbol.command&&{id:"",title:null===(t=e.symbol.command)||void 0===t?void 0:t.title}}}),n=new pL;n.add({lenses:i,dispose:()=>{}},this._fakeProvider);const o=new ML(e.getLineCount(),n);this._cache.set(e.uri.toString(),o)}get(e){const t=this._cache.get(e.uri.toString());return t&&t.lineCount===e.getLineCount()?t.data:void 0}delete(e){this._cache.delete(e.uri.toString())}_serialize(){const e=Object.create(null);for(const[t,i]of this._cache){const n=new Set;for(const e of i.data.lenses)n.add(e.symbol.range.startLineNumber);e[t]={lineCount:i.lineCount,lines:[...n.values()]}}return JSON.stringify(e)}_deserialize(e){try{const t=JSON.parse(e);for(const e in t){const i=t[e],n=[];for(const e of i.lines)n.push({range:new ro(e,1,e,11)});const o=new pL;o.add({lenses:n,dispose(){}},this._fakeProvider),this._cache.set(e,new ML(i.lineCount,o))}}catch(e){}}};Yw(AL,OL=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,0)}}(0,kL)],OL));const RL={ctrlCmd:!1,alt:!1};var PL;!function(e){e[e.NONE=0]="NONE",e[e.FIRST=1]="FIRST",e[e.SECOND=2]="SECOND",e[e.LAST=3]="LAST"}(PL||(PL={}));const FL=kt("quickInputService");var BL=function(e,t){return function(i,n){t(i,n,e)}};let WL=class{constructor(e,t,i,n){this._editor=e,this._commandService=t,this._notificationService=i,this._codeLensCache=n,this._disposables=new v,this._localToDispose=new v,this._lenses=[],this._getCodeLensModelDelays=new Cl(Ul,250,2500),this._oldCodeLensModels=new v,this._resolveCodeLensesDelays=new Cl(Ul,250,2500),this._resolveCodeLensesScheduler=new $a(()=>this._resolveCodeLensesInViewport(),this._resolveCodeLensesDelays.min),this._disposables.add(this._editor.onDidChangeModel(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeConfiguration(e=>{(e.hasChanged(38)||e.hasChanged(13)||e.hasChanged(12))&&this._updateLensStyle(),e.hasChanged(11)&&this._onModelChange()})),this._disposables.add(Ul.onDidChange(this._onModelChange,this)),this._onModelChange(),this._styleClassName="_"+ga(this._editor.getId()).toString(16),this._styleElement=Su(Cu(this._editor.getContainerDomNode())?this._editor.getContainerDomNode():void 0),this._updateLensStyle()}dispose(){var e;this._localDispose(),this._disposables.dispose(),this._oldCodeLensModels.dispose(),null===(e=this._currentCodeLensModel)||void 0===e||e.dispose(),this._styleElement.remove()}_getLayoutInfo(){let e,t=this._editor.getOption(13);return!t||t<5?(t=.9*this._editor.getOption(40)|0,e=this._editor.getOption(54)):e=t*Math.max(1.3,this._editor.getOption(54)/this._editor.getOption(40))|0,{codeLensHeight:e,fontSize:t}}_updateLensStyle(){const{codeLensHeight:e,fontSize:t}=this._getLayoutInfo(),i=this._editor.getOption(12),n=this._editor.getOption(38),o=`--codelens-font-family${this._styleClassName}`;let s=`\n\t\t.monaco-editor .codelens-decoration.${this._styleClassName} { line-height: ${e}px; font-size: ${t}px; padding-right: ${Math.round(.5*t)}px; font-feature-settings: ${n.fontFeatureSettings} }\n\t\t.monaco-editor .codelens-decoration.${this._styleClassName} span.codicon { line-height: ${e}px; font-size: ${t}px; }\n\t\t`;i&&(s+=`.monaco-editor .codelens-decoration.${this._styleClassName} { font-family: var(${o})}`),this._styleElement.textContent=s,this._editor.getContainerDomNode().style.setProperty(o,null!=i?i:"inherit"),this._editor.changeViewZones(t=>{for(let i of this._lenses)i.updateHeight(e,t)})}_localDispose(){var e,t,i;null===(e=this._getCodeLensModelPromise)||void 0===e||e.cancel(),this._getCodeLensModelPromise=void 0,null===(t=this._resolveCodeLensesPromise)||void 0===t||t.cancel(),this._resolveCodeLensesPromise=void 0,this._localToDispose.clear(),this._oldCodeLensModels.clear(),null===(i=this._currentCodeLensModel)||void 0===i||i.dispose()}_onModelChange(){this._localDispose();const e=this._editor.getModel();if(!e)return;if(!this._editor.getOption(11))return;const t=this._codeLensCache.get(e);if(t&&this._renderCodeLensSymbols(t),!Ul.has(e))return void(t&&this._localToDispose.add(Ha(()=>{const i=this._codeLensCache.get(e);t===i&&(this._codeLensCache.delete(e),this._onModelChange())},3e4)));for(const t of Ul.all(e))if("function"==typeof t.onDidChange){let e=t.onDidChange(()=>i.schedule());this._localToDispose.add(e)}const i=new $a(()=>{var t;const o=Date.now();null===(t=this._getCodeLensModelPromise)||void 0===t||t.cancel(),this._getCodeLensModelPromise=Pa(t=>mL(e,t)),this._getCodeLensModelPromise.then(t=>{this._currentCodeLensModel&&this._oldCodeLensModels.add(this._currentCodeLensModel),this._currentCodeLensModel=t,this._codeLensCache.put(e,t);const n=this._getCodeLensModelDelays.update(e,Date.now()-o);i.delay=n,this._renderCodeLensSymbols(t),this._resolveCodeLensesInViewport()},n)},this._getCodeLensModelDelays.get(e));this._localToDispose.add(i),this._localToDispose.add(b(()=>this._resolveCodeLensesScheduler.cancel())),this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{this._editor.changeDecorations(e=>{this._editor.changeViewZones(t=>{let i=[],n=-1;this._lenses.forEach(e=>{e.isValid()&&n!==e.getLineNumber()?(e.update(t),n=e.getLineNumber()):i.push(e)});let o=new wL;i.forEach(e=>{e.dispose(o,t),this._lenses.splice(this._lenses.indexOf(e),1)}),o.commit(e)})}),i.schedule()})),this._localToDispose.add(this._editor.onDidFocusEditorWidget(()=>{i.schedule()})),this._localToDispose.add(this._editor.onDidScrollChange(e=>{e.scrollTopChanged&&this._lenses.length>0&&this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add(this._editor.onDidLayoutChange(()=>{this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add(b(()=>{if(this._editor.getModel()){const e=iy.capture(this._editor);this._editor.changeDecorations(e=>{this._editor.changeViewZones(t=>{this._disposeAllLenses(e,t)})}),e.restore(this._editor)}else this._disposeAllLenses(void 0,void 0)})),this._localToDispose.add(this._editor.onMouseDown(e=>{if(9!==e.target.type)return;let t=e.target.element;if("SPAN"===(null==t?void 0:t.tagName)&&(t=t.parentElement),"A"===(null==t?void 0:t.tagName))for(const e of this._lenses){let i=e.getCommand(t);if(i){this._commandService.executeCommand(i.id,...i.arguments||[]).catch(e=>this._notificationService.error(e));break}}})),i.schedule()}_disposeAllLenses(e,t){const i=new wL;for(const e of this._lenses)e.dispose(i,t);e&&i.commit(e),this._lenses.length=0}_renderCodeLensSymbols(e){if(!this._editor.hasModel())return;let t,i=this._editor.getModel().getLineCount(),n=[];for(let o of e.lenses){let e=o.symbol.range.startLineNumber;e<1||e>i||(t&&t[t.length-1].symbol.range.startLineNumber===e?t.push(o):n.push(t=[o]))}const o=iy.capture(this._editor),s=this._getLayoutInfo();this._editor.changeDecorations(e=>{this._editor.changeViewZones(t=>{const i=new wL;let o=0,r=0;for(;rthis._resolveCodeLensesInViewportSoon())),o++,r++)}for(;othis._resolveCodeLensesInViewportSoon())),r++;i.commit(e)})}),o.restore(this._editor)}_resolveCodeLensesInViewportSoon(){this._editor.getModel()&&this._resolveCodeLensesScheduler.schedule()}_resolveCodeLensesInViewport(){var e;null===(e=this._resolveCodeLensesPromise)||void 0===e||e.cancel(),this._resolveCodeLensesPromise=void 0;const t=this._editor.getModel();if(!t)return;const i=[],s=[];if(this._lenses.forEach(e=>{const n=e.computeIfNecessary(t);n&&(i.push(n),s.push(e))}),0===i.length)return;const r=Date.now(),a=Pa(e=>{const n=i.map((i,n)=>{const r=new Array(i.length),a=i.map((i,n)=>i.symbol.command||"function"!=typeof i.provider.resolveCodeLens?(r[n]=i.symbol,Promise.resolve(void 0)):Promise.resolve(i.provider.resolveCodeLens(t,i.symbol,e)).then(e=>{r[n]=e},o));return Promise.all(a).then(()=>{e.isCancellationRequested||s[n].isDisposed()||s[n].updateCommands(r)})});return Promise.all(n)});this._resolveCodeLensesPromise=a,this._resolveCodeLensesPromise.then(()=>{const e=this._resolveCodeLensesDelays.update(t,Date.now()-r);this._resolveCodeLensesScheduler.delay=e,this._currentCodeLensModel&&this._codeLensCache.put(t,this._currentCodeLensModel),this._oldCodeLensModels.clear(),a===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)},e=>{n(e),a===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)})}getLenses(){return this._lenses}};function VL(e,t,i,n){return Promise.resolve(i.provideColorPresentations(e,t,n))}WL.ID="css.editor.codeLens",Jn((WL=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([BL(1,on),BL(2,cw),BL(3,AL)],WL)).ID,WL),Qn(class extends Yn{constructor(){super({id:"codelens.showLensesInCurrentLine",precondition:cd.hasCodeLensProvider,label:t(0,"Show CodeLens Commands For Current Line"),alias:"Show CodeLens Commands For Current Line"})}run(e,t){return i=this,void 0,o=function*(){if(!t.hasModel())return;const i=e.get(FL),n=e.get(on),o=e.get(cw),s=t.getSelection().positionLineNumber,r=t.getContribution(WL.ID),a=[];for(let e of r.getLenses())if(e.getLineNumber()===s)for(let t of e.getItems()){const{command:e}=t.symbol;e&&a.push({label:e.title,command:e})}if(0===a.length)return;const l=yield i.pick(a,{canPickMany:!1});if(l)try{yield n.executeCommand(l.command.id,...l.command.arguments||[])}catch(e){o.error(e)}},new((n=void 0)||(n=Promise))((function(e,t){function s(e){try{a(o.next(e))}catch(e){t(e)}}function r(e){try{a(o.throw(e))}catch(e){t(e)}}function a(t){t.done?e(t.value):function i(e){return e instanceof n?e:new n((function(t){t(e)}))}(t.value).then(s,r)}a((o=o.apply(i,[])).next())}));var i,n,o}}),sn.registerCommand("_executeDocumentColorProvider",(function(e,...t){const[i]=t;if(!(i instanceof mt))throw h();const n=e.get(At).getModel(i);if(!n)throw h();const o=[],s=Zl.ordered(n).reverse().map(e=>Promise.resolve(e.provideDocumentColors(n,Aa.None)).then(e=>{if(Array.isArray(e))for(let t of e)o.push({range:t.range,color:[t.color.red,t.color.green,t.color.blue,t.color.alpha]})}));return Promise.all(s).then(()=>o)})),sn.registerCommand("_executeColorPresentationProvider",(function(e,...t){const[i,n]=t,{uri:o,range:s}=n;if(!(o instanceof mt&&Array.isArray(i)&&4===i.length&&ro.isIRange(s)))throw h();const[r,a,l,c]=i,d=e.get(At).getModel(o);if(!d)throw h();const u={range:s,color:{red:r,green:a,blue:l,alpha:c}},g=[],p=Zl.ordered(d).reverse().map(e=>Promise.resolve(e.provideColorPresentations(d,u,Aa.None)).then(e=>{Array.isArray(e)&&g.push(...e)}));return Promise.all(p).then(()=>g)}));const zL=kt("configurationService");function HL(e,t){const i=Object.create(null);for(let n in e)UL(i,n,e[n],t);return i}function UL(e,t,i,n){const o=t.split("."),s=o.pop();let r=e;for(let e=0;e{this._isEnabled=this.isEnabled(),this.onModelChanged()})),this._register(e.onDidChangeModelLanguage(()=>this.onModelChanged())),this._register(Zl.onDidChange(()=>this.onModelChanged())),this._register(e.onDidChangeConfiguration(()=>{let e=this._isEnabled;this._isEnabled=this.isEnabled(),e!==this._isEnabled&&(this._isEnabled?this.onModelChanged():this.removeAllDecorations())})),this._timeoutTimer=null,this._computePromise=null,this._isEnabled=this.isEnabled(),this.onModelChanged()}isEnabled(){const e=this._editor.getModel();if(!e)return!1;const t=e.getLanguageIdentifier(),i=this._configurationService.getValue(t.language);if(i){const e=i.colorDecorators;if(e&&void 0!==e.enable&&!e.enable)return e.enable}return this._editor.getOption(14)}static get(e){return e.getContribution(this.ID)}dispose(){this.stop(),this.removeAllDecorations(),super.dispose()}onModelChanged(){if(this.stop(),!this._isEnabled)return;const t=this._editor.getModel();t&&Zl.has(t)&&(this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{this._timeoutTimer||(this._timeoutTimer=new Ua,this._timeoutTimer.cancelAndSet(()=>{this._timeoutTimer=null,this.beginCompute()},e.RECOMPUTE_TIME))})),this.beginCompute())}beginCompute(){this._computePromise=Pa(e=>{const t=this._editor.getModel();return t?function i(e,t){const i=[],n=Zl.ordered(e).reverse().map(n=>Promise.resolve(n.provideDocumentColors(e,t)).then(e=>{if(Array.isArray(e))for(let t of e)i.push({colorInfo:t,provider:n})}));return Promise.all(n).then(()=>i)}(t,e):Promise.resolve([])}),this._computePromise.then(e=>{this.updateDecorations(e),this.updateColorDecorators(e),this._computePromise=null},n)}stop(){this._timeoutTimer&&(this._timeoutTimer.cancel(),this._timeoutTimer=null),this._computePromise&&(this._computePromise.cancel(),this._computePromise=null),this._localToDispose.clear()}updateDecorations(e){const t=e.map(e=>({range:{startLineNumber:e.colorInfo.range.startLineNumber,startColumn:e.colorInfo.range.startColumn,endLineNumber:e.colorInfo.range.endLineNumber,endColumn:e.colorInfo.range.endColumn},options:xc.EMPTY}));this._decorationsIds=this._editor.deltaDecorations(this._decorationsIds,t),this._colorDatas=new Map,this._decorationsIds.forEach((t,i)=>this._colorDatas.set(t,e[i]))}updateColorDecorators(e){let t=[],i={};for(let n=0;n{i[e]||this._codeEditorService.removeDecorationType(e)}),this._colorDecoratorIds=this._editor.deltaDecorations(this._colorDecoratorIds,t)}removeAllDecorations(){this._decorationsIds=this._editor.deltaDecorations(this._decorationsIds,[]),this._colorDecoratorIds=this._editor.deltaDecorations(this._colorDecoratorIds,[]),this._decorationsTypes.forEach(e=>{this._codeEditorService.removeDecorationType(e)})}getColorData(e){const t=this._editor.getModel();if(!t)return null;const i=t.getDecorationsInRange(ro.fromPositions(e,e)).filter(e=>this._colorDatas.has(e.id));return 0===i.length?null:this._colorDatas.get(i[0].id)}};$L.ID="editor.contrib.colorDetector",$L.RECOMPUTE_TIME=1e3,Jn(($L=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([KL(1,It),KL(2,zL)],$L)).ID,$L);class jL{static insert(e,t){return{range:new ro(e.lineNumber,e.column,e.lineNumber,e.column),text:t,forceMoveMarkers:!0}}static delete(e){return{range:e,text:null}}static replace(e,t){return{range:e,text:t}}static replaceMove(e,t){return{range:e,text:t,forceMoveMarkers:!0}}}class qL{constructor(e,t){this._selection=e,this._insertSpace=t,this._usedEndToken=null}static _haystackHasNeedleAtOffset(e,t,i){if(i<0)return!1;const n=t.length;if(i+n>e.length)return!1;for(let o=0;o=65&&n<=90&&n+32===s||s>=65&&s<=90&&s+32===n))return!1}return!0}_createOperationsForBlockComment(e,t,i,n,o,s){const r=e.startLineNumber,a=e.startColumn,l=e.endLineNumber,h=e.endColumn,c=o.getLineContent(r),d=o.getLineContent(l);let u,g=c.lastIndexOf(t,a-1+t.length),p=d.indexOf(i,h-1-i.length);if(-1!==g&&-1!==p)if(r===l)c.substring(g+t.length,p).indexOf(i)>=0&&(g=-1,p=-1);else{const e=c.substring(g+t.length),n=d.substring(0,p);(e.indexOf(i)>=0||n.indexOf(i)>=0)&&(g=-1,p=-1)}-1!==g&&-1!==p?(n&&g+t.length0&&32===d.charCodeAt(p-1)&&(i=" "+i,p-=1),u=qL._createRemoveBlockCommentOperations(new ro(r,g+t.length+1,l,p+1),t,i)):(u=qL._createAddBlockCommentOperations(e,t,i,this._insertSpace),this._usedEndToken=1===u.length?i:null);for(const e of u)s.addTrackedEditOperation(e.range,e.text)}static _createRemoveBlockCommentOperations(e,t,i){let n=[];return ro.isEmpty(e)?n.push(jL.delete(new ro(e.startLineNumber,e.startColumn-t.length,e.endLineNumber,e.endColumn+i.length))):(n.push(jL.delete(new ro(e.startLineNumber,e.startColumn-t.length,e.startLineNumber,e.startColumn))),n.push(jL.delete(new ro(e.endLineNumber,e.endColumn,e.endLineNumber,e.endColumn+i.length)))),n}static _createAddBlockCommentOperations(e,t,i,n){let o=[];return ro.isEmpty(e)?o.push(jL.replace(new ro(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn),t+" "+i)):(o.push(jL.insert(new Tt(e.startLineNumber,e.startColumn),t+(n?" ":""))),o.push(jL.insert(new Tt(e.endLineNumber,e.endColumn),(n?" ":"")+i))),o}getEditOperations(e,t){const i=this._selection.startLineNumber,n=this._selection.startColumn;e.tokenizeIfCheap(i);const o=e.getLanguageIdAtPosition(i,n),s=ac.getComments(o);s&&s.blockCommentStartToken&&s.blockCommentEndToken&&this._createOperationsForBlockComment(this._selection,s.blockCommentStartToken,s.blockCommentEndToken,this._insertSpace,e,t)}computeCursorState(e,t){const i=t.getInverseEditOperations();if(2===i.length){const e=i[0],t=i[1];return new ao(e.range.endLineNumber,e.range.endColumn,t.range.startLineNumber,t.range.startColumn)}{const e=i[0].range,t=this._usedEndToken?-this._usedEndToken.length-1:0;return new ao(e.endLineNumber,e.endColumn+t,e.endLineNumber,e.endColumn+t)}}}class GL{constructor(e,t,i,n,o,s){this._selection=e,this._tabSize=t,this._type=i,this._insertSpace=n,this._selectionId=null,this._deltaColumn=0,this._moveEndPositionDown=!1,this._ignoreEmptyLines=o,this._ignoreFirstLine=s||!1}static _gatherPreflightCommentStrings(e,t,i){e.tokenizeIfCheap(t);const n=e.getLanguageIdAtPosition(t,1),o=ac.getComments(n),s=o?o.lineCommentToken:null;if(!s)return null;let r=[];for(let e=0,n=i-t+1;er?o-1:o}}}class YL extends Yn{constructor(e,t){super(t),this._type=e}run(e,t){if(!t.hasModel())return;const i=[],n=t.getModel().getOptions(),o=t.getOption(16),s=t.getSelections().map((e,t)=>({selection:e,index:t,ignoreFirstLine:!1}));s.sort((e,t)=>ro.compareRangesUsingStarts(e.selection,t.selection));let r=s[0];for(let e=1;e{this._undoStack=[],this._redoStack=[]})),this._register(e.onDidChangeModelContent(e=>{this._undoStack=[],this._redoStack=[]})),this._register(e.onDidChangeCursorSelection(t=>{if(this._isCursorUndoRedo)return;if(!t.oldSelections)return;if(t.oldModelVersionId!==t.modelVersionId)return;const i=new ZL(t.oldSelections);this._undoStack.length>0&&this._undoStack[this._undoStack.length-1].cursorState.equals(i)||(this._undoStack.push(new XL(i,e.getScrollTop(),e.getScrollLeft())),this._redoStack=[],this._undoStack.length>50&&this._undoStack.shift())}))}static get(e){return e.getContribution(QL.ID)}cursorUndo(){this._editor.hasModel()&&0!==this._undoStack.length&&(this._redoStack.push(new XL(new ZL(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._undoStack.pop()))}cursorRedo(){this._editor.hasModel()&&0!==this._redoStack.length&&(this._undoStack.push(new XL(new ZL(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._redoStack.pop()))}_applyState(e){this._isCursorUndoRedo=!0,this._editor.setSelections(e.cursorState.selections),this._editor.setScrollPosition({scrollTop:e.scrollTop,scrollLeft:e.scrollLeft}),this._isCursorUndoRedo=!1}}QL.ID="editor.contrib.cursorUndoRedoController",Jn(QL.ID,QL),Qn(class extends Yn{constructor(){super({id:"cursorUndo",label:t(0,"Cursor Undo"),alias:"Cursor Undo",precondition:void 0,kbOpts:{kbExpr:cd.textInputFocus,primary:2099,weight:100}})}run(e,t,i){QL.get(t).cursorUndo()}}),Qn(class extends Yn{constructor(){super({id:"cursorRedo",label:t(0,"Cursor Redo"),alias:"Cursor Redo",precondition:void 0})}run(e,t,i){QL.get(t).cursorRedo()}});class JL{constructor(e,t,i){this.selection=e,this.targetPosition=t,this.copy=i,this.targetSelection=null}getEditOperations(e,t){let i=e.getValueInRange(this.selection);this.copy||t.addEditOperation(this.selection,null),t.addEditOperation(new ro(this.targetPosition.lineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.targetPosition.column),i),this.targetSelection=!this.selection.containsPosition(this.targetPosition)||this.copy&&(this.selection.getEndPosition().equals(this.targetPosition)||this.selection.getStartPosition().equals(this.targetPosition))?this.copy?new ao(this.targetPosition.lineNumber,this.targetPosition.column,this.selection.endLineNumber-this.selection.startLineNumber+this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn):this.targetPosition.lineNumber>this.selection.endLineNumber?new ao(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn):this.targetPosition.lineNumberthis._onEditorMouseDown(e))),this._register(this._editor.onMouseUp(e=>this._onEditorMouseUp(e))),this._register(this._editor.onMouseDrag(e=>this._onEditorMouseDrag(e))),this._register(this._editor.onMouseDrop(e=>this._onEditorMouseDrop(e))),this._register(this._editor.onMouseDropCanceled(()=>this._onEditorMouseDropCanceled())),this._register(this._editor.onKeyDown(e=>this.onEditorKeyDown(e))),this._register(this._editor.onKeyUp(e=>this.onEditorKeyUp(e))),this._register(this._editor.onDidBlurEditorWidget(()=>this.onEditorBlur())),this._register(this._editor.onDidBlurEditorText(()=>this.onEditorBlur())),this._dndDecorationIds=[],this._mouseDown=!1,this._modifierPressed=!1,this._dragSelection=null}onEditorBlur(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1}onEditorKeyDown(e){this._editor.getOption(27)&&!this._editor.getOption(15)&&(eD(e)&&(this._modifierPressed=!0),this._mouseDown&&eD(e)&&this._editor.updateOptions({mouseStyle:"copy"}))}onEditorKeyUp(e){this._editor.getOption(27)&&!this._editor.getOption(15)&&(eD(e)&&(this._modifierPressed=!1),this._mouseDown&&e.keyCode===tD.TRIGGER_KEY_VALUE&&this._editor.updateOptions({mouseStyle:"default"}))}_onEditorMouseDown(e){this._mouseDown=!0}_onEditorMouseUp(e){this._mouseDown=!1,this._editor.updateOptions({mouseStyle:"text"})}_onEditorMouseDrag(e){let t=e.target;if(null===this._dragSelection){let e=(this._editor.getSelections()||[]).filter(e=>t.position&&e.containsPosition(t.position));if(1!==e.length)return;this._dragSelection=e[0]}eD(e.event)?this._editor.updateOptions({mouseStyle:"copy"}):this._editor.updateOptions({mouseStyle:"default"}),t.position&&(this._dragSelection.containsPosition(t.position)?this._removeDecoration():this.showAt(t.position))}_onEditorMouseDropCanceled(){this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}_onEditorMouseDrop(e){if(e.target&&(this._hitContent(e.target)||this._hitMargin(e.target))&&e.target.position){let t=new Tt(e.target.position.lineNumber,e.target.position.column);if(null===this._dragSelection){let i=null;if(e.event.shiftKey){let e=this._editor.getSelection();if(e){const{selectionStartLineNumber:n,selectionStartColumn:o}=e;i=[new ao(n,o,t.lineNumber,t.column)]}}else i=(this._editor.getSelections()||[]).map(e=>e.containsPosition(t)?new ao(t.lineNumber,t.column,t.lineNumber,t.column):e);this._editor.setSelections(i||[],"mouse",3)}else(!this._dragSelection.containsPosition(t)||(eD(e.event)||this._modifierPressed)&&(this._dragSelection.getEndPosition().equals(t)||this._dragSelection.getStartPosition().equals(t)))&&(this._editor.pushUndoStop(),this._editor.executeCommand(tD.ID,new JL(this._dragSelection,t,eD(e.event)||this._modifierPressed)),this._editor.pushUndoStop())}this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}showAt(e){let t=[{range:new ro(e.lineNumber,e.column,e.lineNumber,e.column),options:tD._DECORATION_OPTIONS}];this._dndDecorationIds=this._editor.deltaDecorations(this._dndDecorationIds,t),this._editor.revealPosition(e,1)}_removeDecoration(){this._dndDecorationIds=this._editor.deltaDecorations(this._dndDecorationIds,[])}_hitContent(e){return 6===e.type||7===e.type}_hitMargin(e){return 2===e.type||3===e.type||4===e.type}dispose(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1,super.dispose()}}function iD(e){return!(!e||"function"!=typeof e.getEditorType)&&e.getEditorType()===MC.ICodeEditor}tD.ID="editor.contrib.dragAndDrop",tD.TRIGGER_KEY_VALUE=H?6:5,tD._DECORATION_OPTIONS=xc.register({className:"dnd-target"}),Jn(tD.ID,tD);class nD{static _handleEolEdits(e,t){let i=void 0,n=[];for(let e of t)"number"==typeof e.eol&&(i=e.eol),e.range&&"string"==typeof e.text&&n.push(e);return"number"==typeof i&&e.hasModel()&&e.getModel().pushEOL(i),n}static _isFullModelReplaceEdit(e,t){if(!e.hasModel())return!1;const i=e.getModel(),n=i.validateRange(t.range);return i.getFullModelRange().equalsRange(n)}static execute(e,t,i){i&&e.pushUndoStop();const n=nD._handleEolEdits(e,t);1===n.length&&nD._isFullModelReplaceEdit(e,n[0])?e.executeEdits("formatEditsCommand",n.map(e=>jL.replace(ro.lift(e.range),e.text))):e.executeEdits("formatEditsCommand",n.map(e=>jL.replaceMove(ro.lift(e.range),e.text))),i&&e.pushUndoStop()}}class oD{constructor(e){this.value=e,this._lower=e.toLowerCase()}static toKey(e){return"string"==typeof e?e.toLowerCase():e._lower}}var sD=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function rD(e){if(!(e=e.filter(e=>e.range)).length)return;let{range:i}=e[0];for(let t=1;te.provideDocumentRangeFormattingEdits(t,t.getFullModelRange(),i,n)})}return t}class lD{static setFormatterSelector(e){return{dispose:lD._selectors.unshift(e)}}static select(e,t,i){return sD(this,void 0,void 0,(function*(){if(0===e.length)return;const n=c.first(lD._selectors);return n?yield n(e,t,i):void 0}))}}function hD(e,t,i,n,o,s){return sD(this,void 0,void 0,(function*(){const r=e.get(Et),a=iD(t)?t.getModel():t,l=ql.ordered(a),h=yield lD.select(l,a,n);h&&(o.report(h),yield r.invokeFunction(cD,h,t,i,s))}))}function cD(e,t,i,n,o){return sD(this,void 0,void 0,(function*(){const s=e.get(Sy);let r,a;iD(i)?(r=i.getModel(),a=new ey(i,5,void 0,o)):(r=i,a=new ty(i,o));let l=[],h=0;for(let e of ua(n).sort(ro.compareRangesUsingStarts))h>0&&ro.areIntersectingOrTouching(l[h-1],e)?l[h-1]=ro.fromPositions(l[h-1].getStartPosition(),e.getEndPosition()):h=l.push(e);const c=[];for(let e of l)try{const i=yield t.provideDocumentRangeFormattingEdits(r,e,r.getFormattingOptions(),a.token),n=yield s.computeMoreMinimalEdits(r.uri,i);if(n&&c.push(...n),a.token.isCancellationRequested)return!0}finally{a.dispose()}if(0===c.length)return!1;if(iD(i))nD.execute(i,c,!0),rD(c),i.revealPositionInCenterIfOutsideViewport(i.getPosition(),1);else{const[{range:e}]=c,t=new ao(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn);r.pushEditOperations([t],c.map(e=>({text:e.text,range:ro.lift(e.range),forceMoveMarkers:!0})),e=>{for(const{range:i}of e)if(ro.areIntersectingOrTouching(i,t))return[new ao(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn)];return null})}return!0}))}function dD(e,t,i,n,o){return sD(this,void 0,void 0,(function*(){const s=e.get(Et),r=iD(t)?t.getModel():t,a=aD(r),l=yield lD.select(a,r,i);l&&(n.report(l),yield s.invokeFunction(uD,l,t,i,o))}))}function uD(e,t,i,n,o){return sD(this,void 0,void 0,(function*(){const s=e.get(Sy);let r,a,l;iD(i)?(r=i.getModel(),a=new ey(i,5,void 0,o)):(r=i,a=new ty(i,o));try{const e=yield t.provideDocumentFormattingEdits(r,r.getFormattingOptions(),a.token);if(l=yield s.computeMoreMinimalEdits(r.uri,e),a.token.isCancellationRequested)return!0}finally{a.dispose()}if(!l||0===l.length)return!1;if(iD(i))nD.execute(i,l,2!==n),2!==n&&(rD(l),i.revealPositionInCenterIfOutsideViewport(i.getPosition(),1));else{const[{range:e}]=l,t=new ao(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn);r.pushEditOperations([t],l.map(e=>({text:e.text,range:ro.lift(e.range),forceMoveMarkers:!0})),e=>{for(const{range:i}of e)if(ro.areIntersectingOrTouching(i,t))return[new ao(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn)];return null})}return!0}))}function gD(e,t,i,n,s){const r=Gl.ordered(t);return 0===r.length?Promise.resolve(void 0):r[0].autoFormatTriggerCharacters.indexOf(n)<0?Promise.resolve(void 0):Promise.resolve(r[0].provideOnTypeFormattingEdits(t,i,n,s,Aa.None)).catch(o).then(i=>e.computeMoreMinimalEdits(t.uri,i))}lD._selectors=new L,sn.registerCommand("_executeFormatRangeProvider",(function(e,...t){const[i,n,s]=t;Ne(mt.isUri(i)),Ne(ro.isIRange(n));const r=e.get(At).getModel(i);if(!r)throw h("resource");return function a(e,t,i,n,s){return sD(this,void 0,void 0,(function*(){const r=ql.ordered(t);for(const a of r){let r=yield Promise.resolve(a.provideDocumentRangeFormattingEdits(t,i,n,s)).catch(o);if(na(r))return yield e.computeMoreMinimalEdits(t.uri,r)}}))}(e.get(Sy),r,ro.lift(n),s,Aa.None)})),sn.registerCommand("_executeFormatDocumentProvider",(function(e,...t){const[i,n]=t;Ne(mt.isUri(i));const s=e.get(At).getModel(i);if(!s)throw h("resource");return function r(e,t,i,n){return sD(this,void 0,void 0,(function*(){const s=aD(t);for(const r of s){let s=yield Promise.resolve(r.provideDocumentFormattingEdits(t,i,n)).catch(o);if(na(s))return yield e.computeMoreMinimalEdits(t.uri,s)}}))}(e.get(Sy),s,n,Aa.None)})),sn.registerCommand("_executeFormatOnTypeProvider",(function(e,...t){const[i,n,o,s]=t;Ne(mt.isUri(i)),Ne(Tt.isIPosition(n)),Ne("string"==typeof o);const r=e.get(At).getModel(i);if(!r)throw h("resource");return gD(e.get(Sy),r,Tt.lift(n),o,s)}));var pD=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},mD=function(e,t){return function(i,n){t(i,n,e)}},fD=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let _D=class{constructor(e,t){this._workerService=t,this._callOnDispose=new v,this._callOnModel=new v,this._editor=e,this._callOnDispose.add(e.onDidChangeConfiguration(()=>this._update())),this._callOnDispose.add(e.onDidChangeModel(()=>this._update())),this._callOnDispose.add(e.onDidChangeModelLanguage(()=>this._update())),this._callOnDispose.add(Gl.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){if(this._callOnModel.clear(),!this._editor.getOption(43))return;if(!this._editor.hasModel())return;const e=this._editor.getModel(),[t]=Gl.ordered(e);if(!t||!t.autoFormatTriggerCharacters)return;let i=new kr;for(let e of t.autoFormatTriggerCharacters)i.add(e.charCodeAt(0));this._callOnModel.add(this._editor.onDidType(e=>{let t=e.charCodeAt(e.length-1);i.has(t)&&this._trigger(String.fromCharCode(t))}))}_trigger(e){if(!this._editor.hasModel())return;if(this._editor.getSelections().length>1)return;const t=this._editor.getModel(),i=this._editor.getPosition();let n=!1;const o=this._editor.onDidChangeModelContent(e=>{if(e.isFlush)return n=!0,void o.dispose();for(let t=0,s=e.changes.length;t{o.dispose(),n||na(e)&&(nD.execute(this._editor,e,!0),rD(e))},e=>{throw o.dispose(),e})}};_D.ID="editor.contrib.autoFormat",_D=pD([mD(1,Sy)],_D);let bD=class{constructor(e,t){this.editor=e,this._instantiationService=t,this._callOnDispose=new v,this._callOnModel=new v,this._callOnDispose.add(e.onDidChangeConfiguration(()=>this._update())),this._callOnDispose.add(e.onDidChangeModel(()=>this._update())),this._callOnDispose.add(e.onDidChangeModelLanguage(()=>this._update())),this._callOnDispose.add(ql.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){this._callOnModel.clear(),this.editor.getOption(42)&&this.editor.hasModel()&&ql.has(this.editor.getModel())&&this._callOnModel.add(this.editor.onDidPaste(({range:e})=>this._trigger(e)))}_trigger(e){this.editor.hasModel()&&(this.editor.getSelections().length>1||this._instantiationService.invokeFunction(hD,this.editor,e,2,Ny.None,Aa.None).catch(n))}};bD.ID="editor.contrib.formatOnPaste",bD=pD([mD(1,Et)],bD),Jn(_D.ID,_D),Jn(bD.ID,bD),Qn(class extends Yn{constructor(){super({id:"editor.action.formatDocument",label:t(0,"Format Document"),alias:"Format Document",precondition:Ri.and(cd.notInCompositeEditor,cd.writable,cd.hasDocumentFormattingProvider),kbOpts:{kbExpr:cd.editorTextFocus,primary:1572,linux:{primary:3111},weight:100},contextMenuOpts:{group:"1_modification",order:1.3}})}run(e,t){return fD(this,void 0,void 0,(function*(){if(t.hasModel()){const i=e.get(Et),n=e.get(Iy);yield n.showWhile(i.invokeFunction(dD,t,1,Ny.None,Aa.None),250)}}))}}),Qn(class extends Yn{constructor(){super({id:"editor.action.formatSelection",label:t(0,"Format Selection"),alias:"Format Selection",precondition:Ri.and(cd.writable,cd.hasDocumentSelectionFormattingProvider),kbOpts:{kbExpr:cd.editorTextFocus,primary:On(2089,2084),weight:100},contextMenuOpts:{when:cd.hasNonEmptySelection,group:"1_modification",order:1.31}})}run(e,t){return fD(this,void 0,void 0,(function*(){if(!t.hasModel())return;const i=e.get(Et),n=t.getModel(),o=t.getSelections().map(e=>e.isEmpty()?new ro(e.startLineNumber,1,e.startLineNumber,n.getLineMaxColumn(e.startLineNumber)):e),s=e.get(Iy);yield s.showWhile(i.invokeFunction(hD,t,o,1,Ny.None,Aa.None),250)}))}}),sn.registerCommand("editor.action.format",e=>fD(void 0,void 0,void 0,(function*(){const t=e.get(It).getFocusedCodeEditor();if(!t||!t.hasModel())return;const i=e.get(on);t.getSelection().isEmpty()?yield i.executeCommand("editor.action.formatDocument"):yield i.executeCommand("editor.action.formatSelection")})));var vD=function(e,t){return function(i,n){t(i,n,e)}};let CD=class extends Aw{constructor(e,t,i,n,o,s,r,a,l,h){super(e,Object.assign(Object.assign({},i.getRawOptions()),{overflowWidgetsDomNode:i.getOverflowWidgetsDomNode()}),{},n,o,s,r,a,l,h),this._parentEditor=i,this._overwriteOptions=t,super.updateOptions(this._overwriteOptions),this._register(i.onDidChangeConfiguration(e=>this._onParentConfigurationChanged(e)))}getParentEditor(){return this._parentEditor}_onParentConfigurationChanged(e){super.updateOptions(this._parentEditor.getRawOptions()),super.updateOptions(this._overwriteOptions)}updateOptions(e){Qu(this._overwriteOptions,e,!0),super.updateOptions(this._overwriteOptions)}};CD=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([vD(3,Et),vD(4,It),vD(5,on),vD(6,en),vD(7,pn),vD(8,cw),vD(9,dw)],CD);class wD{constructor(e){this._prefix=e,this._lastId=0}nextId(){return this._prefix+ ++this._lastId}}const yD=new wD("id#"),SD=new uc(new hc(0,122,204)),LD={showArrow:!0,showFrame:!0,className:"",frameColor:SD,arrowColor:SD,keepEditorSelection:!1};class DD{constructor(e,t,i,n,o,s){this.id="",this.domNode=e,this.afterLineNumber=t,this.afterColumn=i,this.heightInLines=n,this._onDomNodeTop=o,this._onComputedHeight=s}onDomNodeTop(e){this._onDomNodeTop(e)}onComputedHeight(e){this._onComputedHeight(e)}}class ED{constructor(e,t){this._id=e,this._domNode=t}getId(){return this._id}getDomNode(){return this._domNode}getPosition(){return null}}class xD{constructor(e){this._editor=e,this._ruleName=xD._IdGenerator.nextId(),this._decorations=[],this._color=null,this._height=-1}dispose(){this.hide(),xu(this._ruleName)}set color(e){this._color!==e&&(this._color=e,this._updateStyle())}set height(e){this._height!==e&&(this._height=e,this._updateStyle())}_updateStyle(){xu(this._ruleName),Eu(`.monaco-editor ${this._ruleName}`,`border-style: solid; border-color: transparent; border-bottom-color: ${this._color}; border-width: ${this._height}px; bottom: -${this._height}px; margin-left: -${this._height}px; `)}show(e){this._decorations=this._editor.deltaDecorations(this._decorations,[{range:ro.fromPositions(e),options:{className:this._ruleName,stickiness:1}}])}hide(){this._editor.deltaDecorations(this._decorations,[])}}xD._IdGenerator=new wD(".arrow-decoration-");class kD extends Ft{constructor(e,t){super(),this._onDidChangeVisibility=new oe,this.onDidChangeVisibility=this._onDidChangeVisibility.event,this._element=Mu(e,Bu(".monaco-dropdown")),this._label=Mu(this._element,Bu(".dropdown-label"));let i=t.labelRenderer;i||(i=e=>(e.textContent=t.label||"",null));for(const e of[Nu.CLICK,Nu.MOUSE_DOWN,Pg.Tap])this._register(jd(this.element,e,e=>Iu.stop(e,!0)));for(const e of[Nu.MOUSE_DOWN,Pg.Tap])this._register(jd(this._label,e,e=>{e instanceof MouseEvent&&e.detail>1||(this.visible?this.hide():this.show())}));this._register(jd(this._label,Nu.KEY_UP,e=>{const t=new Rd(e);(t.equals(3)||t.equals(10))&&(Iu.stop(e,!0),this.visible?this.hide():this.show())}));const n=i(this._label);n&&this._register(n),this._register(Fg.addTarget(this._label))}get element(){return this._element}show(){this.visible||(this.visible=!0,this._onDidChangeVisibility.fire(!0))}hide(){this.visible&&(this.visible=!1,this._onDidChangeVisibility.fire(!1))}dispose(){super.dispose(),this.hide(),this.boxContainer&&(this.boxContainer.remove(),this.boxContainer=void 0),this.contents&&(this.contents.remove(),this.contents=void 0),this._label&&(this._label.remove(),this._label=void 0)}}class ND extends kD{constructor(e,t){super(e,t),this._actions=[],this._contextMenuProvider=t.contextMenuProvider,this.actions=t.actions||[],this.actionProvider=t.actionProvider,this.menuClassName=t.menuClassName||"",this.menuAsChild=!!t.menuAsChild}set menuOptions(e){this._menuOptions=e}get menuOptions(){return this._menuOptions}get actions(){return this.actionProvider?this.actionProvider.getActions():this._actions}set actions(e){this._actions=e}show(){super.show(),this.element.classList.add("active"),this._contextMenuProvider.showContextMenu({getAnchor:()=>this.element,getActions:()=>this.actions,getActionsContext:()=>this.menuOptions?this.menuOptions.context:null,getActionViewItem:e=>this.menuOptions&&this.menuOptions.actionViewItemProvider?this.menuOptions.actionViewItemProvider(e):void 0,getKeyBinding:e=>this.menuOptions&&this.menuOptions.getKeyBinding?this.menuOptions.getKeyBinding(e):void 0,getMenuClassName:()=>this.menuClassName,onHide:()=>this.onHide(),actionRunner:this.menuOptions?this.menuOptions.actionRunner:void 0,anchorAlignment:this.menuOptions?this.menuOptions.anchorAlignment:0,domForShadowRoot:this.menuAsChild?this.element:void 0})}hide(){super.hide()}onHide(){this.hide(),this.element.classList.remove("active")}}class ID extends ry{constructor(e,t,i,n={}){super(null,e,n),this.options=n,this.actionItem=null,this._onDidChangeVisibility=this._register(new oe),this.menuActionsOrProvider=t,this.contextMenuProvider=i,this.options.actionRunner&&(this.actionRunner=this.options.actionRunner)}render(e){this.actionItem=e;const t=Array.isArray(this.menuActionsOrProvider);if(this.dropdownMenu=this._register(new ND(e,{contextMenuProvider:this.contextMenuProvider,labelRenderer:e=>{this.element=Mu(e,Bu("a.action-label"));let t=[];return"string"==typeof this.options.classNames?t=this.options.classNames.split(/\s+/g).filter(e=>!!e):this.options.classNames&&(t=this.options.classNames),t.find(e=>"icon"===e)||t.push("codicon"),this.element.classList.add(...t),this.element.setAttribute("role","button"),this.element.setAttribute("aria-haspopup","true"),this.element.setAttribute("aria-expanded","false"),this.element.title=this._action.label||"",null},menuAsChild:this.options.menuAsChild,actions:t?this.menuActionsOrProvider:void 0,actionProvider:t?void 0:this.menuActionsOrProvider})),this._register(this.dropdownMenu.onDidChangeVisibility(e=>{var t;null===(t=this.element)||void 0===t||t.setAttribute("aria-expanded",`${e}`),this._onDidChangeVisibility.fire(e)})),this.dropdownMenu.menuOptions={actionViewItemProvider:this.options.actionViewItemProvider,actionRunner:this.actionRunner,getKeyBinding:this.options.keybindingProvider,context:this._context},this.options.anchorAlignmentProvider){const e=this;this.dropdownMenu.menuOptions=Object.assign(Object.assign({},this.dropdownMenu.menuOptions),{get anchorAlignment(){return e.options.anchorAlignmentProvider()}})}this.updateEnabled()}setActionContext(e){super.setActionContext(e),this.dropdownMenu&&(this.dropdownMenu.menuOptions?this.dropdownMenu.menuOptions.context=e:this.dropdownMenu.menuOptions={context:e})}updateEnabled(){var e,t;const i=!this.getAction().enabled;null===(e=this.actionItem)||void 0===e||e.classList.toggle("disabled",i),null===(t=this.element)||void 0===t||t.classList.toggle("disabled",i)}}var TD=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},AD=function(e,t){return function(i,n){t(i,n,e)}};let MD=class extends ay{constructor(e,t,i){super(void 0,e,{icon:!(!e.class&&!e.item.icon),label:!e.class&&!e.item.icon}),this._action=e,this._keybindingService=t,this._notificationService=i,this._wantsAltCommand=!1,this._itemClassDispose=this._register(new w),this._altKey=ju.getInstance()}get _commandAction(){return this._wantsAltCommand&&this._action.alt||this._action}onClick(e){e.preventDefault(),e.stopPropagation(),this.actionRunner.run(this._commandAction,this._context).catch(e=>this._notificationService.error(e))}render(e){super.render(e),e.classList.add("menu-entry"),this._updateItemClass(this._action.item);let t=!1,i=this._altKey.keyStatus.altKey||(z||U)&&this._altKey.keyStatus.shiftKey;const n=()=>{const e=t&&i;e!==this._wantsAltCommand&&(this._wantsAltCommand=e,this.updateLabel(),this.updateTooltip(),this.updateClass())};this._action.alt&&this._register(this._altKey.event(e=>{i=e.altKey||(z||U)&&e.shiftKey,n()})),this._register(Ed(e,"mouseleave")(e=>{t=!1,n()})),this._register(Ed(e,"mouseenter")(e=>{t=!0,n()}))}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this._commandAction.label)}updateTooltip(){if(this.label){const e=this._keybindingService.lookupKeybinding(this._commandAction.id),i=e&&e.getLabel(),n=this._commandAction.tooltip||this._commandAction.label;this.label.title=i?t(0,"{0} ({1})",n,i):n}}updateClass(){this.options.icon&&(this._commandAction!==this._action?this._action.alt&&this._updateItemClass(this._action.alt.item):this._action.alt&&this._updateItemClass(this._action.item))}_updateItemClass(e){var t;this._itemClassDispose.value=void 0;const{element:i,label:n}=this;if(!i||!n)return;const o=this._commandAction.checked&&(null===(t=e.toggled)||void 0===t?void 0:t.icon)?e.toggled.icon:e.icon;if(o)if(fn.isThemeIcon(o)){const e=fn.asClassName(o);n.classList.add(...e.split(" ")),this._itemClassDispose.value=b(()=>{n.classList.remove(...e.split(" "))})}else o.light&&n.style.setProperty("--menu-entry-icon-light",Ku(o.light)),o.dark&&n.style.setProperty("--menu-entry-icon-dark",Ku(o.dark)),n.classList.add("icon"),this._itemClassDispose.value=b(()=>{n.classList.remove("icon"),n.style.removeProperty("--menu-entry-icon-light"),n.style.removeProperty("--menu-entry-icon-dark")})}};MD=TD([AD(1,FS),AD(2,cw)],MD);let OD=class extends ID{constructor(e,t){super(e,{getActions:()=>e.actions},t,{menuAsChild:!0,classNames:fn.isThemeIcon(e.item.icon)?fn.asClassName(e.item.icon):void 0})}render(e){if(super.render(e),this.element){e.classList.add("menu-entry");const{icon:t}=this._action.item;t&&!fn.isThemeIcon(t)&&(this.element.classList.add("icon"),t.light&&this.element.style.setProperty("--menu-entry-icon-light",Ku(t.light)),t.dark&&this.element.style.setProperty("--menu-entry-icon-dark",Ku(t.dark)))}}};function RD(e,t){return t instanceof kn?e.createInstance(MD,t):t instanceof xn?e.createInstance(OD,t):void 0}OD=TD([AD(1,Dy)],OD);var PD=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},FD=function(e,t){return function(i,n){t(i,n,e)}};const BD=kt("IPeekViewService");var WD;Yw(BD,class{constructor(){this._widgets=new Map}addExclusiveWidget(e,t){const i=this._widgets.get(e);i&&(i.listener.dispose(),i.widget.dispose()),this._widgets.set(e,{widget:t,listener:t.onDidClose(()=>{const i=this._widgets.get(e);i&&i.widget===t&&(i.listener.dispose(),this._widgets.delete(e))})})}}),function(e){e.inPeekEditor=new Ji("inReferenceSearchEditor",!0),e.notInPeekEditor=e.inPeekEditor.toNegated()}(WD||(WD={}));let VD=class{constructor(e,t){e instanceof CD&&WD.inPeekEditor.bindTo(t)}dispose(){}};VD.ID="editor.contrib.referenceController",Jn((VD=PD([FD(1,en)],VD)).ID,VD);const zD={headerBackgroundColor:uc.white,primaryHeadingColor:uc.fromHex("#333333"),secondaryHeadingColor:uc.fromHex("#6c6c6cb3")};let HD=class extends class{constructor(e,t={}){this._arrow=null,this._overlayWidget=null,this._resizeSash=null,this._positionMarkerId=[],this._viewZone=null,this._disposables=new v,this.container=null,this._isShowing=!1,this.editor=e,this.options=Zu(t),Qu(this.options,LD,!1),this.domNode=document.createElement("div"),this.options.isAccessible||(this.domNode.setAttribute("aria-hidden","true"),this.domNode.setAttribute("role","presentation")),this._disposables.add(this.editor.onDidLayoutChange(e=>{const t=this._getWidth(e);this.domNode.style.width=t+"px",this.domNode.style.left=this._getLeft(e)+"px",this._onWidth(t)}))}dispose(){this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._viewZone&&this.editor.changeViewZones(e=>{this._viewZone&&e.removeZone(this._viewZone.id),this._viewZone=null}),this.editor.deltaDecorations(this._positionMarkerId,[]),this._positionMarkerId=[],this._disposables.dispose()}create(){this.domNode.classList.add("zone-widget"),this.options.className&&this.domNode.classList.add(this.options.className),this.container=document.createElement("div"),this.container.classList.add("zone-widget-container"),this.domNode.appendChild(this.container),this.options.showArrow&&(this._arrow=new xD(this.editor),this._disposables.add(this._arrow)),this._fillContainer(this.container),this._initSash(),this._applyStyles()}style(e){e.frameColor&&(this.options.frameColor=e.frameColor),e.arrowColor&&(this.options.arrowColor=e.arrowColor),this._applyStyles()}_applyStyles(){if(this.container&&this.options.frameColor){let e=this.options.frameColor.toString();this.container.style.borderTopColor=e,this.container.style.borderBottomColor=e}if(this._arrow&&this.options.arrowColor){let e=this.options.arrowColor.toString();this._arrow.color=e}}_getWidth(e){return e.width-e.minimap.minimapWidth-e.verticalScrollbarWidth}_getLeft(e){return e.minimap.minimapWidth>0&&0===e.minimap.minimapLeft?e.minimap.minimapWidth:0}_onViewZoneTop(e){this.domNode.style.top=e+"px"}_onViewZoneHeight(e){if(this.domNode.style.height=`${e}px`,this.container){let t=e-this._decoratingElementsHeight();this.container.style.height=`${t}px`;const i=this.editor.getLayoutInfo();this._doLayout(t,this._getWidth(i))}this._resizeSash&&this._resizeSash.layout()}get position(){const[e]=this._positionMarkerId;if(!e)return;const t=this.editor.getModel();if(!t)return;const i=t.getDecorationRange(e);return i?i.getStartPosition():void 0}show(e,t){const i=ro.isIRange(e)?ro.lift(e):ro.fromPositions(e);this._isShowing=!0,this._showImpl(i,t),this._isShowing=!1,this._positionMarkerId=this.editor.deltaDecorations(this._positionMarkerId,[{range:i,options:xc.EMPTY}])}hide(){this._viewZone&&(this.editor.changeViewZones(e=>{this._viewZone&&e.removeZone(this._viewZone.id)}),this._viewZone=null),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._arrow&&this._arrow.hide()}_decoratingElementsHeight(){let e=this.editor.getOption(54),t=0;return this.options.showArrow&&(t+=2*Math.round(e/3)),this.options.showFrame&&(t+=2*Math.round(e/9)),t}_showImpl(e,t){const i=e.getStartPosition(),n=this.editor.getLayoutInfo(),o=this._getWidth(n);this.domNode.style.width=`${o}px`,this.domNode.style.left=this._getLeft(n)+"px";const s=document.createElement("div");s.style.overflow="hidden";const r=this.editor.getOption(54),a=Math.max(12,this.editor.getLayoutInfo().height/r*.8);t=Math.min(t,a);let l=0,h=0;if(this._arrow&&this.options.showArrow&&(l=Math.round(r/3),this._arrow.height=l,this._arrow.show(i)),this.options.showFrame&&(h=Math.round(r/9)),this.editor.changeViewZones(e=>{this._viewZone&&e.removeZone(this._viewZone.id),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this.domNode.style.top="-1000px",this._viewZone=new DD(s,i.lineNumber,i.column,t,e=>this._onViewZoneTop(e),e=>this._onViewZoneHeight(e)),this._viewZone.id=e.addZone(this._viewZone),this._overlayWidget=new ED("vs.editor.contrib.zoneWidget"+this._viewZone.id,this.domNode),this.editor.addOverlayWidget(this._overlayWidget)}),this.container&&this.options.showFrame){const e=this.options.frameWidth?this.options.frameWidth:h;this.container.style.borderTopWidth=e+"px",this.container.style.borderBottomWidth=e+"px"}let c=t*r-this._decoratingElementsHeight();this.container&&(this.container.style.top=l+"px",this.container.style.height=c+"px",this.container.style.overflow="hidden"),this._doLayout(c,o),this.options.keepEditorSelection||this.editor.setSelection(e);const d=this.editor.getModel();if(d){const t=e.endLineNumber+1;t<=d.getLineCount()?this.revealLine(t,!1):this.revealLine(d.getLineCount(),!0)}}revealLine(e,t){t?this.editor.revealLineInCenter(e,0):this.editor.revealLine(e,0)}setCssClass(e,t){this.container&&(t&&this.container.classList.remove(t),this.container.classList.add(e))}_onWidth(e){}_doLayout(e,t){}_relayout(e){this._viewZone&&this._viewZone.heightInLines!==e&&this.editor.changeViewZones(t=>{this._viewZone&&(this._viewZone.heightInLines=e,t.layoutZone(this._viewZone.id))})}_initSash(){if(this._resizeSash)return;let e;this._resizeSash=this._disposables.add(new jw(this.domNode,this,{orientation:1})),this.options.isResizeable||(this._resizeSash.hide(),this._resizeSash.state=0),this._disposables.add(this._resizeSash.onDidStart(t=>{this._viewZone&&(e={startY:t.startY,heightInLines:this._viewZone.heightInLines})})),this._disposables.add(this._resizeSash.onDidEnd(()=>{e=void 0})),this._disposables.add(this._resizeSash.onDidChange(t=>{if(e){let i=(t.currentY-e.startY)/this.editor.getOption(54),n=i<0?Math.ceil(i):Math.floor(i),o=e.heightInLines+n;o>5&&o<35&&this._relayout(o)}}))}getHorizontalSashLeft(){return 0}getHorizontalSashTop(){return(null===this.domNode.style.height?0:parseInt(this.domNode.style.height))-this._decoratingElementsHeight()/2}getHorizontalSashWidth(){const e=this.editor.getLayoutInfo();return e.width-e.minimap.minimapWidth}}{constructor(e,t,i){super(e,t),this.instantiationService=i,this._onDidClose=new oe,this.onDidClose=this._onDidClose.event,Qu(this.options,zD,!1)}dispose(){this.disposed||(this.disposed=!0,super.dispose(),this._onDidClose.fire(this))}style(e){let t=this.options;e.headerBackgroundColor&&(t.headerBackgroundColor=e.headerBackgroundColor),e.primaryHeadingColor&&(t.primaryHeadingColor=e.primaryHeadingColor),e.secondaryHeadingColor&&(t.secondaryHeadingColor=e.secondaryHeadingColor),super.style(e)}_applyStyles(){super._applyStyles();let e=this.options;this._headElement&&e.headerBackgroundColor&&(this._headElement.style.backgroundColor=e.headerBackgroundColor.toString()),this._primaryHeading&&e.primaryHeadingColor&&(this._primaryHeading.style.color=e.primaryHeadingColor.toString()),this._secondaryHeading&&e.secondaryHeadingColor&&(this._secondaryHeading.style.color=e.secondaryHeadingColor.toString()),this._bodyElement&&e.frameColor&&(this._bodyElement.style.borderColor=e.frameColor.toString())}_fillContainer(e){this.setCssClass("peekview-widget"),this._headElement=Bu(".head"),this._bodyElement=Bu(".body"),this._fillHead(this._headElement),this._fillBody(this._bodyElement),e.appendChild(this._headElement),e.appendChild(this._bodyElement)}_fillHead(e,i){const n=Bu(".peekview-title");Mu(this._headElement,n),Gd(n,"click",e=>this._onTitleClick(e)),this._fillTitleIcon(n),this._primaryHeading=Bu("span.filename"),this._secondaryHeading=Bu("span.dirname"),this._metaHeading=Bu("span.meta"),Mu(n,this._primaryHeading,this._secondaryHeading,this._metaHeading);const o=Bu(".peekview-actions");Mu(this._headElement,o);const s=this._getActionBarOptions();this._actionbarWidget=new ly(o,s),this._disposables.add(this._actionbarWidget),i||this._actionbarWidget.push(new Pt("peekview.close",t(0,"Close"),un.close.classNames,!0,()=>(this.dispose(),Promise.resolve())),{label:!1,icon:!0})}_fillTitleIcon(e){}_getActionBarOptions(){return{actionViewItemProvider:RD.bind(void 0,this.instantiationService),orientation:0}}_onTitleClick(e){}setTitle(e,t){this._primaryHeading&&this._secondaryHeading&&(this._primaryHeading.innerText=e,this._primaryHeading.setAttribute("aria-label",e),t?this._secondaryHeading.innerText=t:Ud(this._secondaryHeading))}setMetaTitle(e){this._metaHeading&&(e?(this._metaHeading.innerText=e,Wu(this._metaHeading)):Vu(this._metaHeading))}_doLayout(e,t){if(!this._isShowing&&e<0)return void this.dispose();const i=Math.ceil(1.2*this.editor.getOption(54)),n=Math.round(e-(i+2));this._doLayoutHead(i,t),this._doLayoutBody(n,t)}_doLayoutHead(e,t){this._headElement&&(this._headElement.style.height=`${e}px`,this._headElement.style.lineHeight=this._headElement.style.height)}_doLayoutBody(e,t){this._bodyElement&&(this._bodyElement.style.height=`${e}px`)}};HD=PD([FD(2,Et)],HD);const UD=im("peekViewTitle.background",{dark:"#1E1E1E",light:"#FFFFFF",hc:"#0C141F"},t(0,"Background color of the peek view title area.")),KD=im("peekViewTitleLabel.foreground",{dark:"#FFFFFF",light:"#333333",hc:"#FFFFFF"},t(0,"Color of the peek view title.")),$D=im("peekViewTitleDescription.foreground",{dark:"#ccccccb3",light:"#616161e6",hc:"#FFFFFF99"},t(0,"Color of the peek view title info.")),jD=im("peekView.border",{dark:"#007acc",light:"#007acc",hc:sm},t(0,"Color of the peek view borders and arrow.")),qD=im("peekViewResult.background",{dark:"#252526",light:"#F3F3F3",hc:uc.black},t(0,"Background color of the peek view result list.")),GD=im("peekViewResult.lineForeground",{dark:"#bbbbbb",light:"#646465",hc:uc.white},t(0,"Foreground color for line nodes in the peek view result list.")),YD=im("peekViewResult.fileForeground",{dark:uc.white,light:"#1E1E1E",hc:uc.white},t(0,"Foreground color for file nodes in the peek view result list.")),ZD=im("peekViewResult.selectionBackground",{dark:"#3399ff33",light:"#3399ff33",hc:null},t(0,"Background color of the selected entry in the peek view result list.")),XD=im("peekViewResult.selectionForeground",{dark:uc.white,light:"#6C6C6C",hc:uc.white},t(0,"Foreground color of the selected entry in the peek view result list.")),QD=im("peekViewEditor.background",{dark:"#001F33",light:"#F2F8FC",hc:uc.black},t(0,"Background color of the peek view editor.")),JD=im("peekViewEditorGutter.background",{dark:QD,light:QD,hc:QD},t(0,"Background color of the gutter in the peek view editor.")),eE=im("peekViewResult.matchHighlightBackground",{dark:"#ea5c004d",light:"#ea5c004d",hc:null},t(0,"Match highlight color in the peek view result list.")),tE=im("peekViewEditor.matchHighlightBackground",{dark:"#ff8f0099",light:"#f5d802de",hc:null},t(0,"Match highlight color in the peek view editor.")),iE=im("peekViewEditor.matchHighlightBorder",{dark:null,light:null,hc:rm},t(0,"Match highlight border in the peek view editor."));var nE,oE=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class sE{constructor(e,t,i,n,o){this.isProviderFirst=e,this.parent=t,this.uri=i,this._range=n,this._rangeCallback=o,this.id=yD.nextId()}get range(){return this._range}set range(e){this._range=e,this._rangeCallback(this)}get ariaMessage(){var e;const i=null===(e=this.parent.getPreview(this))||void 0===e?void 0:e.preview(this.range);return i?t(0,"symbol in {0} on line {1} at column {2}, {3}",xs(this.uri),this.range.startLineNumber,this.range.startColumn,i.value):t(0,"symbol in {0} on line {1} at column {2}",xs(this.uri),this.range.startLineNumber,this.range.startColumn)}}class rE{constructor(e){this._modelReference=e}dispose(){this._modelReference.dispose()}preview(e,t=8){const i=this._modelReference.object.textEditorModel;if(!i)return;const{startLineNumber:n,startColumn:o,endLineNumber:s,endColumn:r}=e,a=i.getWordUntilPosition({lineNumber:n,column:o-t}),l=new ro(n,a.startColumn,n,o),h=new ro(s,r,s,1073741824),c=i.getValueInRange(l).replace(/^\s+/,""),d=i.getValueInRange(e);return{value:c+d+i.getValueInRange(h).replace(/\s+$/,""),highlight:{start:c.length,end:c.length+d.length}}}}class aE{constructor(e,t){this.parent=e,this.uri=t,this.children=[],this._previews=new Ea}dispose(){f(this._previews.values()),this._previews.clear()}getPreview(e){return this._previews.get(e.uri)}get ariaMessage(){const e=this.children.length;return 1===e?t(0,"1 symbol in {0}, full path {1}",xs(this.uri),this.uri.fsPath):t(0,"{0} symbols in {1}, full path {2}",e,xs(this.uri),this.uri.fsPath)}resolve(e){return oE(this,void 0,void 0,(function*(){if(0!==this._previews.size)return this;for(let t of this.children)if(!this._previews.has(t.uri))try{const i=yield e.createModelReference(t.uri);this._previews.set(t.uri,new rE(i))}catch(e){n(e)}return this}))}}class lE{constructor(e,t){this.groups=[],this.references=[],this._onDidChangeReferenceRange=new oe,this.onDidChangeReferenceRange=this._onDidChangeReferenceRange.event,this._links=e,this._title=t;const[i]=e;let n;e.sort(lE._compareReferences);for(let t of e)if(n&&Ls.isEqual(n.uri,t.uri,!0)||(n=new aE(this,t.uri),this.groups.push(n)),0===n.children.length||0!==lE._compareReferences(t,n.children[n.children.length-1])){const e=new sE(i===t,n,t.uri,t.targetSelectionRange||t.range,e=>this._onDidChangeReferenceRange.fire(e));this.references.push(e),n.children.push(e)}}dispose(){f(this.groups),this._onDidChangeReferenceRange.dispose(),this.groups.length=0}clone(){return new lE(this._links,this._title)}get title(){return this._title}get isEmpty(){return 0===this.groups.length}get ariaMessage(){return this.isEmpty?t(0,"No results found"):1===this.references.length?t(0,"Found 1 symbol in {0}",this.references[0].uri.fsPath):1===this.groups.length?t(0,"Found {0} symbols in {1}",this.references.length,this.groups[0].uri.fsPath):t(0,"Found {0} symbols in {1} files",this.references.length,this.groups.length)}nextOrPreviousReference(e,t){let{parent:i}=e,n=i.children.indexOf(e),o=i.children.length,s=i.parent.groups.length;return 1===s||t&&n+10?i.children[n=t?(n+1)%o:(n+o-1)%o]:(n=i.parent.groups.indexOf(i),t?i.parent.groups[n=(n+1)%s].children[0]:i.parent.groups[n=(n+s-1)%s].children[i.parent.groups[n].children.length-1])}nearestReference(e,t){const i=this.references.map((i,n)=>({idx:n,prefixLen:hi(i.uri.toString(),e.toString()),offsetDist:100*Math.abs(i.range.startLineNumber-t.lineNumber)+Math.abs(i.range.startColumn-t.column)})).sort((e,t)=>e.prefixLen>t.prefixLen?-1:e.prefixLent.offsetDist?1:0)[0];if(i)return this.references[i.idx]}referenceAt(e,t){for(const i of this.references)if(i.uri.toString()===e.toString()&&ro.containsPosition(i.range,t))return i}firstReference(){for(const e of this.references)if(e.isProviderFirst)return e;return this.references[0]}static _compareReferences(e,t){return Ls.compare(e.uri,t.uri)||ro.compareRangesUsingStarts(e.range,t.range)}}class hE{constructor(e,t){this.supportIcons=t,this.text="",this.title="",this.highlights=[],this.didEverRender=!1,this.domNode=document.createElement("span"),this.domNode.className="monaco-highlighted-label",e.appendChild(this.domNode)}get element(){return this.domNode}set(e,t=[],i="",n){e||(e=""),n&&(e=hE.escapeNewLines(e,t)),this.didEverRender&&this.text===e&&this.title===i&&Ju(this.highlights,t)||(this.text=e,this.title=i,this.highlights=t,this.render())}render(){const e=[];let t=0;for(const i of this.highlights){if(i.end===i.start)continue;if(t{n="\r\n"===e?-1:0,o+=i;for(const e of t)e.end<=o||(e.start>=o&&(e.start+=n),e.end>=o&&(e.end+=n));return i+=n,"⏎"})}}!function(e){function t(e,t){if(e.start>=t.end||t.start>=e.end)return{start:0,end:0};const i=Math.max(e.start,t.start),n=Math.min(e.end,t.end);return n-i<=0?{start:0,end:0}:{start:i,end:n}}function i(e){return e.end-e.start<=0}e.intersect=t,e.isEmpty=i,e.intersects=function n(e,o){return!i(t(e,o))},e.relativeComplement=function o(e,t){const n=[],o={start:e.start,end:Math.min(t.start,e.end)},s={start:Math.max(t.end,e.start),end:e.end};return i(o)||n.push(o),i(s)||n.push(s),n}}(nE||(nE={}));var cE=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class dE{constructor(e){this._element=e}get element(){return this._element}set textContent(e){this.disposed||e===this._textContent||(this._textContent=e,this._element.textContent=e)}set className(e){this.disposed||e===this._className||(this._className=e,this._element.className=e)}set empty(e){this.disposed||e===this._empty||(this._empty=e,this._element.style.marginLeft=e?"0":"")}dispose(){this.disposed=!0}}class uE extends C{constructor(e,t){super(),this.hoverDelegate=void 0,this.customHovers=new Map,this.domNode=this._register(new dE(Mu(e,Bu(".monaco-icon-label")))),this.labelContainer=Mu(this.domNode.element,Bu(".monaco-icon-label-container"));const i=Mu(this.labelContainer,Bu("span.monaco-icon-name-container"));this.descriptionContainer=this._register(new dE(Mu(this.labelContainer,Bu("span.monaco-icon-description-container")))),this.nameNode=(null==t?void 0:t.supportHighlights)?new pE(i,!!t.supportIcons):new gE(i),this.descriptionNodeFactory=(null==t?void 0:t.supportDescriptionHighlights)?()=>new hE(Mu(this.descriptionContainer.element,Bu("span.label-description")),!!t.supportIcons):()=>this._register(new dE(Mu(this.descriptionContainer.element,Bu("span.label-description")))),(null==t?void 0:t.hoverDelegate)&&(this.hoverDelegate=t.hoverDelegate)}setLabel(e,t,i){const n=["monaco-icon-label"];i&&(i.extraClasses&&n.push(...i.extraClasses),i.italic&&n.push("italic"),i.strikethrough&&n.push("strikethrough")),this.domNode.className=n.join(" "),this.setupHover(this.labelContainer,null==i?void 0:i.title),this.nameNode.setLabel(e,i),(t||this.descriptionNode)&&(this.descriptionNode||(this.descriptionNode=this.descriptionNodeFactory()),this.descriptionNode instanceof hE?(this.descriptionNode.set(t||"",i?i.descriptionMatches:void 0),this.setupHover(this.descriptionNode.element,null==i?void 0:i.descriptionTitle)):(this.descriptionNode.textContent=t||"",this.setupHover(this.descriptionNode.element,(null==i?void 0:i.descriptionTitle)||""),this.descriptionNode.empty=!t))}setupHover(e,t){const i=this.customHovers.get(e);if(i&&(i.dispose(),this.customHovers.delete(e)),t)return this.hoverDelegate?this.setupCustomHover(this.hoverDelegate,e,t):this.setupNativeHover(e,t);e.removeAttribute("title")}static adjustXAndShowCustomHover(e,t,i,n){if(e&&n)return void 0!==t&&(e.target.x=t+10),i.showHover(e)}getTooltipForCustom(e){if(Se(e))return()=>cE(this,void 0,void 0,(function*(){return e}));if(Te(e.markdown))return e.markdown;{const t=e.markdown;return()=>cE(this,void 0,void 0,(function*(){return t}))}}setupCustomHover(e,i,n){i.setAttribute("title",""),i.removeAttribute("title");let o=this.getTooltipForCustom(n);const s=H?1500:500;let r,a,l,h,c=!1;const d=this._register(Ed(i,Nu.MOUSE_OVER,!0)(function u(d){if(c)return;function u(e){e.type!==Nu.MOUSE_DOWN&&e.fromElement!==i||(null==h||h.dispose(),h=void 0,c=!1,r=void 0,l.dispose(!0),g.dispose(),p.dispose())}l=new Oa;const g=Ed(i,Nu.MOUSE_LEAVE,!0)(u.bind(i)),p=Ed(i,Nu.MOUSE_DOWN,!0)(u.bind(i));c=!0;const m=Ed(i,Nu.MOUSE_MOVE,!0)(function f(e){a=e.x}.bind(i));setTimeout(()=>cE(this,void 0,void 0,(function*(){var i;if(c&&o&&!r){const s={targetElements:[this],dispose:()=>{}};r={text:t(0,"Loading..."),target:s,anchorPosition:0},h=uE.adjustXAndShowCustomHover(r,a,e,c);const d=null!==(i=yield o(l.token))&&void 0!==i?i:Se(n)?void 0:n.markdownNotSupportedFallback;d?h=uE.adjustXAndShowCustomHover(r={text:d,target:s,anchorPosition:0},a,e,c):h&&(h.dispose(),h=void 0)}m.dispose()})),s)}.bind(i)));this.customHovers.set(i,d)}setupNativeHover(e,t){let i="";Se(t)?i=t:(null==t?void 0:t.markdownNotSupportedFallback)&&(i=t.markdownNotSupportedFallback),e.title=i}}class gE{constructor(e){this.container=e,this.label=void 0,this.singleLabel=void 0}setLabel(e,t){if(this.label!==e||!Ju(this.options,t))if(this.label=e,this.options=t,"string"==typeof e)this.singleLabel||(this.container.innerText="",this.container.classList.remove("multiple"),this.singleLabel=Mu(this.container,Bu("a.label-name",{id:null==t?void 0:t.domId}))),this.singleLabel.textContent=e;else{this.container.innerText="",this.container.classList.add("multiple"),this.singleLabel=void 0;for(let i=0;i{const i={start:o,end:o+e.length},s=n.map(e=>nE.intersect(i,e)).filter(e=>!nE.isEmpty(e)).map(({start:e,end:t})=>({start:e-o,end:t-o}));return o=i.end+t.length,s})}(e,i,null==t?void 0:t.matches);for(let o=0;o3)&&vs(t)&&(2===e.length||92===t.charCodeAt(2)):t===tt.sep}(t)?LE(t):t}function LE(e){return vs(e)?e.charAt(0).toUpperCase()+e.slice(1):e}function DE(...e){return function(t,i){for(let n=0,o=e.length;n0?[{start:0,end:t.length}]:[]:null}.bind(void 0,!0);function kE(e){return 97<=e&&e<=122}function NE(e){return 65<=e&&e<=90}function IE(e){return 48<=e&&e<=57}function TE(e){return 32===e||9===e||10===e||13===e}const AE=new Set;function ME(e){return kE(e)||NE(e)||IE(e)}function OE(e,t){return 0===t.length?t=[e]:e.end===t[0].start?t[0].start=e.start:t.unshift(e),t}function RE(e,t){for(let i=t;i0&&!ME(e.charCodeAt(i-1)))return i}return e.length}function PE(e,t,i,n){if(i===e.length)return[];if(n===t.length)return null;if(e[i]!==t[n].toLowerCase())return null;{let o=null,s=n+1;for(o=PE(e,t,i+1,n+1);!o&&(s=RE(t,s))60)return null;const n=function o(e){let t=0,i=0,n=0,o=0,s=0;for(let r=0;r.2&&t<.8&&n>.6&&o<.2}(n)){if(!function r(e){const{upperPercent:t,lowerPercent:i}=e;return 0===i&&t>.6}(n))return null;t=t.toLowerCase()}let a=null,l=0;for(e=e.toLowerCase();l/?".split("").forEach(e=>AE.add(e.charCodeAt(0)));const BE=DE(EE,FE,(function WE(e,t){const i=t.toLowerCase().indexOf(e.toLowerCase());return-1===i?null:[{start:i,end:i+e.length}]})),VE=DE(EE,FE,(function zE(e,t){return function e(t,i,n,o){if(n===t.length)return[];if(o===i.length)return null;if(t[n]===i[o]){let s=null;return(s=e(t,i,n+1,o+1))?OE({start:o,end:o+1},s):null}return e(t,i,n,o+1)}(e.toLowerCase(),t.toLowerCase(),0,0)})),HE=new ka(1e4);function UE(e,t,i=!1){if("string"!=typeof e||"string"!=typeof t)return null;let n=HE.get(e);n||(n=new RegExp(function o(e){return e.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g,"\\$&").replace(/[\*]/g,".*")}(e),"i"),HE.set(e,n));const s=n.exec(t);return s?[{start:s.index,end:s.index+s[0].length}]:i?VE(e,t):BE(e,t)}function KE(e,t,i,n,o,s){const r=ox(e,t,0,n,o,0,!0);if(r)return r;let a=[],l=0,h=s;for(let e=0;e=0)l+=1,a.unshift(i),h=i+1;else if(a.length>0)break}return[l,s,...a]}function $E(e){if(void 0===e)return[];const t=[],i=e[1];for(let n=e.length-1;n>1;n--){const o=e[n]+i,s=t[t.length-1];s&&s.end===o?s.end=o+1:t.push({start:o,end:o+1})}return t}const jE=128;function qE(){const e=[],t=[];for(let e=0;e<=jE;e++)t[e]=0;for(let i=0;i<=jE;i++)e.push(t.slice(0));return e}function GE(e){const t=[];for(let i=0;i<=e;i++)t[i]=0;return t}const YE=GE(2*jE),ZE=GE(2*jE),XE=qE(),QE=qE(),JE=qE();function ex(e,t){if(t<0||t>=e.length)return!1;const i=e.codePointAt(t);switch(i){case 95:case 45:case 46:case 32:case 47:case 92:case 39:case 34:case 58:case 36:case 60:case 40:case 91:return!0;case void 0:return!1;default:return!!Di(i)}}function tx(e,t){if(t<0||t>=e.length)return!1;switch(e.charCodeAt(t)){case 32:case 9:return!0;default:return!1}}function ix(e,t,i){return t[e]!==i[e]}var nx;function ox(e,t,i,n,o,s,r){const a=e.length>jE?jE:e.length,l=n.length>jE?jE:n.length;if(i>=a||s>=l||a-i>l-s)return;if(!function h(e,t,i,n,o,s,r=!1){for(;t=i&&a>=n;)o[r]===s[a]&&(ZE[r]=a,r--),a--}(a,l,i,s,t,o);let d=1,u=1,g=i,p=s;const m=[!1];for(d=1,g=i;gr,b=_?QE[d][u-1]+(XE[d][u-1]>0?-5:0):0,v=p>r+1&&XE[d][u-1]>0,C=v?QE[d][u-2]+(XE[d][u-2]>0?-5:0):0;if(v&&(!_||C>=b)&&(!c||C>=f))QE[d][u]=C,JE[d][u]=3,XE[d][u]=0;else if(_&&(!c||b>=f))QE[d][u]=b,JE[d][u]=2,XE[d][u]=0;else{if(!c)throw new Error("not possible");QE[d][u]=f,JE[d][u]=1,XE[d][u]=XE[d-1][u-1]+1}}}if(!m[0]&&!r)return;const f=[QE[--d][--u],s];let _=0,b=0;for(;d>=1;){let e=u;do{const t=JE[d][e];if(3===t)e-=2;else{if(2!==t)break;e-=1}}while(e>=1);_>1&&t[i+d-1]===o[s+u-1]&&!ix(e+s-1,n,o)&&_+1>XE[d][e]&&(e=u),e===u?_++:_=1,b||(b=e),d--,f.push(u=e-1)}return l===a&&(f[0]+=2),f[0]-=b-a,f}function sx(e,t,i,n,o,s,r,a,l,h,c){if(t[i]!==s[r])return Number.MIN_SAFE_INTEGER;let d=1,u=!1;return r===i-n?d=e[i]===o[r]?7:5:!ix(r,o,s)||0!==r&&ix(r-1,o,s)?!ex(s,r)||0!==r&&ex(s,r-1)?(ex(s,r-1)||tx(s,r-1))&&(d=5,u=!0):d=5:(d=e[i]===o[r]?7:5,u=!0),d>1&&i===n&&(c[0]=!0),u||(u=ix(r,o,s)||ex(s,r-1)||tx(s,r-1)),i===n?r>l&&(d-=u?3:5):d+=h?u?2:0:u?0:1,r+1===a&&(d-=u?3:5),d}function rx(e,t,i,n,o,s,r){return function a(e,t,i,n,o,s,r,l){let h=ox(e,t,i,n,o,s,l);if(h&&!r)return h;if(e.length>=3){const t=Math.min(7,e.length-1);for(let r=i+1;rh[0])&&(h=e))}}}return h}(e,t,i,n,o,s,!0,r)}function ax(e,t){if(t+1>=e.length)return;const i=e[t],n=e[t+1];return i!==n?e.slice(0,t)+n+i+e.slice(t+2):void 0}!function(e){e.Default=[-100,0],e.isDefault=function t(e){return!e||2===e.length&&-100===e[0]&&0===e[1]}}(nx||(nx={}));var lx=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},hx=function(e,t){return function(i,n){t(i,n,e)}};let cx=class{constructor(e){this._resolverService=e}hasChildren(e){return e instanceof lE||e instanceof aE}getChildren(e){if(e instanceof lE)return e.groups;if(e instanceof aE)return e.resolve(this._resolverService).then(e=>e.children);throw new Error("bad tree")}};cx=lx([hx(0,Ot)],cx);class dx{getHeight(){return 23}getTemplateId(e){return e instanceof aE?mx.id:_x.id}}let ux=class{constructor(e){this._keybindingService=e}getKeyboardNavigationLabel(e){var t;if(e instanceof sE){const i=null===(t=e.parent.getPreview(e))||void 0===t?void 0:t.preview(e.range);if(i)return i.value}return xs(e.uri)}};ux=lx([hx(0,FS)],ux);class gx{getId(e){return e instanceof sE?e.id:e.uri}}let px=class extends C{constructor(e,t,i){super(),this._uriLabel=t;const n=document.createElement("div");n.classList.add("reference-file"),this.file=this._register(new uE(n,{supportHighlights:!0})),this.badge=new fE(Mu(n,Bu(".count"))),this._register(function o(e,t,i){return vE(t,{badgeBackground:i&&i.badgeBackground||xm,badgeForeground:i&&i.badgeForeground||km,badgeBorder:sm},e)}(this.badge,i)),e.appendChild(n)}set(e,i){let n=ks(e.uri);this.file.setLabel(SE(e.uri),this._uriLabel.getUriLabel(n,{relative:!0}),{title:this._uriLabel.getUriLabel(e.uri),matches:i});const o=e.children.length;this.badge.setCount(o),this.badge.setTitleFormat(t(0,o>1?"{0} references":"{0} reference",o))}};px=lx([hx(1,_E),hx(2,pn)],px);let mx=class e{constructor(t){this._instantiationService=t,this.templateId=e.id}renderTemplate(e){return this._instantiationService.createInstance(px,e)}renderElement(e,t,i){i.set(e.element,$E(e.filterData))}disposeTemplate(e){e.dispose()}};mx.id="FileReferencesRenderer",mx=lx([hx(0,Et)],mx);class fx{constructor(e){this.label=new hE(e,!1)}set(e,t){var i;const n=null===(i=e.parent.getPreview(e))||void 0===i?void 0:i.preview(e.range);if(n&&n.value){const{value:e,highlight:i}=n;t&&!nx.isDefault(t)?(this.label.element.classList.toggle("referenceMatch",!1),this.label.set(e,$E(t))):(this.label.element.classList.toggle("referenceMatch",!0),this.label.set(e,[i]))}else this.label.set(`${xs(e.uri)}:${e.range.startLineNumber+1}:${e.range.startColumn+1}`)}}class _x{constructor(){this.templateId=_x.id}renderTemplate(e){return new fx(e)}renderElement(e,t,i){i.set(e.element,e.filterData)}disposeTemplate(){}}_x.id="OneReferenceRenderer";class bx{getWidgetAriaLabel(){return t(0,"References")}getAriaLabel(e){return e.ariaMessage}}class vx extends Error{constructor(e,t){super(`ListError [${e}] ${t}`)}}function Cx(e,t){const i=[];for(let n of t){if(e.start>=n.range.end)continue;if(e.end({range:wx(e.range,n),size:e.size})),r=i.map((t,i)=>({range:{start:e+i,end:e+i+1},size:t.size}));this.groups=function a(...e){return function t(e){const t=[];let i=null;for(let n of e){const e=n.range.start,o=n.range.end,s=n.size;i&&s===i.size?i.range.end=o:t.push(i={range:{start:e,end:o},size:s})}return t}(e.reduce((e,t)=>e.concat(t),[]))}(o,r,s),this._size=this.groups.reduce((e,t)=>e+t.size*(t.range.end-t.range.start),0)}get count(){const e=this.groups.length;return e?this.groups[e-1].range.end:0}get size(){return this._size}indexAt(e){if(e<0)return-1;let t=0,i=0;for(let n of this.groups){const o=n.range.end-n.range.start,s=i+o*n.size;if(e{for(const i of e)this.getRenderer(t).disposeTemplate(i.templateData),i.templateData=null}),this.cache.clear()}getRenderer(e){const t=this.renderers.get(e);if(!t)throw new Error(`No renderer found for ${e}`);return t}}var Lx=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};const Dx={useShadows:!0,verticalScrollMode:1,setRowLineHeight:!0,setRowHeight:!0,supportDynamicHeights:!1,dnd:{getDragElements:e=>[e],getDragURI:()=>null,onDragStart(){},onDragOver:()=>!1,drop(){}},horizontalScrolling:!1,transformOptimization:!0,alwaysConsumeMouseWheel:!0};class Ex{constructor(e){this.elements=e}update(){}getData(){return this.elements}}class xx{constructor(e){this.elements=e}update(){}getData(){return this.elements}}class kx{constructor(){this.types=[],this.files=[]}update(e){if(e.types&&this.types.splice(0,this.types.length,...e.types),e.files){this.files.splice(0,this.files.length);for(let t=0;ti,this.getPosInSet=(null==e?void 0:e.getPosInSet)?e.getPosInSet.bind(e):(e,t)=>t+1,this.getRole=(null==e?void 0:e.getRole)?e.getRole.bind(e):e=>"listitem",this.isChecked=(null==e?void 0:e.isChecked)?e.isChecked.bind(e):e=>void 0}}class Ix{constructor(e,t,i,n=Dx){if(this.virtualDelegate=t,this.domId=`list_id_${++Ix.InstanceCount}`,this.renderers=new Map,this.renderWidth=0,this._scrollHeight=0,this.scrollableElementUpdateDisposable=null,this.scrollableElementWidthDelayer=new Wa(50),this.splicing=!1,this.dragOverAnimationStopDisposable=C.None,this.dragOverMouseY=0,this.canDrop=!1,this.currentDragFeedbackDisposable=C.None,this.onDragLeaveTimeout=C.None,this.disposables=new v,this._onDidChangeContentHeight=new oe,this._horizontalScrolling=!1,n.horizontalScrolling&&n.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");this.items=[],this.itemId=0,this.rangeMap=new yx;for(const e of i)this.renderers.set(e.templateId,e);this.cache=this.disposables.add(new Sx(this.renderers)),this.lastRenderTop=0,this.lastRenderHeight=0,this.domNode=document.createElement("div"),this.domNode.className="monaco-list",this.domNode.classList.add(this.domId),this.domNode.tabIndex=0,this.domNode.classList.toggle("mouse-support","boolean"!=typeof n.mouseSupport||n.mouseSupport),this._horizontalScrolling=eg(n,e=>e.horizontalScrolling,Dx.horizontalScrolling),this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this.additionalScrollHeight=void 0===n.additionalScrollHeight?0:n.additionalScrollHeight,this.accessibilityProvider=new Nx(n.accessibilityProvider),this.rowsContainer=document.createElement("div"),this.rowsContainer.className="monaco-list-rows",eg(n,e=>e.transformOptimization,Dx.transformOptimization)&&(this.rowsContainer.style.transform="translate3d(0px, 0px, 0px)"),this.disposables.add(Fg.addTarget(this.rowsContainer)),this.scrollable=new Mb(eg(n,e=>e.smoothScrolling,!1)?125:0,e=>Jd(e)),this.scrollableElement=this.disposables.add(new Ub(this.rowsContainer,{alwaysConsumeMouseWheel:eg(n,e=>e.alwaysConsumeMouseWheel,Dx.alwaysConsumeMouseWheel),horizontal:1,vertical:eg(n,e=>e.verticalScrollMode,Dx.verticalScrollMode),useShadows:eg(n,e=>e.useShadows,Dx.useShadows)},this.scrollable)),this.domNode.appendChild(this.scrollableElement.getDomNode()),e.appendChild(this.domNode),this.scrollableElement.onScroll(this.onScroll,this,this.disposables),Ed(this.rowsContainer,Pg.Change)(this.onTouchChange,this,this.disposables),Ed(this.scrollableElement.getDomNode(),"scroll")(e=>e.target.scrollTop=0,null,this.disposables),ie.map(Ed(this.domNode,"dragover"),e=>this.toDragEvent(e))(this.onDragOver,this,this.disposables),ie.map(Ed(this.domNode,"drop"),e=>this.toDragEvent(e))(this.onDrop,this,this.disposables),Ed(this.domNode,"dragleave")(this.onDragLeave,this,this.disposables),Ed(window,"dragend")(this.onDragEnd,this,this.disposables),this.setRowLineHeight=eg(n,e=>e.setRowLineHeight,Dx.setRowLineHeight),this.setRowHeight=eg(n,e=>e.setRowHeight,Dx.setRowHeight),this.supportDynamicHeights=eg(n,e=>e.supportDynamicHeights,Dx.supportDynamicHeights),this.dnd=eg(n,e=>e.dnd,Dx.dnd),this.layout()}get contentHeight(){return this.rangeMap.size}get horizontalScrolling(){return this._horizontalScrolling}set horizontalScrolling(e){if(e!==this._horizontalScrolling){if(e&&this.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");if(this._horizontalScrolling=e,this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this._horizontalScrolling){for(const e of this.items)this.measureItemWidth(e);this.updateScrollWidth(),this.scrollableElement.setScrollDimensions({width:gu(this.domNode)}),this.rowsContainer.style.width=`${Math.max(this.scrollWidth||0,this.renderWidth)}px`}else this.scrollableElementWidthDelayer.cancel(),this.scrollableElement.setScrollDimensions({width:this.renderWidth,scrollWidth:this.renderWidth}),this.rowsContainer.style.width=""}}updateOptions(e){void 0!==e.additionalScrollHeight&&(this.additionalScrollHeight=e.additionalScrollHeight),void 0!==e.smoothScrolling&&this.scrollable.setSmoothScrollDuration(e.smoothScrolling?125:0),void 0!==e.horizontalScrolling&&(this.horizontalScrolling=e.horizontalScrolling)}splice(e,t,i=[]){if(this.splicing)throw new Error("Can't run recursive splices.");this.splicing=!0;try{return this._splice(e,t,i)}finally{this.splicing=!1,this._onDidChangeContentHeight.fire(this.contentHeight)}}_splice(e,t,i=[]){const n=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),o=nE.intersect(n,{start:e,end:e+t}),s=new Map;for(let e=o.start;e({id:String(this.itemId++),element:e,templateId:this.virtualDelegate.getTemplateId(e),size:this.virtualDelegate.getHeight(e),width:void 0,hasDynamicHeight:!!this.virtualDelegate.hasDynamicHeight&&this.virtualDelegate.hasDynamicHeight(e),lastDynamicHeightWidth:void 0,row:null,uri:void 0,dropTarget:!1,dragStartDisposable:C.None}));let c;0===e&&t>=this.items.length?(this.rangeMap=new yx,this.rangeMap.splice(0,0,h),c=this.items,this.items=h):(this.rangeMap.splice(e,t,h),c=this.items.splice(e,t,...h));const d=i.length-t,u=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),g=wx(a,d),p=nE.intersect(u,g);for(let e=p.start;ewx(e,d)),_=[{start:e,end:e+i.length},...f].map(e=>nE.intersect(u,e)),b=this.getNextToLastElement(_);for(const e of _)for(let t=e.start;te.element)}eventuallyUpdateScrollDimensions(){this._scrollHeight=this.contentHeight,this.rowsContainer.style.height=`${this._scrollHeight}px`,this.scrollableElementUpdateDisposable||(this.scrollableElementUpdateDisposable=Jd(()=>{this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight}),this.updateScrollWidth(),this.scrollableElementUpdateDisposable=null}))}eventuallyUpdateScrollWidth(){this.horizontalScrolling?this.scrollableElementWidthDelayer.trigger(()=>this.updateScrollWidth()):this.scrollableElementWidthDelayer.cancel()}updateScrollWidth(){if(!this.horizontalScrolling)return;let e=0;for(const t of this.items)void 0!==t.width&&(e=Math.max(e,t.width));this.scrollWidth=e,this.scrollableElement.setScrollDimensions({scrollWidth:0===e?0:e+10})}rerender(){if(this.supportDynamicHeights){for(const e of this.items)e.lastDynamicHeightWidth=void 0;this._rerender(this.lastRenderTop,this.lastRenderHeight)}}get length(){return this.items.length}get renderHeight(){return this.scrollableElement.getScrollDimensions().height}element(e){return this.items[e].element}domElement(e){const t=this.items[e].row;return t&&t.domNode}elementHeight(e){return this.items[e].size}elementTop(e){return this.rangeMap.positionAt(e)}indexAt(e){return this.rangeMap.indexAt(e)}indexAfter(e){return this.rangeMap.indexAfter(e)}layout(e,t){let i={height:"number"==typeof e?e:pu(this.domNode)};this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,i.scrollHeight=this.scrollHeight),this.scrollableElement.setScrollDimensions(i),void 0!==t&&(this.renderWidth=t,this.supportDynamicHeights&&this._rerender(this.scrollTop,this.renderHeight),this.horizontalScrolling&&this.scrollableElement.setScrollDimensions({width:"number"==typeof t?t:gu(this.domNode)}))}render(e,t,i,n,o,s=!1){const r=this.getRenderRange(t,i),a=nE.relativeComplement(r,e),l=nE.relativeComplement(e,r),h=this.getNextToLastElement(a);if(s){const t=nE.intersect(e,r);for(let e=t.start;ethis.onDragStart(n.element,a,e))}this.horizontalScrolling&&(this.measureItemWidth(n),this.eventuallyUpdateScrollWidth())}measureItemWidth(e){if(!e.row||!e.row.domNode)return;e.row.domNode.style.width=ge?"-moz-fit-content":"fit-content",e.width=gu(e.row.domNode);const t=window.getComputedStyle(e.row.domNode);t.paddingLeft&&(e.width+=parseFloat(t.paddingLeft)),t.paddingRight&&(e.width+=parseFloat(t.paddingRight)),e.row.domNode.style.width=""}updateItemInDOM(e,t){e.row.domNode.style.top=`${this.elementTop(t)}px`,this.setRowHeight&&(e.row.domNode.style.height=`${e.size}px`),this.setRowLineHeight&&(e.row.domNode.style.lineHeight=`${e.size}px`),e.row.domNode.setAttribute("data-index",`${t}`),e.row.domNode.setAttribute("data-last-element",t===this.length-1?"true":"false"),e.row.domNode.setAttribute("aria-setsize",String(this.accessibilityProvider.getSetSize(e.element,t,this.length))),e.row.domNode.setAttribute("aria-posinset",String(this.accessibilityProvider.getPosInSet(e.element,t))),e.row.domNode.setAttribute("id",this.getElementDomId(t)),e.row.domNode.classList.toggle("drop-target",e.dropTarget)}removeItemFromDOM(e){const t=this.items[e];if(t.dragStartDisposable.dispose(),t.row){const i=this.renderers.get(t.templateId);i&&i.disposeElement&&i.disposeElement(t.element,e,t.row.templateData,t.size),this.cache.release(t.row),t.row=null}this.horizontalScrolling&&this.eventuallyUpdateScrollWidth()}getScrollTop(){return this.scrollableElement.getScrollPosition().scrollTop}setScrollTop(e,t){this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),this.scrollableElement.setScrollPosition({scrollTop:e,reuseAnimation:t})}get scrollTop(){return this.getScrollTop()}set scrollTop(e){this.setScrollTop(e)}get scrollHeight(){return this._scrollHeight+(this.horizontalScrolling?10:0)+this.additionalScrollHeight}get onMouseClick(){return ie.map(Ed(this.domNode,"click"),e=>this.toMouseEvent(e))}get onMouseDblClick(){return ie.map(Ed(this.domNode,"dblclick"),e=>this.toMouseEvent(e))}get onMouseMiddleClick(){return ie.filter(ie.map(Ed(this.domNode,"auxclick"),e=>this.toMouseEvent(e)),e=>1===e.browserEvent.button)}get onMouseDown(){return ie.map(Ed(this.domNode,"mousedown"),e=>this.toMouseEvent(e))}get onContextMenu(){return ie.map(Ed(this.domNode,"contextmenu"),e=>this.toMouseEvent(e))}get onTouchStart(){return ie.map(Ed(this.domNode,"touchstart"),e=>this.toTouchEvent(e))}get onTap(){return ie.map(Ed(this.rowsContainer,Pg.Tap),e=>this.toGestureEvent(e))}toMouseEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}toTouchEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}toGestureEvent(e){const t=this.getItemIndexFromEventTarget(e.initialTarget||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}toDragEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}onScroll(e){try{const t=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight);this.render(t,e.scrollTop,e.height,e.scrollLeft,e.scrollWidth),this.supportDynamicHeights&&this._rerender(e.scrollTop,e.height,e.inSmoothScrolling)}catch(t){throw console.error("Got bad scroll event:",e),t}}onTouchChange(e){e.preventDefault(),e.stopPropagation(),this.scrollTop-=e.translationY}onDragStart(e,t,i){if(!i.dataTransfer)return;const n=this.dnd.getDragElements(e);if(i.dataTransfer.effectAllowed="copyMove",i.dataTransfer.setData(ny.RESOURCES,JSON.stringify([t])),i.dataTransfer.setDragImage){let e;this.dnd.getDragLabel&&(e=this.dnd.getDragLabel(n,i)),void 0===e&&(e=String(n.length));const t=Bu(".monaco-drag-image");t.textContent=e,document.body.appendChild(t),i.dataTransfer.setDragImage(t,-10,-10),setTimeout(()=>document.body.removeChild(t),0)}this.currentDragData=new Ex(n),sy.CurrentDragAndDropData=new xx(n),this.dnd.onDragStart&&this.dnd.onDragStart(this.currentDragData,i)}onDragOver(e){if(e.browserEvent.preventDefault(),this.onDragLeaveTimeout.dispose(),sy.CurrentDragAndDropData&&"vscode-ui"===sy.CurrentDragAndDropData.getData())return!1;if(this.setupDragAndDropScrollTopAnimation(e.browserEvent),!e.browserEvent.dataTransfer)return!1;if(!this.currentDragData)if(sy.CurrentDragAndDropData)this.currentDragData=sy.CurrentDragAndDropData;else{if(!e.browserEvent.dataTransfer.types)return!1;this.currentDragData=new kx}const t=this.dnd.onDragOver(this.currentDragData,e.element,e.index,e.browserEvent);if(this.canDrop="boolean"==typeof t?t:t.accept,!this.canDrop)return this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),!1;let i;if(e.browserEvent.dataTransfer.dropEffect="boolean"!=typeof t&&0===t.effect?"copy":"move",i=oa(i="boolean"!=typeof t&&t.feedback?t.feedback:void 0===e.index?[-1]:[e.index]).filter(e=>e>=-1&&ee-t),function n(e,t){return Array.isArray(e)&&Array.isArray(t)?Zr(e,t):e===t}(this.currentDragFeedback,i=-1===i[0]?[-1]:i))return!0;if(this.currentDragFeedback=i,this.currentDragFeedbackDisposable.dispose(),-1===i[0])this.domNode.classList.add("drop-target"),this.rowsContainer.classList.add("drop-target"),this.currentDragFeedbackDisposable=b(()=>{this.domNode.classList.remove("drop-target"),this.rowsContainer.classList.remove("drop-target")});else{for(const e of i){const t=this.items[e];t.dropTarget=!0,t.row&&t.row.domNode.classList.add("drop-target")}this.currentDragFeedbackDisposable=b(()=>{for(const e of i){const t=this.items[e];t.dropTarget=!1,t.row&&t.row.domNode.classList.remove("drop-target")}})}return!0}onDragLeave(){this.onDragLeaveTimeout.dispose(),this.onDragLeaveTimeout=Ha(()=>this.clearDragOverFeedback(),100)}onDrop(e){if(!this.canDrop)return;const t=this.currentDragData;this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.currentDragData=void 0,sy.CurrentDragAndDropData=void 0,t&&e.browserEvent.dataTransfer&&(e.browserEvent.preventDefault(),t.update(e.browserEvent.dataTransfer),this.dnd.drop(t,e.element,e.index,e.browserEvent))}onDragEnd(e){this.canDrop=!1,this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.currentDragData=void 0,sy.CurrentDragAndDropData=void 0,this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}clearDragOverFeedback(){this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),this.currentDragFeedbackDisposable=C.None}setupDragAndDropScrollTopAnimation(e){if(!this.dragOverAnimationDisposable){const e=function t(e){let t=e.offsetParent,i=e.offsetTop,n=e.offsetLeft;for(;null!==(e=e.parentNode)&&e!==document.body&&e!==document.documentElement;){i-=e.scrollTop;const o=vu(e)?null:ru(e);o&&(n-="rtl"!==o.direction?e.scrollLeft:-e.scrollLeft),e===t&&(n+=lu.getBorderLeftWidth(e),i+=lu.getBorderTopWidth(e),i+=e.offsetTop,n+=e.offsetLeft,t=e.offsetParent)}return{left:n,top:i}}(this.domNode).top;this.dragOverAnimationDisposable=function i(e){const t=()=>{e(),i=Jd(t)};let i=Jd(t);return b(()=>i.dispose())}(this.animateDragAndDropScrollTop.bind(this,e))}this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationStopDisposable=Ha(()=>{this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)},1e3),this.dragOverMouseY=e.pageY}animateDragAndDropScrollTop(e){if(void 0===this.dragOverMouseY)return;const t=this.dragOverMouseY-e,i=this.renderHeight-35;t<35?this.scrollTop+=Math.max(-14,Math.floor(.3*(t-35))):t>i&&(this.scrollTop+=Math.min(14,Math.floor(.3*(t-i))))}teardownDragAndDropScrollTopAnimation(){this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)}getItemIndexFromEventTarget(e){const t=this.scrollableElement.getDomNode();let i=e;for(;i instanceof HTMLElement&&i!==this.rowsContainer&&t.contains(i);){const e=i.getAttribute("data-index");if(e){const t=Number(e);if(!isNaN(t))return t}i=i.parentElement}}getRenderRange(e,t){return{start:this.rangeMap.indexAt(e),end:this.rangeMap.indexAfter(e+t-1)}}_rerender(e,t,i){const n=this.getRenderRange(e,t);let o,s;e===this.elementTop(n.start)?(o=n.start,s=0):n.end-n.start>1&&(s=this.elementTop(o=n.start+1)-e);let r=0;for(;;){const a=this.getRenderRange(e,t);let l=!1;for(let e=a.start;en.splice(e,t,i))}}var Ax,Mx=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};class Ox{constructor(e){this.trait=e,this.renderedElements=[]}get templateId(){return`template:${this.trait.trait}`}renderTemplate(e){return e}renderElement(e,t,i){const n=this.renderedElements.findIndex(e=>e.templateData===i);if(n>=0){const e=this.renderedElements[n];this.trait.unrender(i),e.index=t}else this.renderedElements.push({index:t,templateData:i});this.trait.renderIndex(t,i)}splice(e,t,i){const n=[];for(const o of this.renderedElements)o.index=e+t&&n.push({index:o.index+i-t,templateData:o.templateData});this.renderedElements=n}renderIndexes(e){for(const{index:t,templateData:i}of this.renderedElements)e.indexOf(t)>-1&&this.trait.renderIndex(t,i)}disposeTemplate(e){const t=this.renderedElements.findIndex(t=>t.templateData===e);t<0||this.renderedElements.splice(t,1)}}class Rx{constructor(e){this._trait=e,this.indexes=[],this.sortedIndexes=[],this._onChange=new oe,this.onChange=this._onChange.event}get trait(){return this._trait}get renderer(){return new Ox(this)}splice(e,t,i){const n=i.length-t,o=e+t,s=[...this.sortedIndexes.filter(t=>tt?i+e:-1).filter(e=>-1!==e),...this.sortedIndexes.filter(e=>e>=o).map(e=>e+n)];this.renderer.splice(e,t,i.length),this._set(s,s)}renderIndex(e,t){t.classList.toggle(this._trait,this.contains(e))}unrender(e){e.classList.remove(this._trait)}set(e,t){return this._set(e,[...e].sort(Qx),t)}_set(e,t,i){const n=this.indexes,o=this.sortedIndexes;this.indexes=e,this.sortedIndexes=t;const s=Xx(o,e);return this.renderer.renderIndexes(s),this._onChange.fire({indexes:e,browserEvent:i}),n}get(){return this.indexes}contains(e){return Xr(this.sortedIndexes,e,Qx)>=0}dispose(){f(this._onChange)}}Mx([Rg],Rx.prototype,"renderer",null);class Px extends Rx{constructor(e){super("selected"),this.setAriaSelected=e}renderIndex(e,t){super.renderIndex(e,t),this.setAriaSelected&&(this.contains(e)?t.setAttribute("aria-selected","true"):t.setAttribute("aria-selected","false"))}}class Fx{constructor(e,t,i){this.trait=e,this.view=t,this.identityProvider=i}splice(e,t,i){if(!this.identityProvider)return this.trait.splice(e,t,i.map(()=>!1));const n=this.trait.get().map(e=>this.identityProvider.getId(this.view.element(e)).toString()),o=i.map(e=>n.indexOf(this.identityProvider.getId(e).toString())>-1);this.trait.splice(e,t,o)}}function Bx(e){return"INPUT"===e.tagName||"TEXTAREA"===e.tagName}function Wx(e){return!!e.classList.contains("monaco-editor")||!e.classList.contains("monaco-list")&&!!e.parentElement&&Wx(e.parentElement)}class Vx{constructor(e,t,i){this.list=e,this.view=t,this.disposables=new v;const n=!1!==i.multipleSelectionSupport,o=ie.chain(Ed(t.domNode,"keydown")).filter(e=>!Bx(e.target)).map(e=>new Rd(e));o.filter(e=>3===e.keyCode).on(this.onEnter,this,this.disposables),o.filter(e=>16===e.keyCode).on(this.onUpArrow,this,this.disposables),o.filter(e=>18===e.keyCode).on(this.onDownArrow,this,this.disposables),o.filter(e=>11===e.keyCode).on(this.onPageUpArrow,this,this.disposables),o.filter(e=>12===e.keyCode).on(this.onPageDownArrow,this,this.disposables),o.filter(e=>9===e.keyCode).on(this.onEscape,this,this.disposables),n&&o.filter(e=>(H?e.metaKey:e.ctrlKey)&&31===e.keyCode).on(this.onCtrlA,this,this.disposables)}onEnter(e){e.preventDefault(),e.stopPropagation(),this.list.setSelection(this.list.getFocus(),e.browserEvent)}onUpArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusPrevious(1,!1,e.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onDownArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusNext(1,!1,e.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onPageUpArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusPreviousPage(e.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onPageDownArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusNextPage(e.browserEvent),this.list.reveal(this.list.getFocus()[0]),this.view.domNode.focus()}onCtrlA(e){e.preventDefault(),e.stopPropagation(),this.list.setSelection(la(this.list.length),e.browserEvent),this.view.domNode.focus()}onEscape(e){this.list.getSelection().length&&(e.preventDefault(),e.stopPropagation(),this.list.setSelection([],e.browserEvent),this.view.domNode.focus())}dispose(){this.disposables.dispose()}}!function(e){e[e.Idle=0]="Idle",e[e.Typing=1]="Typing"}(Ax||(Ax={}));const zx=new class{mightProducePrintableCharacter(e){return!(e.ctrlKey||e.metaKey||e.altKey)&&(e.keyCode>=31&&e.keyCode<=56||e.keyCode>=21&&e.keyCode<=30||e.keyCode>=93&&e.keyCode<=102||e.keyCode>=80&&e.keyCode<=90)}};class Hx{constructor(e,t,i,n){this.list=e,this.view=t,this.keyboardNavigationLabelProvider=i,this.delegate=n,this.enabled=!1,this.state=Ax.Idle,this.automaticKeyboardNavigation=!0,this.triggered=!1,this.previouslyFocused=-1,this.enabledDisposables=new v,this.disposables=new v,this.updateOptions(e.options)}updateOptions(e){void 0===e.enableKeyboardNavigation||e.enableKeyboardNavigation?this.enable():this.disable(),void 0!==e.automaticKeyboardNavigation&&(this.automaticKeyboardNavigation=e.automaticKeyboardNavigation)}enable(){if(this.enabled)return;const e=ie.chain(Ed(this.view.domNode,"keydown")).filter(e=>!Bx(e.target)).filter(()=>this.automaticKeyboardNavigation||this.triggered).map(e=>new Rd(e)).filter(e=>this.delegate.mightProducePrintableCharacter(e)).forEach(e=>{e.stopPropagation(),e.preventDefault()}).map(e=>e.browserEvent.key).event,t=ie.debounce(e,()=>null,800);ie.reduce(ie.any(e,t),(e,t)=>null===t?null:(e||"")+t)(this.onInput,this,this.enabledDisposables),t(this.onClear,this,this.enabledDisposables),this.enabled=!0,this.triggered=!1}disable(){this.enabled&&(this.enabledDisposables.clear(),this.enabled=!1,this.triggered=!1)}onClear(){var e;const t=this.list.getFocus();if(t.length>0&&t[0]===this.previouslyFocused){const i=null===(e=this.list.options.accessibilityProvider)||void 0===e?void 0:e.getAriaLabel(this.list.element(t[0]));i&&MS(i)}this.previouslyFocused=-1}onInput(e){if(!e)return this.state=Ax.Idle,void(this.triggered=!1);const t=this.list.getFocus(),i=t.length>0?t[0]:0,n=this.state===Ax.Idle?1:0;this.state=Ax.Typing;for(let t=0;t!Bx(e.target)).map(e=>new Rd(e)).filter(e=>!(2!==e.keyCode||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey)).on(this.onTab,this,this.disposables)}onTab(e){if(e.target!==this.view.domNode)return;const t=this.list.getFocus();if(0===t.length)return;const i=this.view.domElement(t[0]);if(!i)return;const n=i.querySelector("[tabIndex]");if(!(n&&n instanceof HTMLElement&&-1!==n.tabIndex))return;const o=window.getComputedStyle(n);"hidden"!==o.visibility&&"none"!==o.display&&(e.preventDefault(),e.stopPropagation(),n.focus())}dispose(){this.disposables.dispose()}}function Kx(e){return H?e.browserEvent.metaKey:e.browserEvent.ctrlKey}function $x(e){return e.browserEvent.shiftKey}const jx={isSelectionSingleChangeEvent:Kx,isSelectionRangeChangeEvent:$x};class qx{constructor(e){this.list=e,this.disposables=new v,this._onPointer=new oe,this.onPointer=this._onPointer.event,this.multipleSelectionSupport=!(!1===e.options.multipleSelectionSupport),this.multipleSelectionSupport&&(this.multipleSelectionController=e.options.multipleSelectionController||jx),this.mouseSupport=void 0===e.options.mouseSupport||!!e.options.mouseSupport,this.mouseSupport&&(e.onMouseDown(this.onMouseDown,this,this.disposables),e.onContextMenu(this.onContextMenu,this,this.disposables),e.onMouseDblClick(this.onDoubleClick,this,this.disposables),e.onTouchStart(this.onMouseDown,this,this.disposables),this.disposables.add(Fg.addTarget(e.getHTMLElement()))),ie.any(e.onMouseClick,e.onMouseMiddleClick,e.onTap)(this.onViewPointer,this,this.disposables)}isSelectionSingleChangeEvent(e){return this.multipleSelectionController?this.multipleSelectionController.isSelectionSingleChangeEvent(e):H?e.browserEvent.metaKey:e.browserEvent.ctrlKey}isSelectionRangeChangeEvent(e){return this.multipleSelectionController?this.multipleSelectionController.isSelectionRangeChangeEvent(e):e.browserEvent.shiftKey}isSelectionChangeEvent(e){return this.isSelectionSingleChangeEvent(e)||this.isSelectionRangeChangeEvent(e)}onMouseDown(e){Wx(e.browserEvent.target)||document.activeElement!==e.browserEvent.target&&this.list.domFocus()}onContextMenu(e){Wx(e.browserEvent.target)||this.list.setFocus(void 0===e.index?[]:[e.index],e.browserEvent)}onViewPointer(e){if(!this.mouseSupport)return;if(Bx(e.browserEvent.target)||Wx(e.browserEvent.target))return;let t=this.list.getFocus()[0];const i=this.list.getSelection();t=void 0===t?i[0]:t;const n=e.index;return void 0===n?(this.list.setFocus([],e.browserEvent),void this.list.setSelection([],e.browserEvent)):this.multipleSelectionSupport&&this.isSelectionRangeChangeEvent(e)?this.changeSelection(e,t):this.multipleSelectionSupport&&this.isSelectionChangeEvent(e)?this.changeSelection(e,t):(this.list.setFocus([n],e.browserEvent),function o(e){return e instanceof MouseEvent&&2===e.button}(e.browserEvent)||this.list.setSelection([n],e.browserEvent),void this._onPointer.fire(e))}onDoubleClick(e){if(Bx(e.browserEvent.target)||Wx(e.browserEvent.target))return;if(this.multipleSelectionSupport&&this.isSelectionChangeEvent(e))return;const t=this.list.getFocus();this.list.setSelection(t,e.browserEvent)}changeSelection(e,t){const i=e.index;if(this.isSelectionRangeChangeEvent(e)&&void 0!==t){const n=la(Math.min(t,i),Math.max(t,i)+1),o=this.list.getSelection(),s=function n(e,t){const i=e.indexOf(t);if(-1===i)return[];const n=[];let o=i-1;for(;o>=0&&e[o]===t-(i-o);)n.push(e[o--]);for(n.reverse(),o=i;o=e.length)i.push(t[o++]);else if(o>=t.length)i.push(e[n++]);else{if(e[n]===t[o]){n++,o++;continue}e[n]e!==i);this.list.setFocus([i]),this.list.setSelection(t.length===n.length?[...n,i]:n,e.browserEvent)}}dispose(){this.disposables.dispose()}}class Gx{constructor(e,t){this.styleElement=e,this.selectorSuffix=t}style(e){const t=this.selectorSuffix&&`.${this.selectorSuffix}`,i=[];e.listBackground&&(e.listBackground.isOpaque()?i.push(`.monaco-list${t} .monaco-list-rows { background: ${e.listBackground}; }`):H||console.warn(`List with id '${this.selectorSuffix}' was styled with a non-opaque background color. This will break sub-pixel antialiasing.`)),e.listFocusBackground&&(i.push(`.monaco-list${t}:focus .monaco-list-row.focused { background-color: ${e.listFocusBackground}; }`),i.push(`.monaco-list${t}:focus .monaco-list-row.focused:hover { background-color: ${e.listFocusBackground}; }`)),e.listFocusForeground&&i.push(`.monaco-list${t}:focus .monaco-list-row.focused { color: ${e.listFocusForeground}; }`),e.listActiveSelectionBackground&&(i.push(`.monaco-list${t}:focus .monaco-list-row.selected { background-color: ${e.listActiveSelectionBackground}; }`),i.push(`.monaco-list${t}:focus .monaco-list-row.selected:hover { background-color: ${e.listActiveSelectionBackground}; }`)),e.listActiveSelectionForeground&&i.push(`.monaco-list${t}:focus .monaco-list-row.selected { color: ${e.listActiveSelectionForeground}; }`),e.listFocusAndSelectionBackground&&i.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${t}:focus .monaco-list-row.selected.focused { background-color: ${e.listFocusAndSelectionBackground}; }\n\t\t\t`),e.listFocusAndSelectionForeground&&i.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${t}:focus .monaco-list-row.selected.focused { color: ${e.listFocusAndSelectionForeground}; }\n\t\t\t`),e.listInactiveFocusForeground&&(i.push(`.monaco-list${t} .monaco-list-row.focused { color: ${e.listInactiveFocusForeground}; }`),i.push(`.monaco-list${t} .monaco-list-row.focused:hover { color: ${e.listInactiveFocusForeground}; }`)),e.listInactiveFocusBackground&&(i.push(`.monaco-list${t} .monaco-list-row.focused { background-color: ${e.listInactiveFocusBackground}; }`),i.push(`.monaco-list${t} .monaco-list-row.focused:hover { background-color: ${e.listInactiveFocusBackground}; }`)),e.listInactiveSelectionBackground&&(i.push(`.monaco-list${t} .monaco-list-row.selected { background-color: ${e.listInactiveSelectionBackground}; }`),i.push(`.monaco-list${t} .monaco-list-row.selected:hover { background-color: ${e.listInactiveSelectionBackground}; }`)),e.listInactiveSelectionForeground&&i.push(`.monaco-list${t} .monaco-list-row.selected { color: ${e.listInactiveSelectionForeground}; }`),e.listHoverBackground&&i.push(`.monaco-list${t}:not(.drop-target) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${e.listHoverBackground}; }`),e.listHoverForeground&&i.push(`.monaco-list${t} .monaco-list-row:hover:not(.selected):not(.focused) { color: ${e.listHoverForeground}; }`),e.listSelectionOutline&&i.push(`.monaco-list${t} .monaco-list-row.selected { outline: 1px dotted ${e.listSelectionOutline}; outline-offset: -1px; }`),e.listFocusOutline&&i.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${t}:focus .monaco-list-row.focused { outline: 1px solid ${e.listFocusOutline}; outline-offset: -1px; }\n\t\t\t`),e.listInactiveFocusOutline&&i.push(`.monaco-list${t} .monaco-list-row.focused { outline: 1px dotted ${e.listInactiveFocusOutline}; outline-offset: -1px; }`),e.listHoverOutline&&i.push(`.monaco-list${t} .monaco-list-row:hover { outline: 1px dashed ${e.listHoverOutline}; outline-offset: -1px; }`),e.listDropBackground&&i.push(`\n\t\t\t\t.monaco-list${t}.drop-target,\n\t\t\t\t.monaco-list${t} .monaco-list-rows.drop-target,\n\t\t\t\t.monaco-list${t} .monaco-list-row.drop-target { background-color: ${e.listDropBackground} !important; color: inherit !important; }\n\t\t\t`),e.listFilterWidgetBackground&&i.push(`.monaco-list-type-filter { background-color: ${e.listFilterWidgetBackground} }`),e.listFilterWidgetOutline&&i.push(`.monaco-list-type-filter { border: 1px solid ${e.listFilterWidgetOutline}; }`),e.listFilterWidgetNoMatchesOutline&&i.push(`.monaco-list-type-filter.no-matches { border: 1px solid ${e.listFilterWidgetNoMatchesOutline}; }`),e.listMatchesShadow&&i.push(`.monaco-list-type-filter { box-shadow: 1px 1px 1px ${e.listMatchesShadow}; }`),e.tableColumnsBorder&&i.push(`\n\t\t\t\t.monaco-table:hover > .monaco-split-view2,\n\t\t\t\t.monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: ${e.tableColumnsBorder};\n\t\t\t}`),this.styleElement.textContent=i.join("\n")}}const Yx={listFocusBackground:uc.fromHex("#7FB0D0"),listActiveSelectionBackground:uc.fromHex("#0E639C"),listActiveSelectionForeground:uc.fromHex("#FFFFFF"),listFocusAndSelectionBackground:uc.fromHex("#094771"),listFocusAndSelectionForeground:uc.fromHex("#FFFFFF"),listInactiveSelectionBackground:uc.fromHex("#3F3F46"),listHoverBackground:uc.fromHex("#2A2D2E"),listDropBackground:uc.fromHex("#383B3D"),treeIndentGuidesStroke:uc.fromHex("#a9a9a9"),tableColumnsBorder:uc.fromHex("#cccccc").transparent(.2)},Zx={keyboardSupport:!0,mouseSupport:!0,multipleSelectionSupport:!0,dnd:{getDragURI:()=>null,onDragStart(){},onDragOver:()=>!1,drop(){}}};function Xx(e,t){const i=[];let n=0,o=0;for(;n=e.length)i.push(t[o++]);else if(o>=t.length)i.push(e[n++]);else{if(e[n]===t[o]){i.push(e[n]),n++,o++;continue}i.push(e[n]e-t;class Jx{constructor(e,t){this._templateId=e,this.renderers=t}get templateId(){return this._templateId}renderTemplate(e){return this.renderers.map(t=>t.renderTemplate(e))}renderElement(e,t,i,n){let o=0;for(const s of this.renderers)s.renderElement(e,t,i[o++],n)}disposeElement(e,t,i,n){let o=0;for(const s of this.renderers)s.disposeElement&&s.disposeElement(e,t,i[o],n),o+=1}disposeTemplate(e){let t=0;for(const i of this.renderers)i.disposeTemplate(e[t++])}}class ek{constructor(e){this.accessibilityProvider=e,this.templateId="a18n"}renderTemplate(e){return e}renderElement(e,t,i){const n=this.accessibilityProvider.getAriaLabel(e);n?i.setAttribute("aria-label",n):i.removeAttribute("aria-label");const o=this.accessibilityProvider.getAriaLevel&&this.accessibilityProvider.getAriaLevel(e);"number"==typeof o?i.setAttribute("aria-level",`${o}`):i.removeAttribute("aria-level")}disposeTemplate(e){}}class tk{constructor(e,t){this.list=e,this.dnd=t}getDragElements(e){const t=this.list.getSelectedElements();return t.indexOf(e)>-1?t:[e]}getDragURI(e){return this.dnd.getDragURI(e)}getDragLabel(e,t){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(e,t)}onDragStart(e,t){this.dnd.onDragStart&&this.dnd.onDragStart(e,t)}onDragOver(e,t,i,n){return this.dnd.onDragOver(e,t,i,n)}onDragEnd(e){this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}drop(e,t,i,n){this.dnd.drop(e,t,i,n)}}class ik{constructor(e,t,i,n,o=Zx){var s;this.user=e,this._options=o,this.eventBufferer=new re,this._ariaLabel="",this.disposables=new v,this._onDidDispose=new oe,this.onDidDispose=this._onDidDispose.event;const r=this._options.accessibilityProvider&&this._options.accessibilityProvider.getWidgetRole?null===(s=this._options.accessibilityProvider)||void 0===s?void 0:s.getWidgetRole():"list";this.selection=new Px("listbox"!==r),this.focus=new Rx("focused"),Qu(o,Yx,!1);const a=[this.focus.renderer,this.selection.renderer];this.accessibilityProvider=o.accessibilityProvider,this.accessibilityProvider&&(a.push(new ek(this.accessibilityProvider)),this.accessibilityProvider.onDidChangeActiveDescendant&&this.accessibilityProvider.onDidChangeActiveDescendant(this.onDidChangeActiveDescendant,this,this.disposables)),n=n.map(e=>new Jx(e.templateId,[...a,e]));const l=Object.assign(Object.assign({},o),{dnd:o.dnd&&new tk(this,o.dnd)});if(this.view=new Ix(t,i,n,l),this.view.domNode.setAttribute("role",r),o.styleController)this.styleController=o.styleController(this.view.domId);else{const e=Su(this.view.domNode);this.styleController=new Gx(e,this.view.domId)}if(this.spliceable=new Tx([new Fx(this.focus,this.view,o.identityProvider),new Fx(this.selection,this.view,o.identityProvider),this.view]),this.disposables.add(this.focus),this.disposables.add(this.selection),this.disposables.add(this.view),this.disposables.add(this._onDidDispose),this.onDidFocus=ie.map(Ed(this.view.domNode,"focus",!0),()=>null),this.onDidBlur=ie.map(Ed(this.view.domNode,"blur",!0),()=>null),this.disposables.add(new Ux(this,this.view)),"boolean"!=typeof o.keyboardSupport||o.keyboardSupport){const e=new Vx(this,this.view,o);this.disposables.add(e)}o.keyboardNavigationLabelProvider&&(this.typeLabelController=new Hx(this,this.view,o.keyboardNavigationLabelProvider,o.keyboardNavigationDelegate||zx),this.disposables.add(this.typeLabelController)),this.mouseController=this.createMouseController(o),this.disposables.add(this.mouseController),this.onDidChangeFocus(this._onFocusChange,this,this.disposables),this.onDidChangeSelection(this._onSelectionChange,this,this.disposables),this.accessibilityProvider&&(this.ariaLabel=this.accessibilityProvider.getWidgetAriaLabel()),o.multipleSelectionSupport&&this.view.domNode.setAttribute("aria-multiselectable","true")}get onDidChangeFocus(){return ie.map(this.eventBufferer.wrapEvent(this.focus.onChange),e=>this.toListEvent(e))}get onDidChangeSelection(){return ie.map(this.eventBufferer.wrapEvent(this.selection.onChange),e=>this.toListEvent(e))}get domId(){return this.view.domId}get onMouseClick(){return this.view.onMouseClick}get onMouseDblClick(){return this.view.onMouseDblClick}get onMouseMiddleClick(){return this.view.onMouseMiddleClick}get onPointer(){return this.mouseController.onPointer}get onMouseDown(){return this.view.onMouseDown}get onTouchStart(){return this.view.onTouchStart}get onTap(){return this.view.onTap}get onContextMenu(){let e=!1;const t=ie.chain(Ed(this.view.domNode,"keydown")).map(e=>new Rd(e)).filter(t=>e=58===t.keyCode||t.shiftKey&&68===t.keyCode).map(xd).filter(()=>!1).event,i=ie.chain(Ed(this.view.domNode,"keyup")).forEach(()=>e=!1).map(e=>new Rd(e)).filter(e=>58===e.keyCode||e.shiftKey&&68===e.keyCode).map(xd).map(({browserEvent:e})=>{const t=this.getFocus(),i=t.length?t[0]:void 0;return{index:i,element:void 0!==i?this.view.element(i):void 0,anchor:void 0!==i?this.view.domElement(i):this.view.domNode,browserEvent:e}}).event,n=ie.chain(this.view.onContextMenu).filter(t=>!e).map(({element:e,index:t,browserEvent:i})=>({element:e,index:t,anchor:{x:i.clientX+1,y:i.clientY},browserEvent:i})).event;return ie.any(t,i,n)}get onKeyDown(){return Ed(this.view.domNode,"keydown")}createMouseController(e){return new qx(this)}updateOptions(e={}){this._options=Object.assign(Object.assign({},this._options),e),this.typeLabelController&&this.typeLabelController.updateOptions(this._options),this.view.updateOptions(e)}get options(){return this._options}splice(e,t,i=[]){if(e<0||e>this.view.length)throw new vx(this.user,`Invalid start index: ${e}`);if(t<0)throw new vx(this.user,`Invalid delete count: ${t}`);0===t&&0===i.length||this.eventBufferer.bufferEvents(()=>this.spliceable.splice(e,t,i))}rerender(){this.view.rerender()}element(e){return this.view.element(e)}get length(){return this.view.length}get contentHeight(){return this.view.contentHeight}get scrollTop(){return this.view.getScrollTop()}set scrollTop(e){this.view.setScrollTop(e)}get ariaLabel(){return this._ariaLabel}set ariaLabel(e){this._ariaLabel=e,this.view.domNode.setAttribute("aria-label",e)}domFocus(){this.view.domNode.focus({preventScroll:!0})}layout(e,t){this.view.layout(e,t)}setSelection(e,t){for(const t of e)if(t<0||t>=this.length)throw new vx(this.user,`Invalid index ${t}`);this.selection.set(e,t)}getSelection(){return this.selection.get()}getSelectedElements(){return this.getSelection().map(e=>this.view.element(e))}setFocus(e,t){for(const t of e)if(t<0||t>=this.length)throw new vx(this.user,`Invalid index ${t}`);this.focus.set(e,t)}focusNext(e=1,t=!1,i,n){if(0===this.length)return;const o=this.focus.get(),s=this.findNextIndex(o.length>0?o[0]+e:0,t,n);s>-1&&this.setFocus([s],i)}focusPrevious(e=1,t=!1,i,n){if(0===this.length)return;const o=this.focus.get(),s=this.findPreviousIndex(o.length>0?o[0]-e:0,t,n);s>-1&&this.setFocus([s],i)}focusNextPage(e,t){let i=this.view.indexAt(this.view.getScrollTop()+this.view.renderHeight);const n=this.view.element(i=0===i?0:i-1),o=this.getFocusedElements()[0];if(o!==n){const n=this.findPreviousIndex(i,!1,t);n>-1&&o!==this.view.element(n)?this.setFocus([n],e):this.setFocus([i],e)}else{const n=this.view.getScrollTop();this.view.setScrollTop(n+this.view.renderHeight-this.view.elementHeight(i)),this.view.getScrollTop()!==n&&(this.setFocus([]),setTimeout(()=>this.focusNextPage(e,t),0))}}focusPreviousPage(e,t){let i;const n=this.view.getScrollTop();i=0===n?this.view.indexAt(n):this.view.indexAfter(n-1);const o=this.view.element(i),s=this.getFocusedElements()[0];if(s!==o){const n=this.findNextIndex(i,!1,t);n>-1&&s!==this.view.element(n)?this.setFocus([n],e):this.setFocus([i],e)}else{const i=n;this.view.setScrollTop(n-this.view.renderHeight),this.view.getScrollTop()!==i&&(this.setFocus([]),setTimeout(()=>this.focusPreviousPage(e,t),0))}}focusLast(e,t){if(0===this.length)return;const i=this.findPreviousIndex(this.length-1,!1,t);i>-1&&this.setFocus([i],e)}focusFirst(e,t){this.focusNth(0,e,t)}focusNth(e,t,i){if(0===this.length)return;const n=this.findNextIndex(e,!1,i);n>-1&&this.setFocus([n],t)}findNextIndex(e,t=!1,i){for(let n=0;n=this.length&&!t)return-1;if(e%=this.length,!i||i(this.element(e)))return e;e++}return-1}findPreviousIndex(e,t=!1,i){for(let n=0;nthis.view.element(e))}reveal(e,t){if(e<0||e>=this.length)throw new vx(this.user,`Invalid index ${e}`);const i=this.view.getScrollTop(),n=this.view.elementTop(e),o=this.view.elementHeight(e);if(De(t))this.view.setScrollTop((o-this.view.renderHeight)*Na(t,0,1)+n);else{const e=n+o,t=i+this.view.renderHeight;n=t||(n=t&&this.view.setScrollTop(e-this.view.renderHeight))}}getRelativeTop(e){if(e<0||e>=this.length)throw new vx(this.user,`Invalid index ${e}`);const t=this.view.getScrollTop(),i=this.view.elementTop(e),n=this.view.elementHeight(e);return it+this.view.renderHeight?null:Math.abs((t-i)/(n-this.view.renderHeight))}getHTMLElement(){return this.view.domNode}style(e){this.styleController.style(e)}toListEvent({indexes:e,browserEvent:t}){return{indexes:e,elements:e.map(e=>this.view.element(e)),browserEvent:t}}_onFocusChange(){const e=this.focus.get();this.view.domNode.classList.toggle("element-focused",e.length>0),this.onDidChangeActiveDescendant()}onDidChangeActiveDescendant(){var e;const t=this.focus.get();if(t.length>0){let i;(null===(e=this.accessibilityProvider)||void 0===e?void 0:e.getActiveDescendantId)&&(i=this.accessibilityProvider.getActiveDescendantId(this.view.element(t[0]))),this.view.domNode.setAttribute("aria-activedescendant",i||this.view.getElementDomId(t[0]))}else this.view.domNode.removeAttribute("aria-activedescendant")}_onSelectionChange(){const e=this.selection.get();this.view.domNode.classList.toggle("selection-none",0===e.length),this.view.domNode.classList.toggle("selection-single",1===e.length),this.view.domNode.classList.toggle("selection-multiple",e.length>1)}dispose(){this._onDidDispose.fire(),this.disposables.dispose(),this._onDidDispose.dispose()}}Mx([Rg],ik.prototype,"onDidChangeFocus",null),Mx([Rg],ik.prototype,"onDidChangeSelection",null),Mx([Rg],ik.prototype,"onContextMenu",null);class nk{constructor(e,t){this.renderer=e,this.modelProvider=t}get templateId(){return this.renderer.templateId}renderTemplate(e){return{data:this.renderer.renderTemplate(e),disposable:C.None}}renderElement(e,t,i,n){if(i.disposable&&i.disposable.dispose(),!i.data)return;const o=this.modelProvider();if(o.isResolved(e))return this.renderer.renderElement(o.get(e),e,i.data,n);const s=new Oa,r=o.resolve(e,s.token);i.disposable={dispose:()=>s.cancel()},this.renderer.renderPlaceholder(e,i.data),r.then(t=>this.renderer.renderElement(t,e,i.data,n))}disposeTemplate(e){e.disposable&&(e.disposable.dispose(),e.disposable=void 0),e.data&&(this.renderer.disposeTemplate(e.data),e.data=void 0)}}class ok{constructor(e,t){this.modelProvider=e,this.accessibilityProvider=t}getWidgetAriaLabel(){return this.accessibilityProvider.getWidgetAriaLabel()}getAriaLabel(e){const t=this.modelProvider();return t.isResolved(e)?this.accessibilityProvider.getAriaLabel(t.get(e)):null}}const sk=new Ji("isWindows",z,t(0,"Whether the operating system is Windows"));var rk;!function(e){e[e.Unknown=0]="Unknown",e[e.Twistie=1]="Twistie",e[e.Element=2]="Element"}(rk||(rk={}));class ak extends Error{constructor(e,t){super(`TreeError [${e}] ${t}`)}}class lk{constructor(e){this.fn=e,this._map=new WeakMap}map(e){let t=this._map.get(e);return t||(t=this.fn(e),this._map.set(e,t)),t}}class hk{constructor(e,t,i,n){this.originalStart=e,this.originalLength=t,this.modifiedStart=i,this.modifiedLength=n}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}class ck{constructor(e){this.source=e}getElements(){const e=this.source,t=new Int32Array(e.length);for(let i=0,n=e.length;i0||this.m_modifiedCount>0)&&this.m_changes.push(new hk(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_originalCount++}AddModifiedElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class mk{constructor(e,t,i=null){this.ContinueProcessingPredicate=i;const[n,o,s]=mk._getElements(e),[r,a,l]=mk._getElements(t);this._hasStrings=s&&l,this._originalStringElements=n,this._originalElementsOrHash=o,this._modifiedStringElements=r,this._modifiedElementsOrHash=a,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(e){return e.length>0&&"string"==typeof e[0]}static _getElements(e){const t=e.getElements();if(mk._isStringArray(t)){const e=new Int32Array(t.length);for(let i=0,n=t.length;i=e&&n>=i&&this.ElementsAreEqual(t,n);)t--,n--;if(e>t||i>n){let o;return i<=n?(uk.Assert(e===t+1,"originalStart should only be one more than originalEnd"),o=[new hk(e,0,i,n-i+1)]):e<=t?(uk.Assert(i===n+1,"modifiedStart should only be one more than modifiedEnd"),o=[new hk(e,t-e+1,i,0)]):(uk.Assert(e===t+1,"originalStart should only be one more than originalEnd"),uk.Assert(i===n+1,"modifiedStart should only be one more than modifiedEnd"),o=[]),o}const s=[0],r=[0],a=this.ComputeRecursionPoint(e,t,i,n,s,r,o),l=s[0],h=r[0];if(null!==a)return a;if(!o[0]){const s=this.ComputeDiffRecursive(e,l,i,h,o);let r=[];return r=o[0]?[new hk(l+1,t-(l+1)+1,h+1,n-(h+1)+1)]:this.ComputeDiffRecursive(l+1,t,h+1,n,o),this.ConcatenateChanges(s,r)}return[new hk(e,t-e+1,i,n-i+1)]}WALKTRACE(e,t,i,n,o,s,r,a,l,h,c,d,u,g,p,m,f,_){let b=null,v=null,C=new pk,w=t,y=i,S=u[0]-m[0]-n,L=-1073741824,D=this.m_forwardHistory.length-1;do{const t=S+e;t===w||t=0&&(e=(l=this.m_forwardHistory[D])[0],w=1,y=l.length-1)}while(--D>=-1);if(b=C.getReverseChanges(),_[0]){let e=u[0]+1,t=m[0]+1;if(null!==b&&b.length>0){const i=b[b.length-1];e=Math.max(e,i.getOriginalEnd()),t=Math.max(t,i.getModifiedEnd())}v=[new hk(e,d-e+1,t,p-t+1)]}else{C=new pk,w=s,y=r,S=u[0]-m[0]-a,L=1073741824,D=f?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const e=S+o;e===w||e=h[e+1]?(g=(c=h[e+1]-1)-S-a,c>L&&C.MarkNextChange(),L=c+1,C.AddOriginalElement(c+1,g+1),S=e+1-o):(g=(c=h[e-1])-S-a,c>L&&C.MarkNextChange(),L=c,C.AddModifiedElement(c+1,g+1),S=e-1-o),D>=0&&(o=(h=this.m_reverseHistory[D])[0],w=1,y=h.length-1)}while(--D>=-1);v=C.getChanges()}return this.ConcatenateChanges(b,v)}ComputeRecursionPoint(e,t,i,n,o,s,r){let a=0,l=0,h=0,c=0,d=0,u=0;e--,i--,o[0]=0,s[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const g=t-e+(n-i),p=g+1,m=new Int32Array(p),f=new Int32Array(p),_=n-i,b=t-e,v=e-i,C=t-n,w=(b-_)%2==0;m[_]=e,f[b]=t,r[0]=!1;for(let y=1;y<=g/2+1;y++){let g=0,S=0;h=this.ClipDiagonalBound(_-y,y,_,p),c=this.ClipDiagonalBound(_+y,y,_,p);for(let e=h;e<=c;e+=2){l=(a=e===h||eg+S&&(g=a,S=l),!w&&Math.abs(e-b)<=y-1&&a>=f[e])return o[0]=a,s[0]=l,i<=f[e]&&y<=1448?this.WALKTRACE(_,h,c,v,b,d,u,C,m,f,a,t,o,l,n,s,w,r):null}const L=(g-e+(S-i)-y)/2;if(null!==this.ContinueProcessingPredicate&&!this.ContinueProcessingPredicate(g,L))return r[0]=!0,o[0]=g,s[0]=S,L>0&&y<=1448?this.WALKTRACE(_,h,c,v,b,d,u,C,m,f,a,t,o,l,n,s,w,r):[new hk(++e,t-e+1,++i,n-i+1)];d=this.ClipDiagonalBound(b-y,y,b,p),u=this.ClipDiagonalBound(b+y,y,b,p);for(let g=d;g<=u;g+=2){l=(a=g===d||g=f[g+1]?f[g+1]-1:f[g-1])-(g-b)-C;const p=a;for(;a>e&&l>i&&this.ElementsAreEqual(a,l);)a--,l--;if(f[g]=a,w&&Math.abs(g-_)<=y&&a<=m[g])return o[0]=a,s[0]=l,p>=m[g]&&y<=1448?this.WALKTRACE(_,h,c,v,b,d,u,C,m,f,a,t,o,l,n,s,w,r):null}if(y<=1447){let e=new Int32Array(c-h+2);e[0]=_-h+1,gk.Copy2(m,h,e,1,c-h+1),this.m_forwardHistory.push(e),(e=new Int32Array(u-d+2))[0]=b-d+1,gk.Copy2(f,d,e,1,u-d+1),this.m_reverseHistory.push(e)}}return this.WALKTRACE(_,h,c,v,b,d,u,C,m,f,a,t,o,l,n,s,w,r)}PrettifyChanges(e){for(let t=0;t0,r=i.modifiedLength>0;for(;i.originalStart+i.originalLength=0;t--){const i=e[t];let n=0,o=0;if(t>0){const i=e[t-1];i.originalLength>0&&(n=i.originalStart+i.originalLength),i.modifiedLength>0&&(o=i.modifiedStart+i.modifiedLength)}const s=i.originalLength>0,r=i.modifiedLength>0;let a=0,l=this._boundaryScore(i.originalStart,i.originalLength,i.modifiedStart,i.modifiedLength);for(let e=1;;e++){const t=i.originalStart-e,h=i.modifiedStart-e;if(tl&&(l=c,a=e)}i.originalStart-=a,i.modifiedStart-=a}if(this._hasStrings)for(let t=1,i=e.length;t0&&i>a&&(a=i,l=t,h=e)}return a>0?[l,h]:null}_contiguousSequenceScore(e,t,i){let n=0;for(let o=0;o=this._originalElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._originalStringElements[e])}_OriginalRegionIsBoundary(e,t){if(this._OriginalIsBoundary(e)||this._OriginalIsBoundary(e-1))return!0;if(t>0){const i=e+t;if(this._OriginalIsBoundary(i-1)||this._OriginalIsBoundary(i))return!0}return!1}_ModifiedIsBoundary(e){return e<=0||e>=this._modifiedElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._modifiedStringElements[e])}_ModifiedRegionIsBoundary(e,t){if(this._ModifiedIsBoundary(e)||this._ModifiedIsBoundary(e-1))return!0;if(t>0){const i=e+t;if(this._ModifiedIsBoundary(i-1)||this._ModifiedIsBoundary(i))return!0}return!1}_boundaryScore(e,t,i,n){return(this._OriginalRegionIsBoundary(e,t)?1:0)+(this._ModifiedRegionIsBoundary(i,n)?1:0)}ConcatenateChanges(e,t){let i=[];if(0===e.length||0===t.length)return t.length>0?t:e;if(this.ChangesOverlap(e[e.length-1],t[0],i)){const n=new Array(e.length+t.length-1);return gk.Copy(e,0,n,0,e.length-1),n[e.length-1]=i[0],gk.Copy(t,1,n,e.length,t.length-1),n}{const i=new Array(e.length+t.length);return gk.Copy(e,0,i,0,e.length),gk.Copy(t,0,i,e.length,t.length),i}}ChangesOverlap(e,t,i){if(uk.Assert(e.originalStart<=t.originalStart,"Left change is not less than or equal to right change"),uk.Assert(e.modifiedStart<=t.modifiedStart,"Left change is not less than or equal to right change"),e.originalStart+e.originalLength>=t.originalStart||e.modifiedStart+e.modifiedLength>=t.modifiedStart){let n=e.originalLength,o=e.modifiedLength;return e.originalStart+e.originalLength>=t.originalStart&&(n=t.originalStart+t.originalLength-e.originalStart),e.modifiedStart+e.modifiedLength>=t.modifiedStart&&(o=t.modifiedStart+t.modifiedLength-e.modifiedStart),i[0]=new hk(e.originalStart,n,e.modifiedStart,o),!0}return i[0]=null,!1}ClipDiagonalBound(e,t,i,n){if(e>=0&&ea.children.map(t=>e.getId(t.element).toString())},{getElements:()=>[...a.children.slice(0,h),...l,...a.children.slice(h+i)].map(t=>e.getId(t.element).toString())}).ComputeDiff(!1);if(d.quitEarly)return this.spliceSimple(t,i,l,o);const u=t.slice(0,-1),g=(t,i,n)=>{if(s>0)for(let r=0;rt.originalStart-e.originalStart))g(p,m,p-(e.originalStart+e.originalLength)),p=e.originalStart,m=e.modifiedStart-h,this.spliceSimple([...u,p],e.originalLength,c.slice(l,m,m+e.modifiedLength),o);g(p,m,p)}spliceSimple(e,t,i=c.empty(),{onDidCreateNode:n,onDidDeleteNode:o}){const{parentNode:s,listIndex:r,revealed:a,visible:l}=this.getParentNodeWithListIndex(e),h=[],d=c.map(i,e=>this.createTreeNode(e,s,s.visible?1:0,a,h,n)),u=e[e.length-1],g=s.children.length>0;let p=0;for(let e=u;e>=0&&ee+(t.visible?t.renderNodeCount:0),0);this._updateAncestorsRenderNodeCount(s,_-e),this.list.splice(r,e,h)}if(b.length>0&&o){const e=t=>{o(t),t.children.forEach(e)};b.forEach(e)}const C=s.children.length>0;g!==C&&this.setCollapsible(e.slice(0,-1),C),this._onDidSplice.fire({insertedNodes:m,deletedNodes:b});let w=s;for(;w;){if(2===w.visibility){this.refilter();break}w=w.parent}}rerender(e){if(0===e.length)throw new ak(this.user,"Invalid tree location");const{node:t,listIndex:i,revealed:n}=this.getTreeNodeWithListIndex(e);t.visible&&n&&this.list.splice(i,1,[t])}has(e){return this.hasTreeNode(e)}getListIndex(e){const{listIndex:t,visible:i,revealed:n}=this.getTreeNodeWithListIndex(e);return i&&n?t:-1}getListRenderCount(e){return this.getTreeNode(e).renderNodeCount}isCollapsible(e){return this.getTreeNode(e).collapsible}setCollapsible(e,t){const i=this.getTreeNode(e);void 0===t&&(t=!i.collapsible);const n={collapsible:t};return this.eventBufferer.bufferEvents(()=>this._setCollapseState(e,n))}isCollapsed(e){return this.getTreeNode(e).collapsed}setCollapsed(e,t,i){const n=this.getTreeNode(e);void 0===t&&(t=!n.collapsed);const o={collapsed:t,recursive:i||!1};return this.eventBufferer.bufferEvents(()=>this._setCollapseState(e,o))}_setCollapseState(e,t){const{node:i,listIndex:n,revealed:o}=this.getTreeNodeWithListIndex(e),s=this._setListNodeCollapseState(i,n,o,t);if(i!==this.root&&this.autoExpandSingleChildren&&s&&!bk(t)&&i.collapsible&&!i.collapsed&&!t.recursive){let n=-1;for(let e=0;e-1){n=-1;break}n=e}n>-1&&this._setCollapseState([...e,n],t)}return s}_setListNodeCollapseState(e,t,i,n){const o=this._setNodeCollapseState(e,n,!1);if(!i||!e.visible||!o)return o;const s=e.renderNodeCount,r=this.updateNodeAfterCollapseChange(e);return this.list.splice(t+1,s-(-1===t?0:1),r.slice(1)),o}_setNodeCollapseState(e,t,i){let n;if(e===this.root?n=!1:(bk(t)?(n=e.collapsible!==t.collapsible,e.collapsible=t.collapsible):e.collapsible?(n=e.collapsed!==t.collapsed,e.collapsed=t.collapsed):n=!1,n&&this._onDidChangeCollapseState.fire({node:e,deep:i})),!bk(t)&&t.recursive)for(const i of e.children)n=this._setNodeCollapseState(i,t,!0)||n;return n}expandTo(e){this.eventBufferer.bufferEvents(()=>{let t=this.getTreeNode(e);for(;t.parent;)t=t.parent,e=e.slice(0,e.length-1),t.collapsed&&this._setCollapseState(e,{collapsed:!1,recursive:!1})})}refilter(){const e=this.root.renderNodeCount,t=this.updateNodeAfterFilterChange(this.root);this.list.splice(0,e,t)}createTreeNode(e,t,i,n,o,s){const r={parent:t,element:e.element,children:[],depth:t.depth+1,visibleChildrenCount:0,visibleChildIndex:-1,collapsible:"boolean"==typeof e.collapsible?e.collapsible:void 0!==e.collapsed,collapsed:void 0===e.collapsed?this.collapseByDefault:e.collapsed,renderNodeCount:1,visibility:1,visible:!0,filterData:void 0},a=this._filterNode(r,i);r.visibility=a,n&&o.push(r);const l=e.children||c.empty(),h=n&&0!==a&&!r.collapsed,d=c.map(l,e=>this.createTreeNode(e,r,a,h,o,s));let u=0,g=1;for(const e of d)r.children.push(e),g+=e.renderNodeCount,e.visible&&(e.visibleChildIndex=u++);return r.collapsible=r.collapsible||r.children.length>0,r.visibleChildrenCount=u,r.visible=2===a?u>0:1===a,r.visible?r.collapsed||(r.renderNodeCount=g):(r.renderNodeCount=0,n&&o.pop()),s&&s(r),r}updateNodeAfterCollapseChange(e){const t=e.renderNodeCount,i=[];return this._updateNodeAfterCollapseChange(e,i),this._updateAncestorsRenderNodeCount(e.parent,i.length-t),i}_updateNodeAfterCollapseChange(e,t){if(!1===e.visible)return 0;if(t.push(e),e.renderNodeCount=1,!e.collapsed)for(const i of e.children)e.renderNodeCount+=this._updateNodeAfterCollapseChange(i,t);return this._onDidChangeRenderNodeCount.fire(e),e.renderNodeCount}updateNodeAfterFilterChange(e){const t=e.renderNodeCount,i=[];return this._updateNodeAfterFilterChange(e,e.visible?1:0,i),this._updateAncestorsRenderNodeCount(e.parent,i.length-t),i}_updateNodeAfterFilterChange(e,t,i,n=!0){let o;if(e!==this.root){if(0===(o=this._filterNode(e,t)))return e.visible=!1,e.renderNodeCount=0,!1;n&&i.push(e)}const s=i.length;e.renderNodeCount=e===this.root?0:1;let r=!1;if(e.collapsed&&0===o)e.visibleChildrenCount=0;else{let t=0;for(const s of e.children)r=this._updateNodeAfterFilterChange(s,o,i,n&&!e.collapsed)||r,s.visible&&(s.visibleChildIndex=t++);e.visibleChildrenCount=t}return e!==this.root&&(e.visible=2===o?r:1===o),e.visible?e.collapsed||(e.renderNodeCount+=i.length-s):(e.renderNodeCount=0,n&&i.pop()),this._onDidChangeRenderNodeCount.fire(e),e.visible}_updateAncestorsRenderNodeCount(e,t){if(0!==t)for(;e;)e.renderNodeCount+=t,this._onDidChangeRenderNodeCount.fire(e),e=e.parent}_filterNode(e,t){const i=this.filter?this.filter.filter(e.element,t):1;return"boolean"==typeof i?(e.filterData=void 0,i?1:0):fk(i)?(e.filterData=i.data,_k(i.visibility)):(e.filterData=void 0,_k(i))}hasTreeNode(e,t=this.root){if(!e||0===e.length)return!0;const[i,...n]=e;return!(i<0||i>t.children.length)&&this.hasTreeNode(n,t.children[i])}getTreeNode(e,t=this.root){if(!e||0===e.length)return t;const[i,...n]=e;if(i<0||i>t.children.length)throw new ak(this.user,"Invalid tree location");return this.getTreeNode(n,t.children[i])}getTreeNodeWithListIndex(e){if(0===e.length)return{node:this.root,listIndex:-1,revealed:!0,visible:!1};const{parentNode:t,listIndex:i,revealed:n,visible:o}=this.getParentNodeWithListIndex(e),s=e[e.length-1];if(s<0||s>t.children.length)throw new ak(this.user,"Invalid tree location");const r=t.children[s];return{node:r,listIndex:i,revealed:n,visible:o&&r.visible}}getParentNodeWithListIndex(e,t=this.root,i=0,n=!0,o=!0){const[s,...r]=e;if(s<0||s>t.children.length)throw new ak(this.user,"Invalid tree location");for(let e=0;ee.element)),this.data=e}}function Ek(e){return e instanceof Ex?new Dk(e):e}class xk{constructor(e,t){this.modelProvider=e,this.dnd=t,this.autoExpandDisposable=C.None}getDragURI(e){return this.dnd.getDragURI(e.element)}getDragLabel(e,t){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(e.map(e=>e.element),t)}onDragStart(e,t){this.dnd.onDragStart&&this.dnd.onDragStart(Ek(e),t)}onDragOver(e,t,i,n,o=!0){const s=this.dnd.onDragOver(Ek(e),t&&t.element,i,n),r=this.autoExpandNode!==t;if(r&&(this.autoExpandDisposable.dispose(),this.autoExpandNode=t),void 0===t)return s;if(r&&"boolean"!=typeof s&&s.autoExpand&&(this.autoExpandDisposable=Ha(()=>{const e=this.modelProvider(),i=e.getNodeLocation(t);e.isCollapsed(i)&&e.setCollapsed(i,!1),this.autoExpandNode=void 0},500)),"boolean"==typeof s||!s.accept||void 0===s.bubble||s.feedback)return o?s:{accept:"boolean"==typeof s?s:s.accept,effect:"boolean"==typeof s?void 0:s.effect,feedback:[i]};if(1===s.bubble){const i=this.modelProvider(),o=i.getNodeLocation(t),s=i.getParentNodeLocation(o),r=i.getNode(s),a=s&&i.getListIndex(s);return this.onDragOver(e,r,a,n,!1)}const a=this.modelProvider(),l=a.getNodeLocation(t),h=a.getListIndex(l),c=a.getListRenderCount(l);return Object.assign(Object.assign({},s),{feedback:la(h,h+c)})}drop(e,t,i,n){this.autoExpandDisposable.dispose(),this.autoExpandNode=void 0,this.dnd.drop(Ek(e),t&&t.element,i,n)}onDragEnd(e){this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}}class kk{constructor(e){this.delegate=e}getHeight(e){return this.delegate.getHeight(e.element)}getTemplateId(e){return this.delegate.getTemplateId(e.element)}hasDynamicHeight(e){return!!this.delegate.hasDynamicHeight&&this.delegate.hasDynamicHeight(e.element)}setDynamicHeight(e,t){this.delegate.setDynamicHeight&&this.delegate.setDynamicHeight(e.element,t)}}var Nk;!function(e){e.None="none",e.OnHover="onHover",e.Always="always"}(Nk||(Nk={}));class Ik{constructor(e,t=[]){this._elements=t,this.onDidChange=ie.forEach(e,e=>this._elements=e)}get elements(){return this._elements}}class Tk{constructor(e,t,i,n,o={}){this.renderer=e,this.modelProvider=t,this.activeNodes=n,this.renderedElements=new Map,this.renderedNodes=new Map,this.indent=Tk.DefaultIndent,this.hideTwistiesOfChildlessElements=!1,this.shouldRenderIndentGuides=!1,this.renderedIndentGuides=new mg,this.activeIndentNodes=new Set,this.indentGuidesDisposable=C.None,this.disposables=new v,this.templateId=e.templateId,this.updateOptions(o),ie.map(i,e=>e.node)(this.onDidChangeNodeTwistieState,this,this.disposables),e.onDidChangeTwistieState&&e.onDidChangeTwistieState(this.onDidChangeTwistieState,this,this.disposables)}updateOptions(e={}){if(void 0!==e.indent&&(this.indent=Na(e.indent,0,40)),void 0!==e.renderIndentGuides){const t=e.renderIndentGuides!==Nk.None;if(t!==this.shouldRenderIndentGuides&&(this.shouldRenderIndentGuides=t,this.indentGuidesDisposable.dispose(),t)){const e=new v;this.activeNodes.onDidChange(this._onDidChangeActiveNodes,this,e),this.indentGuidesDisposable=e,this._onDidChangeActiveNodes(this.activeNodes.elements)}}void 0!==e.hideTwistiesOfChildlessElements&&(this.hideTwistiesOfChildlessElements=e.hideTwistiesOfChildlessElements)}renderTemplate(e){const t=Mu(e,Bu(".monaco-tl-row")),i=Mu(t,Bu(".monaco-tl-indent")),n=Mu(t,Bu(".monaco-tl-twistie")),o=Mu(t,Bu(".monaco-tl-contents")),s=this.renderer.renderTemplate(o);return{container:e,indent:i,twistie:n,indentGuidesDisposable:C.None,templateData:s}}renderElement(e,t,i,n){"number"==typeof n&&(this.renderedNodes.set(e,{templateData:i,height:n}),this.renderedElements.set(e.element,e));const o=Tk.DefaultIndent+(e.depth-1)*this.indent;i.twistie.style.paddingLeft=`${o}px`,i.indent.style.width=`${o+this.indent-16}px`,this.renderTwistie(e,i),"number"==typeof n&&this.renderIndentGuides(e,i),this.renderer.renderElement(e,t,i.templateData,n)}disposeElement(e,t,i,n){i.indentGuidesDisposable.dispose(),this.renderer.disposeElement&&this.renderer.disposeElement(e,t,i.templateData,n),"number"==typeof n&&(this.renderedNodes.delete(e),this.renderedElements.delete(e.element))}disposeTemplate(e){this.renderer.disposeTemplate(e.templateData)}onDidChangeTwistieState(e){const t=this.renderedElements.get(e);t&&this.onDidChangeNodeTwistieState(t)}onDidChangeNodeTwistieState(e){const t=this.renderedNodes.get(e);t&&(this.renderTwistie(e,t.templateData),this._onDidChangeActiveNodes(this.activeNodes.elements),this.renderIndentGuides(e,t.templateData))}renderTwistie(e,t){t.twistie.classList.remove(...Ck.classNamesArray);let i=!1;this.renderer.renderTwistie&&(i=this.renderer.renderTwistie(e.element,t.twistie)),e.collapsible&&(!this.hideTwistiesOfChildlessElements||e.visibleChildrenCount>0)?(i||t.twistie.classList.add(...Ck.classNamesArray),t.twistie.classList.add("collapsible"),t.twistie.classList.toggle("collapsed",e.collapsed)):t.twistie.classList.remove("collapsible","collapsed"),e.collapsible?t.container.setAttribute("aria-expanded",String(!e.collapsed)):t.container.removeAttribute("aria-expanded")}renderIndentGuides(e,t){if(Ud(t.indent),t.indentGuidesDisposable.dispose(),!this.shouldRenderIndentGuides)return;const i=new v,n=this.modelProvider();let o=e;for(;;){const e=n.getNodeLocation(o),s=n.getParentNodeLocation(e);if(!s)break;const r=n.getNode(s),a=Bu(".indent-guide",{style:`width: ${this.indent}px`});this.activeIndentNodes.has(r)&&a.classList.add("active"),0===t.indent.childElementCount?t.indent.appendChild(a):t.indent.insertBefore(a,t.indent.firstElementChild),this.renderedIndentGuides.add(r,a),i.add(b(()=>this.renderedIndentGuides.delete(r,a))),o=r}t.indentGuidesDisposable=i}_onDidChangeActiveNodes(e){if(!this.shouldRenderIndentGuides)return;const t=new Set,i=this.modelProvider();e.forEach(e=>{const n=i.getNodeLocation(e);try{const o=i.getParentNodeLocation(n);e.collapsible&&e.children.length>0&&!e.collapsed?t.add(e):o&&t.add(i.getNode(o))}catch(e){}}),this.activeIndentNodes.forEach(e=>{t.has(e)||this.renderedIndentGuides.forEach(e,e=>e.classList.remove("active"))}),t.forEach(e=>{this.activeIndentNodes.has(e)||this.renderedIndentGuides.forEach(e,e=>e.classList.add("active"))}),this.activeIndentNodes=t}dispose(){this.renderedNodes.clear(),this.renderedElements.clear(),this.indentGuidesDisposable.dispose(),f(this.disposables)}}Tk.DefaultIndent=8;class Ak{constructor(e,t,i){this.tree=e,this.keyboardNavigationLabelProvider=t,this._filter=i,this._totalCount=0,this._matchCount=0,this._pattern="",this._lowercasePattern="",this.disposables=new v,e.onWillRefilter(this.reset,this,this.disposables)}get totalCount(){return this._totalCount}get matchCount(){return this._matchCount}set pattern(e){this._pattern=e,this._lowercasePattern=e.toLowerCase()}filter(e,t){if(this._filter){const i=this._filter.filter(e,t);if(this.tree.options.simpleKeyboardNavigation)return i;let n;if(0===(n="boolean"==typeof i?i?1:0:fk(i)?_k(i.visibility):i))return!1}if(this._totalCount++,this.tree.options.simpleKeyboardNavigation||!this._pattern)return this._matchCount++,{data:nx.Default,visibility:!0};const i=this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e),n=Array.isArray(i)?i:[i];for(const e of n){const t=e&&e.toString();if(void 0===t)return{data:nx.Default,visibility:!0};const i=ox(this._pattern,this._lowercasePattern,0,t,t.toLowerCase(),0,!0);if(i)return this._matchCount++,1===n.length?{data:i,visibility:!0}:{data:{label:t,score:i},visibility:!0}}return this.tree.options.filterOnType?2:{data:nx.Default,visibility:!0}}reset(){this._totalCount=0,this._matchCount=0}dispose(){f(this.disposables)}}class Mk{constructor(e,i,n,o,s){this.tree=e,this.view=n,this.filter=o,this.keyboardNavigationDelegate=s,this._enabled=!1,this._pattern="",this._empty=!1,this._onDidChangeEmptyState=new oe,this.positionClassName="ne",this.automaticKeyboardNavigation=!0,this.triggered=!1,this._onDidChangePattern=new oe,this.enabledDisposables=new v,this.disposables=new v,this.domNode=Bu(`.monaco-list-type-filter.${this.positionClassName}`),this.domNode.draggable=!0,Ed(this.domNode,"dragstart")(this.onDragStart,this,this.disposables),this.messageDomNode=Mu(n.getHTMLElement(),Bu(".monaco-list-type-filter-message")),this.labelDomNode=Mu(this.domNode,Bu("span.label"));const r=Mu(this.domNode,Bu(".controls"));this._filterOnType=!!e.options.filterOnType,this.filterOnTypeDomNode=Mu(r,Bu("input.filter")),this.filterOnTypeDomNode.type="checkbox",this.filterOnTypeDomNode.checked=this._filterOnType,this.filterOnTypeDomNode.tabIndex=-1,this.updateFilterOnTypeTitleAndIcon(),Ed(this.filterOnTypeDomNode,"input")(this.onDidChangeFilterOnType,this,this.disposables),this.clearDomNode=Mu(r,Bu("button.clear"+Sk.cssSelector)),this.clearDomNode.tabIndex=-1,this.clearDomNode.title=t(0,"Clear"),this.keyboardNavigationEventFilter=e.options.keyboardNavigationEventFilter,i.onDidSplice(this.onDidSpliceModel,this,this.disposables),this.updateOptions(e.options)}get enabled(){return this._enabled}get pattern(){return this._pattern}get filterOnType(){return this._filterOnType}updateOptions(e){e.simpleKeyboardNavigation?this.disable():this.enable(),void 0!==e.filterOnType&&(this._filterOnType=!!e.filterOnType,this.filterOnTypeDomNode.checked=this._filterOnType),void 0!==e.automaticKeyboardNavigation&&(this.automaticKeyboardNavigation=e.automaticKeyboardNavigation),this.tree.refilter(),this.render(),this.automaticKeyboardNavigation||this.onEventOrInput("")}enable(){if(this._enabled)return;const e=ie.chain(Ed(this.view.getHTMLElement(),"keydown")).filter(e=>!Bx(e.target)||e.target===this.filterOnTypeDomNode).filter(e=>"Dead"!==e.key&&!/^Media/.test(e.key)).map(e=>new Rd(e)).filter(this.keyboardNavigationEventFilter||(()=>!0)).filter(()=>this.automaticKeyboardNavigation||this.triggered).filter(e=>this.keyboardNavigationDelegate.mightProducePrintableCharacter(e)&&!(18===e.keyCode||16===e.keyCode||15===e.keyCode||17===e.keyCode)||(this.pattern.length>0||this.triggered)&&(9===e.keyCode||1===e.keyCode)&&!e.altKey&&!e.ctrlKey&&!e.metaKey||1===e.keyCode&&(H?e.altKey&&!e.metaKey:e.ctrlKey)&&!e.shiftKey).forEach(e=>{e.stopPropagation(),e.preventDefault()}).event,t=Ed(this.clearDomNode,"click");ie.chain(ie.any(e,t)).event(this.onEventOrInput,this,this.enabledDisposables),this.filter.pattern="",this.tree.refilter(),this.render(),this._enabled=!0,this.triggered=!1}disable(){this._enabled&&(this.domNode.remove(),this.enabledDisposables.clear(),this.tree.refilter(),this.render(),this._enabled=!1,this.triggered=!1)}onEventOrInput(e){"string"==typeof e?this.onInput(e):e instanceof MouseEvent||9===e.keyCode||1===e.keyCode&&(H?e.altKey:e.ctrlKey)?this.onInput(""):this.onInput(1===e.keyCode?0===this.pattern.length?"":this.pattern.substr(0,this.pattern.length-1):this.pattern+e.browserEvent.key)}onInput(e){const t=this.view.getHTMLElement();e&&!this.domNode.parentElement?t.append(this.domNode):!e&&this.domNode.parentElement&&(this.domNode.remove(),this.tree.domFocus()),this._pattern=e,this._onDidChangePattern.fire(e),this.filter.pattern=e,this.tree.refilter(),e&&this.tree.focusNext(0,!0,void 0,e=>!nx.isDefault(e.filterData));const i=this.tree.getFocus();if(i.length>0){const e=i[0];null===this.tree.getRelativeTop(e)&&this.tree.reveal(e,.5)}this.render(),e||(this.triggered=!1)}onDragStart(){const e=this.view.getHTMLElement(),{left:t}=cu(e),i=e.clientWidth,n=i/2,o=this.domNode.clientWidth,s=new v;let r=this.positionClassName;const a=()=>{switch(r){case"nw":this.domNode.style.top="4px",this.domNode.style.left="4px";break;case"ne":this.domNode.style.top="4px",this.domNode.style.left=`${i-o-6}px`}};a(),this.domNode.classList.remove(r),this.domNode.classList.add("dragging"),s.add(b(()=>this.domNode.classList.remove("dragging"))),Ed(document,"dragover")(e=>{e.preventDefault();const i=e.clientX-t;e.dataTransfer&&(e.dataTransfer.dropEffect="none"),r=i{this.positionClassName=r,this.domNode.className=`monaco-list-type-filter ${this.positionClassName}`,this.domNode.style.top="",this.domNode.style.left="",f(s)},null,s),sy.CurrentDragAndDropData=new oy("vscode-ui"),s.add(b(()=>sy.CurrentDragAndDropData=void 0))}onDidSpliceModel(){this._enabled&&0!==this.pattern.length&&(this.tree.refilter(),this.render())}onDidChangeFilterOnType(){this.tree.updateOptions({filterOnType:this.filterOnTypeDomNode.checked}),this.tree.refilter(),this.tree.domFocus(),this.render(),this.updateFilterOnTypeTitleAndIcon()}updateFilterOnTypeTitleAndIcon(){this.filterOnType?(this.filterOnTypeDomNode.classList.remove(...yk.classNamesArray),this.filterOnTypeDomNode.classList.add(...wk.classNamesArray),this.filterOnTypeDomNode.title=t(0,"Disable Filter on Type")):(this.filterOnTypeDomNode.classList.remove(...wk.classNamesArray),this.filterOnTypeDomNode.classList.add(...yk.classNamesArray),this.filterOnTypeDomNode.title=t(0,"Enable Filter on Type"))}render(){const e=this.filter.totalCount>0&&0===this.filter.matchCount;this.pattern&&this.tree.options.filterOnType&&e?(this.messageDomNode.textContent=t(0,"No elements found"),this._empty=!0):(this.messageDomNode.innerText="",this._empty=!1),this.domNode.classList.toggle("no-matches",e),this.domNode.title=t(0,"Matched {0} out of {1} elements",this.filter.matchCount,this.filter.totalCount),this.labelDomNode.textContent=this.pattern.length>16?"…"+this.pattern.substr(this.pattern.length-16):this.pattern,this._onDidChangeEmptyState.fire(this._empty)}shouldAllowFocus(e){return!(this.enabled&&this.pattern&&!this.filterOnType)||this.filter.totalCount>0&&this.filter.matchCount<=1||!nx.isDefault(e.filterData)}dispose(){this._enabled&&(this.domNode.remove(),this.enabledDisposables.dispose(),this._enabled=!1,this.triggered=!1),this._onDidChangePattern.dispose(),f(this.disposables)}}function Ok(e){let t=rk.Unknown;return bu(e.browserEvent.target,"monaco-tl-twistie","monaco-tl-row")?t=rk.Twistie:bu(e.browserEvent.target,"monaco-tl-contents","monaco-tl-row")&&(t=rk.Element),{browserEvent:e.browserEvent,element:e.element?e.element.element:null,target:t}}function Rk(e,t){t(e),e.children.forEach(e=>Rk(e,t))}class Pk{constructor(e){this.identityProvider=e,this.nodes=[],this._onDidChange=new oe,this.onDidChange=this._onDidChange.event}get nodeSet(){return this._nodeSet||(this._nodeSet=this.createNodeSet()),this._nodeSet}set(e,t){var i;((null===(i=t)||void 0===i?void 0:i.__forceEvent)||!Zr(this.nodes,e))&&this._set(e,!1,t)}_set(e,t,i){if(this.nodes=[...e],this.elements=void 0,this._nodeSet=void 0,!t){const e=this;this._onDidChange.fire({get elements(){return e.get()},browserEvent:i})}}get(){return this.elements||(this.elements=this.nodes.map(e=>e.element)),[...this.elements]}getNodes(){return this.nodes}has(e){return this.nodeSet.has(e)}onDidModelSplice({insertedNodes:e,deletedNodes:t}){if(!this.identityProvider){const e=this.createNodeSet(),i=t=>e.delete(t);return t.forEach(e=>Rk(e,i)),void this.set([...e.values()])}const i=new Set,n=e=>i.add(this.identityProvider.getId(e.element).toString());t.forEach(e=>Rk(e,n));const o=new Map,s=e=>o.set(this.identityProvider.getId(e.element).toString(),e);e.forEach(e=>Rk(e,s));const r=[];for(const e of this.nodes){const t=this.identityProvider.getId(e.element).toString();if(i.has(t)){const e=o.get(t);e&&r.push(e)}else r.push(e)}this._set(r,!0)}createNodeSet(){const e=new Set;for(const t of this.nodes)e.add(t);return e}}class Fk extends qx{constructor(e,t){super(e),this.tree=t}onViewPointer(e){if(Bx(e.browserEvent.target)||Wx(e.browserEvent.target))return;const t=e.element;if(!t)return super.onViewPointer(e);if(this.isSelectionRangeChangeEvent(e)||this.isSelectionSingleChangeEvent(e))return super.onViewPointer(e);const i=e.browserEvent.target,n=i.classList.contains("monaco-tl-twistie")||i.classList.contains("monaco-icon-label")&&i.classList.contains("folder-icon")&&e.browserEvent.offsetX<16;let o=!1;if((o="function"==typeof this.tree.expandOnlyOnTwistieClick?this.tree.expandOnlyOnTwistieClick(t.element):!!this.tree.expandOnlyOnTwistieClick)&&!n&&2!==e.browserEvent.detail)return super.onViewPointer(e);if(!this.tree.expandOnDoubleClick&&2===e.browserEvent.detail)return super.onViewPointer(e);if(t.collapsible){const i=this.tree.model,s=i.getNodeLocation(t),r=e.browserEvent.altKey;if(this.tree.setFocus([s]),i.setCollapsed(s,void 0,r),o&&n)return}super.onViewPointer(e)}onDoubleClick(e){!e.browserEvent.target.classList.contains("monaco-tl-twistie")&&this.tree.expandOnDoubleClick&&super.onDoubleClick(e)}}class Bk extends ik{constructor(e,t,i,n,o,s,r){super(e,t,i,n,r),this.focusTrait=o,this.selectionTrait=s}createMouseController(e){return new Fk(this,e.tree)}splice(e,t,i=[]){if(super.splice(e,t,i),0===i.length)return;const n=[],o=[];i.forEach((t,i)=>{this.focusTrait.has(t)&&n.push(e+i),this.selectionTrait.has(t)&&o.push(e+i)}),n.length>0&&super.setFocus(sa([...super.getFocus(),...n])),o.length>0&&super.setSelection(sa([...super.getSelection(),...o]))}setFocus(e,t,i=!1){super.setFocus(e,t),i||this.focusTrait.set(e.map(e=>this.element(e)),t)}setSelection(e,t,i=!1){super.setSelection(e,t),i||this.selectionTrait.set(e.map(e=>this.element(e)),t)}}class Wk{constructor(e,t,i,n,o={}){this._options=o,this.eventBufferer=new re,this.disposables=new v,this._onWillRefilter=new oe,this.onWillRefilter=this._onWillRefilter.event,this._onDidUpdateOptions=new oe;const s=new kk(i),r=new ae,a=new ae,l=new Ik(a.event);this.renderers=n.map(e=>new Tk(e,()=>this.model,r.event,l,o));for(let e of this.renderers)this.disposables.add(e);let h;o.keyboardNavigationLabelProvider&&(h=new Ak(this,o.keyboardNavigationLabelProvider,o.filter),o=Object.assign(Object.assign({},o),{filter:h}),this.disposables.add(h)),this.focus=new Pk(o.identityProvider),this.selection=new Pk(o.identityProvider),this.view=new Bk(e,t,s,this.renderers,this.focus,this.selection,Object.assign(Object.assign({},function c(e,t){return t&&Object.assign(Object.assign({},t),{identityProvider:t.identityProvider&&{getId:e=>t.identityProvider.getId(e.element)},dnd:t.dnd&&new xk(e,t.dnd),multipleSelectionController:t.multipleSelectionController&&{isSelectionSingleChangeEvent:e=>t.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({},e),{element:e.element})),isSelectionRangeChangeEvent:e=>t.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({},e),{element:e.element}))},accessibilityProvider:t.accessibilityProvider&&Object.assign(Object.assign({},t.accessibilityProvider),{getSetSize(t){const i=e(),n=i.getNodeLocation(t),o=i.getParentNodeLocation(n);return i.getNode(o).visibleChildrenCount},getPosInSet:e=>e.visibleChildIndex+1,isChecked:t.accessibilityProvider&&t.accessibilityProvider.isChecked?e=>t.accessibilityProvider.isChecked(e.element):void 0,getRole:t.accessibilityProvider&&t.accessibilityProvider.getRole?e=>t.accessibilityProvider.getRole(e.element):()=>"treeitem",getAriaLabel:e=>t.accessibilityProvider.getAriaLabel(e.element),getWidgetAriaLabel:()=>t.accessibilityProvider.getWidgetAriaLabel(),getWidgetRole:t.accessibilityProvider&&t.accessibilityProvider.getWidgetRole?()=>t.accessibilityProvider.getWidgetRole():()=>"tree",getAriaLevel:t.accessibilityProvider&&t.accessibilityProvider.getAriaLevel?e=>t.accessibilityProvider.getAriaLevel(e.element):e=>e.depth,getActiveDescendantId:t.accessibilityProvider.getActiveDescendantId&&(e=>t.accessibilityProvider.getActiveDescendantId(e.element))}),keyboardNavigationLabelProvider:t.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},t.keyboardNavigationLabelProvider),{getKeyboardNavigationLabel:e=>t.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e.element)}),enableKeyboardNavigation:t.simpleKeyboardNavigation})}(()=>this.model,o)),{tree:this})),this.model=this.createModel(e,this.view,o),r.input=this.model.onDidChangeCollapseState;const d=ie.forEach(this.model.onDidSplice,e=>{this.eventBufferer.bufferEvents(()=>{this.focus.onDidModelSplice(e),this.selection.onDidModelSplice(e)})});if(d(()=>null,null,this.disposables),a.input=ie.chain(ie.any(d,this.focus.onDidChange,this.selection.onDidChange)).debounce(()=>null,0).map(()=>{const e=new Set;for(const t of this.focus.getNodes())e.add(t);for(const t of this.selection.getNodes())e.add(t);return[...e.values()]}).event,!1!==o.keyboardSupport){const e=ie.chain(this.view.onKeyDown).filter(e=>!Bx(e.target)).map(e=>new Rd(e));e.filter(e=>15===e.keyCode).on(this.onLeftArrow,this,this.disposables),e.filter(e=>17===e.keyCode).on(this.onRightArrow,this,this.disposables),e.filter(e=>10===e.keyCode).on(this.onSpace,this,this.disposables)}o.keyboardNavigationLabelProvider&&(this.typeFilterController=new Mk(this,this.model,this.view,h,o.keyboardNavigationDelegate||zx),this.focusNavigationFilter=e=>this.typeFilterController.shouldAllowFocus(e),this.disposables.add(this.typeFilterController)),this.styleElement=Su(this.view.getHTMLElement()),this.getHTMLElement().classList.toggle("always",this._options.renderIndentGuides===Nk.Always)}get onDidChangeFocus(){return this.eventBufferer.wrapEvent(this.focus.onDidChange)}get onDidChangeSelection(){return this.eventBufferer.wrapEvent(this.selection.onDidChange)}get onMouseDblClick(){return ie.map(this.view.onMouseDblClick,Ok)}get onPointer(){return ie.map(this.view.onPointer,Ok)}get onDidFocus(){return this.view.onDidFocus}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get expandOnDoubleClick(){return void 0===this._options.expandOnDoubleClick||this._options.expandOnDoubleClick}get expandOnlyOnTwistieClick(){return void 0===this._options.expandOnlyOnTwistieClick||this._options.expandOnlyOnTwistieClick}get onDidDispose(){return this.view.onDidDispose}updateOptions(e={}){this._options=Object.assign(Object.assign({},this._options),e);for(const t of this.renderers)t.updateOptions(e);this.view.updateOptions({enableKeyboardNavigation:this._options.simpleKeyboardNavigation,automaticKeyboardNavigation:this._options.automaticKeyboardNavigation,smoothScrolling:this._options.smoothScrolling,horizontalScrolling:this._options.horizontalScrolling}),this.typeFilterController&&this.typeFilterController.updateOptions(this._options),this._onDidUpdateOptions.fire(this._options),this.getHTMLElement().classList.toggle("always",this._options.renderIndentGuides===Nk.Always)}get options(){return this._options}getHTMLElement(){return this.view.getHTMLElement()}get scrollTop(){return this.view.scrollTop}set scrollTop(e){this.view.scrollTop=e}domFocus(){this.view.domFocus()}layout(e,t){this.view.layout(e,t)}style(e){const t=`.${this.view.domId}`,i=[];e.treeIndentGuidesStroke&&(i.push(`.monaco-list${t}:hover .monaco-tl-indent > .indent-guide, .monaco-list${t}.always .monaco-tl-indent > .indent-guide { border-color: ${e.treeIndentGuidesStroke.transparent(.4)}; }`),i.push(`.monaco-list${t} .monaco-tl-indent > .indent-guide.active { border-color: ${e.treeIndentGuidesStroke}; }`)),this.styleElement.textContent=i.join("\n"),this.view.style(e)}collapse(e,t=!1){return this.model.setCollapsed(e,!0,t)}expand(e,t=!1){return this.model.setCollapsed(e,!1,t)}isCollapsible(e){return this.model.isCollapsible(e)}setCollapsible(e,t){return this.model.setCollapsible(e,t)}isCollapsed(e){return this.model.isCollapsed(e)}refilter(){this._onWillRefilter.fire(void 0),this.model.refilter()}setSelection(e,t){const i=e.map(e=>this.model.getNode(e));this.selection.set(i,t);const n=e.map(e=>this.model.getListIndex(e)).filter(e=>e>-1);this.view.setSelection(n,t,!0)}getSelection(){return this.selection.get()}setFocus(e,t){const i=e.map(e=>this.model.getNode(e));this.focus.set(i,t);const n=e.map(e=>this.model.getListIndex(e)).filter(e=>e>-1);this.view.setFocus(n,t,!0)}focusNext(e=1,t=!1,i,n=this.focusNavigationFilter){this.view.focusNext(e,t,i,n)}getFocus(){return this.focus.get()}reveal(e,t){this.model.expandTo(e);const i=this.model.getListIndex(e);-1!==i&&this.view.reveal(i,t)}getRelativeTop(e){const t=this.model.getListIndex(e);return-1===t?null:this.view.getRelativeTop(t)}onLeftArrow(e){e.preventDefault(),e.stopPropagation();const t=this.view.getFocusedElements();if(0===t.length)return;const i=this.model.getNodeLocation(t[0]);if(!this.model.setCollapsed(i,!0)){const e=this.model.getParentNodeLocation(i);if(!e)return;const t=this.model.getListIndex(e);this.view.reveal(t),this.view.setFocus([t])}}onRightArrow(e){e.preventDefault(),e.stopPropagation();const t=this.view.getFocusedElements();if(0===t.length)return;const i=t[0],n=this.model.getNodeLocation(i);if(!this.model.setCollapsed(n,!1)){if(!i.children.some(e=>e.visible))return;const[e]=this.view.getFocus(),t=e+1;this.view.reveal(t),this.view.setFocus([t])}}onSpace(e){e.preventDefault(),e.stopPropagation();const t=this.view.getFocusedElements();if(0===t.length)return;const i=this.model.getNodeLocation(t[0]);this.model.setCollapsed(i,void 0,e.browserEvent.altKey)}dispose(){f(this.disposables),this.view.dispose()}}class Vk{constructor(e,t,i={}){this.user=e,this.rootRef=null,this.nodes=new Map,this.nodesByIdentity=new Map,this.model=new vk(e,t,null,i),this.onDidSplice=this.model.onDidSplice,this.onDidChangeCollapseState=this.model.onDidChangeCollapseState,this.onDidChangeRenderNodeCount=this.model.onDidChangeRenderNodeCount,i.sorter&&(this.sorter={compare:(e,t)=>i.sorter.compare(e.element,t.element)}),this.identityProvider=i.identityProvider}setChildren(e,t=c.empty(),i={}){const n=this.getElementLocation(e);this._setChildren(n,this.preserveCollapseState(t),i)}_setChildren(e,t=c.empty(),i){const n=new Set,o=new Set;this.model.splice([...e,0],Number.MAX_VALUE,t,Object.assign(Object.assign({},i),{onDidCreateNode:e=>{var t;if(null===e.element)return;const s=e;if(n.add(s.element),this.nodes.set(s.element,s),this.identityProvider){const e=this.identityProvider.getId(s.element).toString();o.add(e),this.nodesByIdentity.set(e,s)}null===(t=i.onDidCreateNode)||void 0===t||t.call(i,s)},onDidDeleteNode:e=>{var t;if(null===e.element)return;const s=e;if(n.has(s.element)||this.nodes.delete(s.element),this.identityProvider){const e=this.identityProvider.getId(s.element).toString();o.has(e)||this.nodesByIdentity.delete(e)}null===(t=i.onDidDeleteNode)||void 0===t||t.call(i,s)}}))}preserveCollapseState(e=c.empty()){return this.sorter&&(e=Jr([...e],this.sorter.compare.bind(this.sorter))),c.map(e,e=>{let t=this.nodes.get(e.element);if(!t&&this.identityProvider){const i=this.identityProvider.getId(e.element).toString();t=this.nodesByIdentity.get(i)}if(!t)return Object.assign(Object.assign({},e),{children:this.preserveCollapseState(e.children)});const i="boolean"==typeof e.collapsible?e.collapsible:t.collapsible,n=void 0!==e.collapsed?e.collapsed:t.collapsed;return Object.assign(Object.assign({},e),{collapsible:i,collapsed:n,children:this.preserveCollapseState(e.children)})})}rerender(e){const t=this.getElementLocation(e);this.model.rerender(t)}has(e){return this.nodes.has(e)}getListIndex(e){const t=this.getElementLocation(e);return this.model.getListIndex(t)}getListRenderCount(e){const t=this.getElementLocation(e);return this.model.getListRenderCount(t)}isCollapsible(e){const t=this.getElementLocation(e);return this.model.isCollapsible(t)}setCollapsible(e,t){const i=this.getElementLocation(e);return this.model.setCollapsible(i,t)}isCollapsed(e){const t=this.getElementLocation(e);return this.model.isCollapsed(t)}setCollapsed(e,t,i){const n=this.getElementLocation(e);return this.model.setCollapsed(n,t,i)}expandTo(e){const t=this.getElementLocation(e);this.model.expandTo(t)}refilter(){this.model.refilter()}getNode(e=null){if(null===e)return this.model.getNode(this.model.rootRef);const t=this.nodes.get(e);if(!t)throw new ak(this.user,`Tree element not found: ${e}`);return t}getNodeLocation(e){return e.element}getParentNodeLocation(e){if(null===e)throw new ak(this.user,"Invalid getParentNodeLocation call");const t=this.nodes.get(e);if(!t)throw new ak(this.user,`Tree element not found: ${e}`);const i=this.model.getNodeLocation(t),n=this.model.getParentNodeLocation(i);return this.model.getNode(n).element}getElementLocation(e){if(null===e)return[];const t=this.nodes.get(e);if(!t)throw new ak(this.user,`Tree element not found: ${e}`);return this.model.getNodeLocation(t)}}function zk(e){return{element:{elements:[e.element],incompressible:e.incompressible||!1},children:c.map(c.from(e.children),zk),collapsible:e.collapsible,collapsed:e.collapsed}}function Hk(e){const t=[e.element],i=e.incompressible||!1;let n,o;for(;[o,n]=c.consume(c.from(e.children),2),1===o.length&&!o[0].incompressible;)t.push((e=o[0]).element);return{element:{elements:t,incompressible:i},children:c.map(c.concat(o,n),Hk),collapsible:e.collapsible,collapsed:e.collapsed}}function Uk(e){return function e(t,i=0){let n;return n=ie(t,0)),0===i&&t.element.incompressible?{element:t.element.elements[i],children:n,incompressible:!0,collapsible:t.collapsible,collapsed:t.collapsed}:{element:t.element.elements[i],children:n,collapsible:t.collapsible,collapsed:t.collapsed}}(e,0)}const Kk=e=>({getId:t=>t.elements.map(t=>e.getId(t).toString()).join("\0")});class $k{constructor(e,t,i={}){this.user=e,this.rootRef=null,this.nodes=new Map,this.model=new Vk(e,t,i),this.enabled=void 0===i.compressionEnabled||i.compressionEnabled,this.identityProvider=i.identityProvider}get onDidSplice(){return this.model.onDidSplice}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get onDidChangeRenderNodeCount(){return this.model.onDidChangeRenderNodeCount}setChildren(e,t=c.empty(),i){const n=i.diffIdentityProvider&&Kk(i.diffIdentityProvider);if(null===e){const e=c.map(t,this.enabled?Hk:zk);return void this._setChildren(null,e,{diffIdentityProvider:n,diffDepth:1/0})}const o=this.nodes.get(e);if(!o)throw new Error("Unknown compressed tree node");const s=this.model.getNode(o),r=this.model.getParentNodeLocation(o),a=this.model.getNode(r),l=function e(t,i,n){return t.element===i?Object.assign(Object.assign({},t),{children:n}):Object.assign(Object.assign({},t),{children:c.map(c.from(t.children),t=>e(t,i,n))})}(Uk(s),e,t),h=(this.enabled?Hk:zk)(l),d=a.children.map(e=>e===s?h:e);this._setChildren(a.element,d,{diffIdentityProvider:n,diffDepth:s.depth-a.depth})}setCompressionEnabled(e){if(e===this.enabled)return;this.enabled=e;const t=this.model.getNode(),i=c.map(t.children,Uk),n=c.map(i,e?Hk:zk);this._setChildren(null,n,{diffIdentityProvider:this.identityProvider,diffDepth:1/0})}_setChildren(e,t,i){const n=new Set;this.model.setChildren(e,t,Object.assign(Object.assign({},i),{onDidCreateNode:e=>{for(const t of e.element.elements)n.add(t),this.nodes.set(t,e.element)},onDidDeleteNode:e=>{for(const t of e.element.elements)n.has(t)||this.nodes.delete(t)}}))}has(e){return this.nodes.has(e)}getListIndex(e){const t=this.getCompressedNode(e);return this.model.getListIndex(t)}getListRenderCount(e){const t=this.getCompressedNode(e);return this.model.getListRenderCount(t)}getNode(e){if(void 0===e)return this.model.getNode();const t=this.getCompressedNode(e);return this.model.getNode(t)}getNodeLocation(e){const t=this.model.getNodeLocation(e);return null===t?null:t.elements[t.elements.length-1]}getParentNodeLocation(e){const t=this.getCompressedNode(e),i=this.model.getParentNodeLocation(t);return null===i?null:i.elements[i.elements.length-1]}isCollapsible(e){const t=this.getCompressedNode(e);return this.model.isCollapsible(t)}setCollapsible(e,t){const i=this.getCompressedNode(e);return this.model.setCollapsible(i,t)}isCollapsed(e){const t=this.getCompressedNode(e);return this.model.isCollapsed(t)}setCollapsed(e,t,i){const n=this.getCompressedNode(e);return this.model.setCollapsed(n,t,i)}expandTo(e){const t=this.getCompressedNode(e);this.model.expandTo(t)}rerender(e){const t=this.getCompressedNode(e);this.model.rerender(t)}refilter(){this.model.refilter()}getCompressedNode(e){if(null===e)return null;const t=this.nodes.get(e);if(!t)throw new ak(this.user,`Tree element not found: ${e}`);return t}}const jk=e=>e[e.length-1];class qk{constructor(e,t){this.unwrapper=e,this.node=t}get element(){return null===this.node.element?null:this.unwrapper(this.node.element)}get children(){return this.node.children.map(e=>new qk(this.unwrapper,e))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class Gk{constructor(e,t,i={}){this.rootRef=null,this.elementMapper=i.elementMapper||jk;const n=e=>this.elementMapper(e.elements);this.nodeMapper=new lk(e=>new qk(n,e)),this.model=new $k(e,function o(e,t){return{splice(i,n,o){t.splice(i,n,o.map(t=>e.map(t)))},updateElementHeight(e,i){t.updateElementHeight(e,i)}}}(this.nodeMapper,t),function s(e,t){return Object.assign(Object.assign({},t),{identityProvider:t.identityProvider&&{getId:i=>t.identityProvider.getId(e(i))},sorter:t.sorter&&{compare:(e,i)=>t.sorter.compare(e.elements[0],i.elements[0])},filter:t.filter&&{filter:(i,n)=>t.filter.filter(e(i),n)}})}(n,i))}get onDidSplice(){return ie.map(this.model.onDidSplice,({insertedNodes:e,deletedNodes:t})=>({insertedNodes:e.map(e=>this.nodeMapper.map(e)),deletedNodes:t.map(e=>this.nodeMapper.map(e))}))}get onDidChangeCollapseState(){return ie.map(this.model.onDidChangeCollapseState,({node:e,deep:t})=>({node:this.nodeMapper.map(e),deep:t}))}get onDidChangeRenderNodeCount(){return ie.map(this.model.onDidChangeRenderNodeCount,e=>this.nodeMapper.map(e))}setChildren(e,t=c.empty(),i={}){this.model.setChildren(e,t,i)}setCompressionEnabled(e){this.model.setCompressionEnabled(e)}has(e){return this.model.has(e)}getListIndex(e){return this.model.getListIndex(e)}getListRenderCount(e){return this.model.getListRenderCount(e)}getNode(e){return this.nodeMapper.map(this.model.getNode(e))}getNodeLocation(e){return e.element}getParentNodeLocation(e){return this.model.getParentNodeLocation(e)}isCollapsible(e){return this.model.isCollapsible(e)}setCollapsible(e,t){return this.model.setCollapsible(e,t)}isCollapsed(e){return this.model.isCollapsed(e)}setCollapsed(e,t,i){return this.model.setCollapsed(e,t,i)}expandTo(e){return this.model.expandTo(e)}rerender(e){return this.model.rerender(e)}refilter(){return this.model.refilter()}getCompressedTreeNode(e=null){return this.model.getNode(e)}}class Yk extends Wk{constructor(e,t,i,n,o={}){super(e,t,i,n,o)}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}setChildren(e,t=c.empty(),i){this.model.setChildren(e,t,i)}rerender(e){void 0!==e?this.model.rerender(e):this.view.rerender()}hasElement(e){return this.model.has(e)}createModel(e,t,i){return new Vk(e,t,i)}}class Zk{constructor(e,t){this._compressedTreeNodeProvider=e,this.renderer=t,this.templateId=t.templateId,t.onDidChangeTwistieState&&(this.onDidChangeTwistieState=t.onDidChangeTwistieState)}get compressedTreeNodeProvider(){return this._compressedTreeNodeProvider()}renderTemplate(e){return{compressedTreeNode:void 0,data:this.renderer.renderTemplate(e)}}renderElement(e,t,i,n){const o=this.compressedTreeNodeProvider.getCompressedTreeNode(e.element);1===o.element.elements.length?(i.compressedTreeNode=void 0,this.renderer.renderElement(e,t,i.data,n)):(i.compressedTreeNode=o,this.renderer.renderCompressedElements(o,t,i.data,n))}disposeElement(e,t,i,n){i.compressedTreeNode?this.renderer.disposeCompressedElements&&this.renderer.disposeCompressedElements(i.compressedTreeNode,t,i.data,n):this.renderer.disposeElement&&this.renderer.disposeElement(e,t,i.data,n)}disposeTemplate(e){this.renderer.disposeTemplate(e.data)}renderTwistie(e,t){return!!this.renderer.renderTwistie&&this.renderer.renderTwistie(e,t)}}!function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);s>3&&r&&Object.defineProperty(t,i,r)}([Rg],Zk.prototype,"compressedTreeNodeProvider",null);class Xk extends Yk{constructor(e,t,i,n,o={}){const s=()=>this;super(e,t,i,n.map(e=>new Zk(s,e)),function r(e,t){return t&&Object.assign(Object.assign({},t),{keyboardNavigationLabelProvider:t.keyboardNavigationLabelProvider&&{getKeyboardNavigationLabel(i){let n;try{n=e().getCompressedTreeNode(i)}catch(e){return t.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(i)}return 1===n.element.elements.length?t.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(i):t.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(n.element.elements)}}})}(s,o))}setChildren(e,t=c.empty(),i){this.model.setChildren(e,t,i)}createModel(e,t,i){return new Gk(e,t,i)}updateOptions(e={}){super.updateOptions(e),void 0!==e.compressionEnabled&&this.model.setCompressionEnabled(e.compressionEnabled)}getCompressedTreeNode(e=null){return this.model.getCompressedTreeNode(e)}}var Qk=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function Jk(e){return Object.assign(Object.assign({},e),{children:[],refreshPromise:void 0,stale:!0,slow:!1,collapsedByDefault:void 0})}function eN(e,t){return!!t.parent&&(t.parent===e||eN(e,t.parent))}class tN{constructor(e){this.node=e}get element(){return this.node.element.element}get children(){return this.node.children.map(e=>new tN(e))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class iN{constructor(e,t,i){this.renderer=e,this.nodeMapper=t,this.onDidChangeTwistieState=i,this.renderedNodes=new Map,this.templateId=e.templateId}renderTemplate(e){return{templateData:this.renderer.renderTemplate(e)}}renderElement(e,t,i,n){this.renderer.renderElement(this.nodeMapper.map(e),t,i.templateData,n)}renderTwistie(e,t){return e.slow?(t.classList.add(...Lk.classNamesArray),!0):(t.classList.remove(...Lk.classNamesArray),!1)}disposeElement(e,t,i,n){this.renderer.disposeElement&&this.renderer.disposeElement(this.nodeMapper.map(e),t,i.templateData,n)}disposeTemplate(e){this.renderer.disposeTemplate(e.templateData)}dispose(){this.renderedNodes.clear()}}function nN(e){return{browserEvent:e.browserEvent,elements:e.elements.map(e=>e.element)}}function oN(e){return{browserEvent:e.browserEvent,element:e.element&&e.element.element,target:e.target}}class sN extends Ex{constructor(e){super(e.elements.map(e=>e.element)),this.data=e}}function rN(e){return e instanceof Ex?new sN(e):e}class aN{constructor(e){this.dnd=e}getDragURI(e){return this.dnd.getDragURI(e.element)}getDragLabel(e,t){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(e.map(e=>e.element),t)}onDragStart(e,t){this.dnd.onDragStart&&this.dnd.onDragStart(rN(e),t)}onDragOver(e,t,i,n,o=!0){return this.dnd.onDragOver(rN(e),t&&t.element,i,n)}drop(e,t,i,n){this.dnd.drop(rN(e),t&&t.element,i,n)}onDragEnd(e){this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}}function lN(e){return e&&Object.assign(Object.assign({},e),{collapseByDefault:!0,identityProvider:e.identityProvider&&{getId:t=>e.identityProvider.getId(t.element)},dnd:e.dnd&&new aN(e.dnd),multipleSelectionController:e.multipleSelectionController&&{isSelectionSingleChangeEvent:t=>e.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({},t),{element:t.element})),isSelectionRangeChangeEvent:t=>e.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({},t),{element:t.element}))},accessibilityProvider:e.accessibilityProvider&&Object.assign(Object.assign({},e.accessibilityProvider),{getPosInSet:void 0,getSetSize:void 0,getRole:e.accessibilityProvider.getRole?t=>e.accessibilityProvider.getRole(t.element):()=>"treeitem",isChecked:e.accessibilityProvider.isChecked?t=>{var i;return!!(null===(i=e.accessibilityProvider)||void 0===i?void 0:i.isChecked(t.element))}:void 0,getAriaLabel:t=>e.accessibilityProvider.getAriaLabel(t.element),getWidgetAriaLabel:()=>e.accessibilityProvider.getWidgetAriaLabel(),getWidgetRole:e.accessibilityProvider.getWidgetRole?()=>e.accessibilityProvider.getWidgetRole():()=>"tree",getAriaLevel:e.accessibilityProvider.getAriaLevel&&(t=>e.accessibilityProvider.getAriaLevel(t.element)),getActiveDescendantId:e.accessibilityProvider.getActiveDescendantId&&(t=>e.accessibilityProvider.getActiveDescendantId(t.element))}),filter:e.filter&&{filter:(t,i)=>e.filter.filter(t.element,i)},keyboardNavigationLabelProvider:e.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},e.keyboardNavigationLabelProvider),{getKeyboardNavigationLabel:t=>e.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(t.element)}),sorter:void 0,expandOnlyOnTwistieClick:void 0===e.expandOnlyOnTwistieClick?void 0:"function"!=typeof e.expandOnlyOnTwistieClick?e.expandOnlyOnTwistieClick:t=>e.expandOnlyOnTwistieClick(t.element),additionalScrollHeight:e.additionalScrollHeight})}function hN(e,t){t(e),e.children.forEach(e=>hN(e,t))}class cN{constructor(e,t,i,n,o,s={}){this.user=e,this.dataSource=o,this.nodes=new Map,this.subTreeRefreshPromises=new Map,this.refreshPromises=new Map,this._onDidRender=new oe,this._onDidChangeNodeSlowState=new oe,this.nodeMapper=new lk(e=>new tN(e)),this.disposables=new v,this.identityProvider=s.identityProvider,this.autoExpandSingleChildren=void 0!==s.autoExpandSingleChildren&&s.autoExpandSingleChildren,this.sorter=s.sorter,this.collapseByDefault=s.collapseByDefault,this.tree=this.createTree(e,t,i,n,s),this.root=Jk({element:void 0,parent:null,hasChildren:!0}),this.identityProvider&&(this.root=Object.assign(Object.assign({},this.root),{id:null})),this.nodes.set(null,this.root),this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState,this,this.disposables)}get onDidChangeFocus(){return ie.map(this.tree.onDidChangeFocus,nN)}get onDidChangeSelection(){return ie.map(this.tree.onDidChangeSelection,nN)}get onMouseDblClick(){return ie.map(this.tree.onMouseDblClick,oN)}get onPointer(){return ie.map(this.tree.onPointer,oN)}get onDidFocus(){return this.tree.onDidFocus}get onDidDispose(){return this.tree.onDidDispose}createTree(e,t,i,n,o){const s=new kk(i),r=n.map(e=>new iN(e,this.nodeMapper,this._onDidChangeNodeSlowState.event)),a=lN(o)||{};return new Yk(e,t,s,r,a)}updateOptions(e={}){this.tree.updateOptions(e)}getHTMLElement(){return this.tree.getHTMLElement()}get scrollTop(){return this.tree.scrollTop}set scrollTop(e){this.tree.scrollTop=e}domFocus(){this.tree.domFocus()}layout(e,t){this.tree.layout(e,t)}style(e){this.tree.style(e)}getInput(){return this.root.element}setInput(e,t){return Qk(this,void 0,void 0,(function*(){this.refreshPromises.forEach(e=>e.cancel()),this.refreshPromises.clear(),this.root.element=e;const i=t&&{viewState:t,focus:[],selection:[]};yield this._updateChildren(e,!0,!1,i),i&&(this.tree.setFocus(i.focus),this.tree.setSelection(i.selection)),t&&"number"==typeof t.scrollTop&&(this.scrollTop=t.scrollTop)}))}_updateChildren(e=this.root.element,t=!0,i=!1,n,o){return Qk(this,void 0,void 0,(function*(){if(void 0===this.root.element)throw new ak(this.user,"Tree input not set");this.root.refreshPromise&&(yield this.root.refreshPromise,yield ie.toPromise(this._onDidRender.event));const s=this.getDataNode(e);if(yield this.refreshAndRenderNode(s,t,n,o),i)try{this.tree.rerender(s)}catch(e){}}))}rerender(e){if(void 0===e||e===this.root.element)return void this.tree.rerender();const t=this.getDataNode(e);this.tree.rerender(t)}collapse(e,t=!1){const i=this.getDataNode(e);return this.tree.collapse(i===this.root?null:i,t)}expand(e,t=!1){return Qk(this,void 0,void 0,(function*(){if(void 0===this.root.element)throw new ak(this.user,"Tree input not set");this.root.refreshPromise&&(yield this.root.refreshPromise,yield ie.toPromise(this._onDidRender.event));const i=this.getDataNode(e);if(this.tree.hasElement(i)&&!this.tree.isCollapsible(i))return!1;if(i.refreshPromise&&(yield this.root.refreshPromise,yield ie.toPromise(this._onDidRender.event)),i!==this.root&&!i.refreshPromise&&!this.tree.isCollapsed(i))return!1;const n=this.tree.expand(i===this.root?null:i,t);return i.refreshPromise&&(yield this.root.refreshPromise,yield ie.toPromise(this._onDidRender.event)),n}))}setSelection(e,t){const i=e.map(e=>this.getDataNode(e));this.tree.setSelection(i,t)}getSelection(){return this.tree.getSelection().map(e=>e.element)}setFocus(e,t){const i=e.map(e=>this.getDataNode(e));this.tree.setFocus(i,t)}getFocus(){return this.tree.getFocus().map(e=>e.element)}reveal(e,t){this.tree.reveal(this.getDataNode(e),t)}getDataNode(e){const t=this.nodes.get(e===this.root.element?null:e);if(!t)throw new ak(this.user,`Data tree node not found: ${e}`);return t}refreshAndRenderNode(e,t,i,n){return Qk(this,void 0,void 0,(function*(){yield this.refreshNode(e,t,i),this.render(e,i,n)}))}refreshNode(e,t,i){return Qk(this,void 0,void 0,(function*(){let n;return this.subTreeRefreshPromises.forEach((o,s)=>{!n&&function r(e,t){return e===t||eN(e,t)||eN(t,e)}(s,e)&&(n=o.then(()=>this.refreshNode(e,t,i)))}),n||this.doRefreshSubTree(e,t,i)}))}doRefreshSubTree(e,t,i){return Qk(this,void 0,void 0,(function*(){let n;e.refreshPromise=new Promise(e=>n=e),this.subTreeRefreshPromises.set(e,e.refreshPromise),e.refreshPromise.finally(()=>{e.refreshPromise=void 0,this.subTreeRefreshPromises.delete(e)});try{const o=yield this.doRefreshNode(e,t,i);e.stale=!1,yield Ga.settled(o.map(e=>this.doRefreshSubTree(e,t,i)))}finally{n()}}))}doRefreshNode(e,t,i){return Qk(this,void 0,void 0,(function*(){let n;if(e.hasChildren=!!this.dataSource.hasChildren(e.element),e.hasChildren){const t=za(800);t.then(()=>{e.slow=!0,this._onDidChangeNodeSlowState.fire(e)},e=>null),n=this.doGetChildren(e).finally(()=>t.cancel())}else n=Promise.resolve(c.empty());try{const o=yield n;return this.setChildren(e,o,t,i)}catch(t){if(e!==this.root&&this.tree.hasElement(e)&&this.tree.collapse(e),a(t))return[];throw t}finally{e.slow&&(e.slow=!1,this._onDidChangeNodeSlowState.fire(e))}}))}doGetChildren(e){let t=this.refreshPromises.get(e);return t||(t=Pa(()=>Qk(this,void 0,void 0,(function*(){const t=yield this.dataSource.getChildren(e.element);return this.processChildren(t)}))),this.refreshPromises.set(e,t),t.finally(()=>{this.refreshPromises.delete(e)}))}_onDidChangeCollapseState({node:e,deep:t}){null!==e.element&&!e.collapsed&&e.element.stale&&(t?this.collapse(e.element.element):this.refreshAndRenderNode(e.element,!1).catch(n))}setChildren(e,t,i,n){const o=[...t];if(0===e.children.length&&0===o.length)return[];const s=new Map,r=new Map;for(const t of e.children)if(s.set(t.element,t),this.identityProvider){const e=this.tree.isCollapsed(t);r.set(t.id,{node:t,collapsed:e})}const a=[],l=o.map(t=>{const o=!!this.dataSource.hasChildren(t);if(!this.identityProvider){const i=Jk({element:t,parent:e,hasChildren:o});return o&&this.collapseByDefault&&!this.collapseByDefault(t)&&(i.collapsedByDefault=!1,a.push(i)),i}const l=this.identityProvider.getId(t).toString(),h=r.get(l);if(h){const e=h.node;return s.delete(e.element),this.nodes.delete(e.element),this.nodes.set(t,e),e.element=t,e.hasChildren=o,i?h.collapsed?(e.children.forEach(e=>hN(e,e=>this.nodes.delete(e.element))),e.children.splice(0,e.children.length),e.stale=!0):a.push(e):o&&this.collapseByDefault&&!this.collapseByDefault(t)&&(e.collapsedByDefault=!1,a.push(e)),e}const c=Jk({element:t,parent:e,id:l,hasChildren:o});return n&&n.viewState.focus&&n.viewState.focus.indexOf(l)>-1&&n.focus.push(c),n&&n.viewState.selection&&n.viewState.selection.indexOf(l)>-1&&n.selection.push(c),n&&n.viewState.expanded&&n.viewState.expanded.indexOf(l)>-1?a.push(c):o&&this.collapseByDefault&&!this.collapseByDefault(t)&&(c.collapsedByDefault=!1,a.push(c)),c});for(const e of s.values())hN(e,e=>this.nodes.delete(e.element));for(const e of l)this.nodes.set(e.element,e);return e.children.splice(0,e.children.length,...l),e!==this.root&&this.autoExpandSingleChildren&&1===l.length&&0===a.length&&(l[0].collapsedByDefault=!1,a.push(l[0])),a}render(e,t,i){const n=e.children.map(e=>this.asTreeElement(e,t)),o=i&&Object.assign(Object.assign({},i),{diffIdentityProvider:i.diffIdentityProvider&&{getId:e=>i.diffIdentityProvider.getId(e.element)}});this.tree.setChildren(e===this.root?null:e,n,o),e!==this.root&&this.tree.setCollapsible(e,e.hasChildren),this._onDidRender.fire()}asTreeElement(e,t){if(e.stale)return{element:e,collapsible:e.hasChildren,collapsed:!0};let i;return i=!(t&&t.viewState.expanded&&e.id&&t.viewState.expanded.indexOf(e.id)>-1)&&e.collapsedByDefault,e.collapsedByDefault=void 0,{element:e,children:e.hasChildren?c.map(e.children,e=>this.asTreeElement(e,t)):[],collapsible:e.hasChildren,collapsed:i}}processChildren(e){return this.sorter&&(e=[...e].sort(this.sorter.compare.bind(this.sorter))),e}dispose(){this.disposables.dispose()}}class dN{constructor(e){this.node=e}get element(){return{elements:this.node.element.elements.map(e=>e.element),incompressible:this.node.element.incompressible}}get children(){return this.node.children.map(e=>new dN(e))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class uN{constructor(e,t,i,n){this.renderer=e,this.nodeMapper=t,this.compressibleNodeMapperProvider=i,this.onDidChangeTwistieState=n,this.renderedNodes=new Map,this.disposables=[],this.templateId=e.templateId}renderTemplate(e){return{templateData:this.renderer.renderTemplate(e)}}renderElement(e,t,i,n){this.renderer.renderElement(this.nodeMapper.map(e),t,i.templateData,n)}renderCompressedElements(e,t,i,n){this.renderer.renderCompressedElements(this.compressibleNodeMapperProvider().map(e),t,i.templateData,n)}renderTwistie(e,t){return e.slow?(t.classList.add(...Lk.classNamesArray),!0):(t.classList.remove(...Lk.classNamesArray),!1)}disposeElement(e,t,i,n){this.renderer.disposeElement&&this.renderer.disposeElement(this.nodeMapper.map(e),t,i.templateData,n)}disposeCompressedElements(e,t,i,n){this.renderer.disposeCompressedElements&&this.renderer.disposeCompressedElements(this.compressibleNodeMapperProvider().map(e),t,i.templateData,n)}disposeTemplate(e){this.renderer.disposeTemplate(e.templateData)}dispose(){this.renderedNodes.clear(),this.disposables=f(this.disposables)}}class gN extends cN{constructor(e,t,i,n,o,s,r={}){super(e,t,i,o,s,r),this.compressionDelegate=n,this.compressibleNodeMapper=new lk(e=>new dN(e)),this.filter=r.filter}createTree(e,t,i,n,o){const s=new kk(i),r=n.map(e=>new uN(e,this.nodeMapper,()=>this.compressibleNodeMapper,this._onDidChangeNodeSlowState.event)),a=function l(e){const t=e&&lN(e);return t&&Object.assign(Object.assign({},t),{keyboardNavigationLabelProvider:t.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},t.keyboardNavigationLabelProvider),{getCompressedNodeKeyboardNavigationLabel:t=>e.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(t.map(e=>e.element))})})}(o)||{};return new Xk(e,t,s,r,a)}asTreeElement(e,t){return Object.assign({incompressible:this.compressionDelegate.isIncompressible(e.element)},super.asTreeElement(e,t))}updateOptions(e={}){this.tree.updateOptions(e)}render(e,t){if(!this.identityProvider)return super.render(e,t);const i=e=>this.identityProvider.getId(e).toString(),n=e=>{const t=new Set;for(const n of e){const e=this.tree.getCompressedTreeNode(n===this.root?null:n);if(e.element)for(const n of e.element.elements)t.add(i(n.element))}return t},o=n(this.tree.getSelection()),s=n(this.tree.getFocus());super.render(e,t);const r=this.getSelection();let a=!1;const l=this.getFocus();let h=!1;const c=e=>{const t=e.element;if(t)for(let e=0;e{const t=function i(e){return"boolean"==typeof e?e?1:0:fk(e)?_k(e.visibility):_k(e)}(this.filter.filter(e,1));if(2===t)throw new Error("Recursive tree visibility not supported in async data compressed trees");return 1===t})),super.processChildren(e)}}class pN extends Wk{constructor(e,t,i,n,o,s={}){super(e,t,i,n,s),this.user=e,this.dataSource=o,this.identityProvider=s.identityProvider}createModel(e,t,i){return new Vk(e,t,i)}}const mN={separatorBorder:uc.transparent};class fN{constructor(e,t,i,n){this.container=e,this.view=t,this.disposable=n,this._cachedVisibleSize=void 0,"number"==typeof i?(this._size=i,this._cachedVisibleSize=void 0,e.classList.add("visible")):(this._size=0,this._cachedVisibleSize=i.cachedVisibleSize)}set size(e){this._size=e}get size(){return this._size}get visible(){return void 0===this._cachedVisibleSize}setVisible(e,t){e!==this.visible&&(e?(this.size=Na(this._cachedVisibleSize,this.viewMinimumSize,this.viewMaximumSize),this._cachedVisibleSize=void 0):(this._cachedVisibleSize="number"==typeof t?t:this.size,this.size=0),this.container.classList.toggle("visible",e),this.view.setVisible&&this.view.setVisible(e))}get minimumSize(){return this.visible?this.view.minimumSize:0}get viewMinimumSize(){return this.view.minimumSize}get maximumSize(){return this.visible?this.view.maximumSize:0}get viewMaximumSize(){return this.view.maximumSize}get priority(){return this.view.priority}get snap(){return!!this.view.snap}set enabled(e){this.container.style.pointerEvents=e?"":"none"}layout(e,t){this.layoutContainer(e),this.view.layout(this.size,e,t)}dispose(){return this.disposable.dispose(),this.view}}class _N extends fN{layoutContainer(e){this.container.style.top=`${e}px`,this.container.style.height=`${this.size}px`}}class bN extends fN{layoutContainer(e){this.container.style.left=`${e}px`,this.container.style.width=`${this.size}px`}}var vN,CN;!function(e){e[e.Idle=0]="Idle",e[e.Busy=1]="Busy"}(vN||(vN={})),function(e){e.Distribute={type:"distribute"},e.Split=function t(e){return{type:"split",index:e}},e.Invisible=function i(e){return{type:"invisible",cachedVisibleSize:e}}}(CN||(CN={}));class wN extends C{constructor(e,t={}){var i,n;super(),this.size=0,this.contentSize=0,this.proportions=void 0,this.viewItems=[],this.sashItems=[],this.state=vN.Idle,this._onDidSashChange=this._register(new oe),this.onDidSashChange=this._onDidSashChange.event,this._onDidSashReset=this._register(new oe),this._startSnappingEnabled=!0,this._endSnappingEnabled=!0,this.orientation=xe(t.orientation)?0:t.orientation,this.inverseAltBehavior=!!t.inverseAltBehavior,this.proportionalLayout=!!xe(t.proportionalLayout)||!!t.proportionalLayout,this.getSashOrthogonalSize=t.getSashOrthogonalSize,this.el=document.createElement("div"),this.el.classList.add("monaco-split-view2"),this.el.classList.add(0===this.orientation?"vertical":"horizontal"),e.appendChild(this.el),this.sashContainer=Mu(this.el,Bu(".sash-container")),this.viewContainer=Bu(".split-view-container"),this.scrollable=new Mb(125,Jd),this.scrollableElement=this._register(new Ub(this.viewContainer,{vertical:0===this.orientation?null!==(i=t.scrollbarVisibility)&&void 0!==i?i:1:2,horizontal:1===this.orientation?null!==(n=t.scrollbarVisibility)&&void 0!==n?n:1:2},this.scrollable)),this._register(this.scrollableElement.onScroll(e=>{this.viewContainer.scrollTop=e.scrollTop,this.viewContainer.scrollLeft=e.scrollLeft})),Mu(this.el,this.scrollableElement.getDomNode()),this.style(t.styles||mN),t.descriptor&&(this.size=t.descriptor.size,t.descriptor.views.forEach((e,t)=>{const i=xe(e.visible)||e.visible?e.size:{type:"invisible",cachedVisibleSize:e.size};this.doAddView(e.view,i,t,!0)}),this.contentSize=this.viewItems.reduce((e,t)=>e+t.size,0),this.saveProportions())}get orthogonalStartSash(){return this._orthogonalStartSash}set orthogonalStartSash(e){for(const t of this.sashItems)t.sash.orthogonalStartSash=e;this._orthogonalStartSash=e}get orthogonalEndSash(){return this._orthogonalEndSash}set orthogonalEndSash(e){for(const t of this.sashItems)t.sash.orthogonalEndSash=e;this._orthogonalEndSash=e}get startSnappingEnabled(){return this._startSnappingEnabled}set startSnappingEnabled(e){this._startSnappingEnabled!==e&&(this._startSnappingEnabled=e,this.updateSashEnablement())}get endSnappingEnabled(){return this._endSnappingEnabled}set endSnappingEnabled(e){this._endSnappingEnabled!==e&&(this._endSnappingEnabled=e,this.updateSashEnablement())}style(e){e.separatorBorder.isTransparent()?(this.el.classList.remove("separator-border"),this.el.style.removeProperty("--separator-border")):(this.el.classList.add("separator-border"),this.el.style.setProperty("--separator-border",e.separatorBorder.toString()))}addView(e,t,i=this.viewItems.length,n){this.doAddView(e,t,i,n)}layout(e,t){const i=Math.max(this.size,this.contentSize);if(this.size=e,this.layoutContext=t,this.proportions)for(let t=0;t1===this.viewItems[e].priority),o=t.filter(e=>2===this.viewItems[e].priority);this.resize(this.viewItems.length-1,e-i,void 0,n,o)}this.distributeEmptySpace(),this.layoutViews()}saveProportions(){this.proportionalLayout&&this.contentSize>0&&(this.proportions=this.viewItems.map(e=>e.size/this.contentSize))}onSashStart({sash:e,start:t,alt:i}){for(const e of this.viewItems)e.enabled=!1;const n=this.sashItems.findIndex(t=>t.sash===e),o=_(Ed(document.body,"keydown")(e=>s(this.sashDragState.current,e.altKey)),Ed(document.body,"keyup")(()=>s(this.sashDragState.current,!1))),s=(e,t)=>{const i=this.viewItems.map(e=>e.size);let s,r,a=Number.NEGATIVE_INFINITY,l=Number.POSITIVE_INFINITY;if(this.inverseAltBehavior&&(t=!t),t)if(n===this.sashItems.length-1){const e=this.viewItems[n];a=(e.minimumSize-e.size)/2,l=(e.maximumSize-e.size)/2}else{const e=this.viewItems[n+1];a=(e.size-e.maximumSize)/2,l=(e.size-e.minimumSize)/2}if(!t){const e=la(n,-1),t=la(n+1,this.viewItems.length),o=e.reduce((e,t)=>e+(this.viewItems[t].minimumSize-i[t]),0),a=e.reduce((e,t)=>e+(this.viewItems[t].viewMaximumSize-i[t]),0),l=0===t.length?Number.POSITIVE_INFINITY:t.reduce((e,t)=>e+(i[t]-this.viewItems[t].minimumSize),0),h=0===t.length?Number.NEGATIVE_INFINITY:t.reduce((e,t)=>e+(i[t]-this.viewItems[t].viewMaximumSize),0),c=Math.max(o,h),d=Math.min(l,a),u=this.findFirstSnapIndex(e),g=this.findFirstSnapIndex(t);if("number"==typeof u){const e=this.viewItems[u],t=Math.floor(e.viewMinimumSize/2);s={index:u,limitDelta:e.visible?c-t:c+t,size:e.size}}if("number"==typeof g){const e=this.viewItems[g],t=Math.floor(e.viewMinimumSize/2);r={index:g,limitDelta:e.visible?d+t:d-t,size:e.size}}}this.sashDragState={start:e,current:e,index:n,sizes:i,minDelta:a,maxDelta:l,alt:t,snapBefore:s,snapAfter:r,disposable:o}};s(t,i)}onSashChange({current:e}){const{index:t,start:i,sizes:n,alt:o,minDelta:s,maxDelta:r,snapBefore:a,snapAfter:l}=this.sashDragState;this.sashDragState.current=e;const h=this.resize(t,e-i,n,void 0,void 0,s,r,a,l);if(o){const e=t===this.sashItems.length-1,i=this.viewItems.map(e=>e.size),n=this.viewItems[e?t:t+1];this.resize(e?t-1:t+1,-h,i,void 0,void 0,n.size-n.maximumSize,n.size-n.minimumSize)}this.distributeEmptySpace(),this.layoutViews()}onSashEnd(e){this._onDidSashChange.fire(e),this.sashDragState.disposable.dispose(),this.saveProportions();for(const e of this.viewItems)e.enabled=!0}onViewChange(e,t){const i=this.viewItems.indexOf(e);i<0||i>=this.viewItems.length||(t=Na(t="number"==typeof t?t:e.size,e.minimumSize,e.maximumSize),this.inverseAltBehavior&&i>0?(this.resize(i-1,Math.floor((e.size-t)/2)),this.distributeEmptySpace(),this.layoutViews()):(e.size=t,this.relayout([i],void 0)))}resizeView(e,t){if(this.state!==vN.Idle)throw new Error("Cant modify splitview");if(this.state=vN.Busy,e<0||e>=this.viewItems.length)return;const i=la(this.viewItems.length).filter(t=>t!==e),n=[...i.filter(e=>1===this.viewItems[e].priority),e],o=i.filter(e=>2===this.viewItems[e].priority),s=this.viewItems[e];t=Na(t=Math.round(t),s.minimumSize,Math.min(s.maximumSize,this.size)),s.size=t,this.relayout(n,o),this.state=vN.Idle}distributeViewSizes(){const e=[];let t=0;for(const i of this.viewItems)i.maximumSize-i.minimumSize>0&&(e.push(i),t+=i.size);const i=Math.floor(t/e.length);for(const t of e)t.size=Na(i,t.minimumSize,t.maximumSize);const n=la(this.viewItems.length),o=n.filter(e=>1===this.viewItems[e].priority),s=n.filter(e=>2===this.viewItems[e].priority);this.relayout(o,s)}getViewSize(e){return e<0||e>=this.viewItems.length?-1:this.viewItems[e].size}doAddView(e,t,i=this.viewItems.length,n){if(this.state!==vN.Idle)throw new Error("Cant modify splitview");this.state=vN.Busy;const o=Bu(".split-view-view");i===this.viewItems.length?this.viewContainer.appendChild(o):this.viewContainer.insertBefore(o,this.viewContainer.children.item(i));const s=_(e.onDidChange(e=>this.onViewChange(a,e)),b(()=>this.viewContainer.removeChild(o)));let r;r="number"==typeof t?t:"split"===t.type?this.getViewSize(t.index)/2:"invisible"===t.type?{cachedVisibleSize:t.cachedVisibleSize}:e.minimumSize;const a=0===this.orientation?new _N(o,e,r,s):new bN(o,e,r,s);if(this.viewItems.splice(i,0,a),this.viewItems.length>1){let e={orthogonalStartSash:this.orthogonalStartSash,orthogonalEndSash:this.orthogonalEndSash};const t=0===this.orientation?new jw(this.sashContainer,{getHorizontalSashTop:e=>this.getSashPosition(e),getHorizontalSashWidth:this.getSashOrthogonalSize},Object.assign(Object.assign({},e),{orientation:1})):new jw(this.sashContainer,{getVerticalSashLeft:e=>this.getSashPosition(e),getVerticalSashHeight:this.getSashOrthogonalSize},Object.assign(Object.assign({},e),{orientation:0})),n=0===this.orientation?e=>({sash:t,start:e.startY,current:e.currentY,alt:e.altKey}):e=>({sash:t,start:e.startX,current:e.currentX,alt:e.altKey}),o=_(ie.map(t.onDidStart,n)(this.onSashStart,this),ie.map(t.onDidChange,n)(this.onSashChange,this),ie.map(t.onDidEnd,()=>this.sashItems.findIndex(e=>e.sash===t))(this.onSashEnd,this),t.onDidReset(()=>{const e=this.sashItems.findIndex(e=>e.sash===t),i=la(e,-1),n=la(e+1,this.viewItems.length),o=this.findFirstSnapIndex(i),s=this.findFirstSnapIndex(n);("number"!=typeof o||this.viewItems[o].visible)&&("number"!=typeof s||this.viewItems[s].visible)&&this._onDidSashReset.fire(e)}),t);this.sashItems.splice(i-1,0,{sash:t,disposable:o})}let l;o.appendChild(e.element),"number"!=typeof t&&"split"===t.type&&(l=[t.index]),n||this.relayout([i],l),this.state=vN.Idle,n||"number"==typeof t||"distribute"!==t.type||this.distributeViewSizes()}relayout(e,t){const i=this.viewItems.reduce((e,t)=>e+t.size,0);this.resize(this.viewItems.length-1,this.size-i,void 0,e,t),this.distributeEmptySpace(),this.layoutViews(),this.saveProportions()}resize(e,t,i=this.viewItems.map(e=>e.size),n,o,s=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,a,l){if(e<0||e>=this.viewItems.length)return 0;const h=la(e,-1),c=la(e+1,this.viewItems.length);if(o)for(const e of o)ca(h,e),ca(c,e);if(n)for(const e of n)da(h,e),da(c,e);const d=h.map(e=>this.viewItems[e]),u=h.map(e=>i[e]),g=c.map(e=>this.viewItems[e]),p=c.map(e=>i[e]),m=h.reduce((e,t)=>e+(this.viewItems[t].minimumSize-i[t]),0),f=h.reduce((e,t)=>e+(this.viewItems[t].maximumSize-i[t]),0),_=0===c.length?Number.POSITIVE_INFINITY:c.reduce((e,t)=>e+(i[t]-this.viewItems[t].minimumSize),0),b=0===c.length?Number.NEGATIVE_INFINITY:c.reduce((e,t)=>e+(i[t]-this.viewItems[t].maximumSize),0),v=Math.max(m,b,s),C=Math.min(_,f,r);let w=!1;if(a){const e=this.viewItems[a.index],i=t>=a.limitDelta;w=i!==e.visible,e.setVisible(i,a.size)}if(!w&&l){const e=this.viewItems[l.index],i=te+t.size,0);let i=this.size-t;const n=la(this.viewItems.length-1,-1),o=n.filter(e=>1===this.viewItems[e].priority),s=n.filter(e=>2===this.viewItems[e].priority);for(const e of s)ca(n,e);for(const e of o)da(n,e);"number"==typeof e&&da(n,e);for(let e=0;0!==i&&ee+t.size,0);let e=0;for(const t of this.viewItems)t.layout(e,this.layoutContext),e+=t.size;this.sashItems.forEach(e=>e.sash.layout()),this.updateSashEnablement(),this.updateScrollableElement()}updateScrollableElement(){this.scrollableElement.setScrollDimensions(0===this.orientation?{height:this.size,scrollHeight:this.contentSize}:{width:this.size,scrollWidth:this.contentSize})}updateSashEnablement(){let e=!1;const t=this.viewItems.map(t=>e=t.size-t.minimumSize>0||e);e=!1;const i=this.viewItems.map(t=>e=t.maximumSize-t.size>0||e),n=[...this.viewItems].reverse();e=!1;const o=n.map(t=>e=t.size-t.minimumSize>0||e).reverse();e=!1;const s=n.map(t=>e=t.maximumSize-t.size>0||e).reverse();let r=0;for(let e=0;e0||this.startSnappingEnabled)?1:h&&t[e]&&(r0)return;if(!e.visible&&e.snap)return t}}dispose(){super.dispose(),this.viewItems.forEach(e=>e.dispose()),this.viewItems=[],this.sashItems.forEach(e=>e.disposable.dispose()),this.sashItems=[]}}class yN{constructor(e,t,i){this.columns=e,this.getColumnSize=i,this.templateId=yN.TemplateId,this.renderedTemplates=new Set;const n=new Map(t.map(e=>[e.templateId,e]));this.renderers=[];for(const t of e){const e=n.get(t.templateId);if(!e)throw new Error(`Table cell renderer for template id ${t.templateId} not found.`);this.renderers.push(e)}}renderTemplate(e){const t=Mu(e,Bu(".monaco-table-tr")),i=[],n=[];for(let e=0;enew SN(e,t)),a={size:r.reduce((e,t)=>e+t.column.weight,0),views:r.map(e=>({size:e.column.weight,view:e}))};this.splitview=new wN(this.domNode,{orientation:1,scrollbarVisibility:2,getSashOrthogonalSize:()=>this.cachedHeight,descriptor:a}),this.splitview.el.style.height=`${i.headerRowHeight}px`,this.splitview.el.style.lineHeight=`${i.headerRowHeight}px`;const l=new yN(n,o,e=>this.splitview.getViewSize(e));this.list=new ik(e,this.domNode,function h(e){return{getHeight:t=>e.getHeight(t),getTemplateId:()=>yN.TemplateId}}(i),[l],s),this.columnLayoutDisposable=ie.any(...r.map(e=>e.onDidLayout))(([e,t])=>l.layoutColumn(e,t)),this.styleElement=Su(this.domNode),this.style({})}get onDidChangeFocus(){return this.list.onDidChangeFocus}get onDidChangeSelection(){return this.list.onDidChangeSelection}get onMouseDblClick(){return this.list.onMouseDblClick}get onPointer(){return this.list.onPointer}get onDidFocus(){return this.list.onDidFocus}get onDidDispose(){return this.list.onDidDispose}updateOptions(e){this.list.updateOptions(e)}splice(e,t,i=[]){this.list.splice(e,t,i)}getHTMLElement(){return this.domNode}style(e){const t=[];t.push(`.monaco-table.${this.domId} > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\ttop: ${this.virtualDelegate.headerRowHeight+1}px;\n\t\t\theight: calc(100% - ${this.virtualDelegate.headerRowHeight}px);\n\t\t}`),this.styleElement.textContent=t.join("\n"),this.list.style(e)}getSelectedElements(){return this.list.getSelectedElements()}setSelection(e,t){this.list.setSelection(e,t)}getSelection(){return this.list.getSelection()}getFocus(){return this.list.getFocus()}dispose(){this.splitview.dispose(),this.list.dispose(),this.columnLayoutDisposable.dispose()}}LN.InstanceCount=0;var DN=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},EN=function(e,t){return function(i,n){t(i,n,e)}};const xN=kt("listService");let kN=class{constructor(e){this._themeService=e,this.disposables=new v,this.lists=[],this._lastFocusedWidget=void 0,this._hasCreatedStyleController=!1}get lastFocusedList(){return this._lastFocusedWidget}register(e,t){if(!this._hasCreatedStyleController){this._hasCreatedStyleController=!0;const e=new Gx(Su(),"");this.disposables.add(CE(e,this._themeService))}if(this.lists.some(t=>t.widget===e))throw new Error("Cannot register the same widget multiple times");const i={widget:e,extraContextKeys:t};return this.lists.push(i),e.getHTMLElement()===document.activeElement&&(this._lastFocusedWidget=e),_(e.onDidFocus(()=>this._lastFocusedWidget=e),b(()=>this.lists.splice(this.lists.indexOf(i),1)),e.onDidDispose(()=>{this.lists=this.lists.filter(e=>e!==i),this._lastFocusedWidget===e&&(this._lastFocusedWidget=void 0)}))}dispose(){this.disposables.dispose()}};kN=DN([EN(0,pn)],kN);const NN=new Ji("listFocus",!0),IN=new Ji("listSupportsMultiselect",!0),TN=Ri.and(NN,Ri.not("inputFocus")),AN=new Ji("listHasSelectionOrFocus",!1),MN=new Ji("listDoubleSelection",!1),ON=new Ji("listMultiSelection",!1),RN=new Ji("listSupportsKeyboardNavigation",!0),PN="listAutomaticKeyboardNavigation",FN=new Ji(PN,!0);let BN=!1;function WN(e,t){const i=e.createScoped(t.getHTMLElement());return NN.bindTo(i),i}const VN="workbench.list.multiSelectModifier",zN="workbench.list.openMode",HN="workbench.list.horizontalScrolling",UN="workbench.list.keyboardNavigation",KN="workbench.list.automaticKeyboardNavigation",$N="workbench.tree.indent",jN="workbench.tree.renderIndentGuides",qN="workbench.list.smoothScrolling",GN="workbench.tree.expandMode";function YN(e){return"alt"===e.getValue(VN)}class ZN extends C{constructor(e){super(),this.configurationService=e,this.useAltAsMultipleSelectionModifier=YN(e),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration(e=>{e.affectsConfiguration(VN)&&(this.useAltAsMultipleSelectionModifier=YN(this.configurationService))}))}isSelectionSingleChangeEvent(e){return this.useAltAsMultipleSelectionModifier?e.browserEvent.altKey:Kx(e)}isSelectionRangeChangeEvent(e){return $x(e)}}function XN(e,t,i){const n=new v,o=Object.assign({},e);if(!1!==e.multipleSelectionSupport&&!e.multipleSelectionController){const e=new ZN(t);o.multipleSelectionController=e,n.add(e)}return o.keyboardNavigationDelegate={mightProducePrintableCharacter:e=>i.mightProducePrintableCharacter(e)},o.smoothScrolling=t.getValue(qN),[o,n]}let QN=class extends ik{constructor(e,t,i,n,o,s,r,a,l,h){const c=void 0!==o.horizontalScrolling?o.horizontalScrolling:l.getValue(HN),[d,u]=XN(o,l,h);super(e,t,i,n,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},bE(a.getColorTheme(),wE)),d),{horizontalScrolling:c})),this.disposables.add(u),this.contextKeyService=WN(s,this),this.themeService=a,IN.bindTo(this.contextKeyService).set(!(!1===o.multipleSelectionSupport)),this.listHasSelectionOrFocus=AN.bindTo(this.contextKeyService),this.listDoubleSelection=MN.bindTo(this.contextKeyService),this.listMultiSelection=ON.bindTo(this.contextKeyService),this.horizontalScrolling=o.horizontalScrolling,this._useAltAsMultipleSelectionModifier=YN(l),this.disposables.add(this.contextKeyService),this.disposables.add(r.register(this)),o.overrideStyles&&this.updateStyles(o.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const e=this.getSelection(),t=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(e.length>0||t.length>0),this.listMultiSelection.set(e.length>1),this.listDoubleSelection.set(2===e.length)})})),this.disposables.add(this.onDidChangeFocus(()=>{const e=this.getSelection(),t=this.getFocus();this.listHasSelectionOrFocus.set(e.length>0||t.length>0)})),this.disposables.add(l.onDidChangeConfiguration(e=>{e.affectsConfiguration(VN)&&(this._useAltAsMultipleSelectionModifier=YN(l));let t={};if(e.affectsConfiguration(HN)&&void 0===this.horizontalScrolling){const e=l.getValue(HN);t=Object.assign(Object.assign({},t),{horizontalScrolling:e})}if(e.affectsConfiguration(qN)){const e=l.getValue(qN);t=Object.assign(Object.assign({},t),{smoothScrolling:e})}Object.keys(t).length>0&&this.updateOptions(t)})),this.navigator=new iI(this,Object.assign({configurationService:l},o)),this.disposables.add(this.navigator)}updateOptions(e){super.updateOptions(e),e.overrideStyles&&this.updateStyles(e.overrideStyles)}updateStyles(e){var t;null===(t=this._styler)||void 0===t||t.dispose(),this._styler=CE(this,this.themeService,e)}dispose(){var e;null===(e=this._styler)||void 0===e||e.dispose(),super.dispose()}};QN=DN([EN(5,en),EN(6,xN),EN(7,pn),EN(8,zL),EN(9,FS)],QN);let JN=class extends class{constructor(e,t,i,n,o={}){const s=()=>this.model,r=n.map(e=>new nk(e,s));this.list=new ik(e,t,i,r,function a(e,t){return Object.assign(Object.assign({},t),{accessibilityProvider:t.accessibilityProvider&&new ok(e,t.accessibilityProvider)})}(s,o))}updateOptions(e){this.list.updateOptions(e)}getHTMLElement(){return this.list.getHTMLElement()}get onDidFocus(){return this.list.onDidFocus}get onDidDispose(){return this.list.onDidDispose}get onMouseDblClick(){return ie.map(this.list.onMouseDblClick,({element:e,index:t,browserEvent:i})=>({element:void 0===e?void 0:this._model.get(e),index:t,browserEvent:i}))}get onPointer(){return ie.map(this.list.onPointer,({element:e,index:t,browserEvent:i})=>({element:void 0===e?void 0:this._model.get(e),index:t,browserEvent:i}))}get onDidChangeFocus(){return ie.map(this.list.onDidChangeFocus,({elements:e,indexes:t,browserEvent:i})=>({elements:e.map(e=>this._model.get(e)),indexes:t,browserEvent:i}))}get onDidChangeSelection(){return ie.map(this.list.onDidChangeSelection,({elements:e,indexes:t,browserEvent:i})=>({elements:e.map(e=>this._model.get(e)),indexes:t,browserEvent:i}))}get model(){return this._model}set model(e){this._model=e,this.list.splice(0,this.list.length,la(e.length))}getFocus(){return this.list.getFocus()}setSelection(e,t){this.list.setSelection(e,t)}getSelection(){return this.list.getSelection()}getSelectedElements(){return this.getSelection().map(e=>this.model.get(e))}style(e){this.list.style(e)}dispose(){this.list.dispose()}}{constructor(e,t,i,n,o,s,r,a,l,h){const c=void 0!==o.horizontalScrolling?o.horizontalScrolling:l.getValue(HN),[d,u]=XN(o,l,h);super(e,t,i,n,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},bE(a.getColorTheme(),wE)),d),{horizontalScrolling:c})),this.disposables=new v,this.disposables.add(u),this.contextKeyService=WN(s,this),this.themeService=a,this.horizontalScrolling=o.horizontalScrolling,IN.bindTo(this.contextKeyService).set(!(!1===o.multipleSelectionSupport)),this._useAltAsMultipleSelectionModifier=YN(l),this.disposables.add(this.contextKeyService),this.disposables.add(r.register(this)),o.overrideStyles&&this.updateStyles(o.overrideStyles),o.overrideStyles&&this.disposables.add(CE(this,a,o.overrideStyles)),this.disposables.add(l.onDidChangeConfiguration(e=>{e.affectsConfiguration(VN)&&(this._useAltAsMultipleSelectionModifier=YN(l));let t={};if(e.affectsConfiguration(HN)&&void 0===this.horizontalScrolling){const e=l.getValue(HN);t=Object.assign(Object.assign({},t),{horizontalScrolling:e})}if(e.affectsConfiguration(qN)){const e=l.getValue(qN);t=Object.assign(Object.assign({},t),{smoothScrolling:e})}Object.keys(t).length>0&&this.updateOptions(t)})),this.navigator=new iI(this,Object.assign({configurationService:l},o)),this.disposables.add(this.navigator)}updateOptions(e){super.updateOptions(e),e.overrideStyles&&this.updateStyles(e.overrideStyles)}updateStyles(e){var t;null===(t=this._styler)||void 0===t||t.dispose(),this._styler=CE(this,this.themeService,e)}dispose(){var e;null===(e=this._styler)||void 0===e||e.dispose(),this.disposables.dispose(),super.dispose()}};JN=DN([EN(5,en),EN(6,xN),EN(7,pn),EN(8,zL),EN(9,FS)],JN);let eI=class extends LN{constructor(e,t,i,n,o,s,r,a,l,h,c){const d=void 0!==s.horizontalScrolling?s.horizontalScrolling:h.getValue(HN),[u,g]=XN(s,h,c);super(e,t,i,n,o,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},bE(l.getColorTheme(),wE)),u),{horizontalScrolling:d})),this.disposables=new v,this.disposables.add(g),this.contextKeyService=WN(r,this),this.themeService=l,IN.bindTo(this.contextKeyService).set(!(!1===s.multipleSelectionSupport)),this.listHasSelectionOrFocus=AN.bindTo(this.contextKeyService),this.listDoubleSelection=MN.bindTo(this.contextKeyService),this.listMultiSelection=ON.bindTo(this.contextKeyService),this.horizontalScrolling=s.horizontalScrolling,this._useAltAsMultipleSelectionModifier=YN(h),this.disposables.add(this.contextKeyService),this.disposables.add(a.register(this)),s.overrideStyles&&this.updateStyles(s.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const e=this.getSelection(),t=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(e.length>0||t.length>0),this.listMultiSelection.set(e.length>1),this.listDoubleSelection.set(2===e.length)})})),this.disposables.add(this.onDidChangeFocus(()=>{const e=this.getSelection(),t=this.getFocus();this.listHasSelectionOrFocus.set(e.length>0||t.length>0)})),this.disposables.add(h.onDidChangeConfiguration(e=>{e.affectsConfiguration(VN)&&(this._useAltAsMultipleSelectionModifier=YN(h));let t={};if(e.affectsConfiguration(HN)&&void 0===this.horizontalScrolling){const e=h.getValue(HN);t=Object.assign(Object.assign({},t),{horizontalScrolling:e})}if(e.affectsConfiguration(qN)){const e=h.getValue(qN);t=Object.assign(Object.assign({},t),{smoothScrolling:e})}Object.keys(t).length>0&&this.updateOptions(t)})),this.navigator=new nI(this,Object.assign({configurationService:h},s)),this.disposables.add(this.navigator)}updateOptions(e){super.updateOptions(e),e.overrideStyles&&this.updateStyles(e.overrideStyles)}updateStyles(e){var t;null===(t=this._styler)||void 0===t||t.dispose(),this._styler=CE(this,this.themeService,e)}dispose(){var e;null===(e=this._styler)||void 0===e||e.dispose(),this.disposables.dispose(),super.dispose()}};eI=DN([EN(6,en),EN(7,xN),EN(8,pn),EN(9,zL),EN(10,FS)],eI);class tI extends C{constructor(e,t){var i,n;super(),this.widget=e,this._onDidOpen=this._register(new oe),this.onDidOpen=this._onDidOpen.event,this.openOnFocus=null!==(i=null==t?void 0:t.openOnFocus)&&void 0!==i&&i,this._register(ie.filter(this.widget.onDidChangeSelection,e=>e.browserEvent instanceof KeyboardEvent)(e=>this.onSelectionFromKeyboard(e))),this._register(this.widget.onPointer(e=>this.onPointer(e.element,e.browserEvent))),this._register(this.widget.onMouseDblClick(e=>this.onMouseDblClick(e.element,e.browserEvent))),this.openOnFocus&&this._register(ie.filter(this.widget.onDidChangeFocus,e=>e.browserEvent instanceof KeyboardEvent)(e=>this.onFocusFromKeyboard(e))),"boolean"!=typeof(null==t?void 0:t.openOnSingleClick)&&(null==t?void 0:t.configurationService)?(this.openOnSingleClick="doubleClick"!==(null==t?void 0:t.configurationService.getValue(zN)),this._register(null==t?void 0:t.configurationService.onDidChangeConfiguration(()=>{this.openOnSingleClick="doubleClick"!==(null==t?void 0:t.configurationService.getValue(zN))}))):this.openOnSingleClick=null===(n=null==t?void 0:t.openOnSingleClick)||void 0===n||n}onFocusFromKeyboard(e){const t=this.widget.getFocus();this.widget.setSelection(t,e.browserEvent);const i=e.browserEvent,n="boolean"!=typeof i.preserveFocus||i.preserveFocus,o="boolean"==typeof i.pinned?i.pinned:!n;this._open(this.getSelectedElement(),n,o,!1,e.browserEvent)}onSelectionFromKeyboard(e){if(1!==e.elements.length)return;const t=e.browserEvent,i="boolean"!=typeof t.preserveFocus||t.preserveFocus,n="boolean"==typeof t.pinned?t.pinned:!i;this._open(this.getSelectedElement(),i,n,!1,e.browserEvent)}onPointer(e,t){this.openOnSingleClick&&2!==t.detail&&this._open(e,!0,1===t.button,t.ctrlKey||t.metaKey||t.altKey,t)}onMouseDblClick(e,t){t&&this._open(e,!1,!0,t.ctrlKey||t.metaKey||t.altKey,t)}_open(e,t,i,n,o){e&&this._onDidOpen.fire({editorOptions:{preserveFocus:t,pinned:i,revealIfVisible:!0},sideBySide:n,element:e,browserEvent:o})}}class iI extends tI{constructor(e,t){super(e,t),this.widget=e}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class nI extends tI{constructor(e,t){super(e,t),this.widget=e}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class oI extends tI{constructor(e,t){super(e,t),this.widget=e}getSelectedElement(){var e;return null!==(e=this.widget.getSelection()[0])&&void 0!==e?e:void 0}}function sI(e,t){let i=!1;return n=>{if(i)return i=!1,!1;const o=t.softDispatch(n,e);return o&&o.enterChord?(i=!0,!1):(i=!1,!0)}}let rI=class extends Yk{constructor(e,t,i,n,o,s,r,a,l,h,c){const{options:d,getAutomaticKeyboardNavigation:u,disposable:g}=dI(t,o,s,l,h,c);super(e,t,i,n,d),this.disposables.add(g),this.internals=new uI(this,o,u,o.overrideStyles,s,r,a,l,c),this.disposables.add(this.internals)}};rI=DN([EN(5,en),EN(6,xN),EN(7,pn),EN(8,zL),EN(9,FS),EN(10,dw)],rI);let aI=class extends Xk{constructor(e,t,i,n,o,s,r,a,l,h,c){const{options:d,getAutomaticKeyboardNavigation:u,disposable:g}=dI(t,o,s,l,h,c);super(e,t,i,n,d),this.disposables.add(g),this.internals=new uI(this,o,u,o.overrideStyles,s,r,a,l,c),this.disposables.add(this.internals)}updateOptions(e={}){super.updateOptions(e),e.overrideStyles&&this.internals.updateStyleOverrides(e.overrideStyles)}};aI=DN([EN(5,en),EN(6,xN),EN(7,pn),EN(8,zL),EN(9,FS),EN(10,dw)],aI);let lI=class extends pN{constructor(e,t,i,n,o,s,r,a,l,h,c,d){const{options:u,getAutomaticKeyboardNavigation:g,disposable:p}=dI(t,s,r,h,c,d);super(e,t,i,n,o,u),this.disposables.add(p),this.internals=new uI(this,s,g,s.overrideStyles,r,a,l,h,d),this.disposables.add(this.internals)}updateOptions(e={}){super.updateOptions(e),e.overrideStyles&&this.internals.updateStyleOverrides(e.overrideStyles)}};lI=DN([EN(6,en),EN(7,xN),EN(8,pn),EN(9,zL),EN(10,FS),EN(11,dw)],lI);let hI=class extends cN{constructor(e,t,i,n,o,s,r,a,l,h,c,d){const{options:u,getAutomaticKeyboardNavigation:g,disposable:p}=dI(t,s,r,h,c,d);super(e,t,i,n,o,u),this.disposables.add(p),this.internals=new uI(this,s,g,s.overrideStyles,r,a,l,h,d),this.disposables.add(this.internals)}get onDidOpen(){return this.internals.onDidOpen}updateOptions(e={}){super.updateOptions(e),e.overrideStyles&&this.internals.updateStyleOverrides(e.overrideStyles)}};hI=DN([EN(6,en),EN(7,xN),EN(8,pn),EN(9,zL),EN(10,FS),EN(11,dw)],hI);let cI=class extends gN{constructor(e,t,i,n,o,s,r,a,l,h,c,d,u){const{options:g,getAutomaticKeyboardNavigation:p,disposable:m}=dI(t,r,a,c,d,u);super(e,t,i,n,o,s,g),this.disposables.add(m),this.internals=new uI(this,r,p,r.overrideStyles,a,l,h,c,u),this.disposables.add(this.internals)}};function dI(e,t,i,n,o,s){var r;RN.bindTo(i),BN||(FN.bindTo(i),BN=!0);const a=()=>{let e=i.getContextKeyValue(PN);return e&&(e=n.getValue(KN)),e},l=s.isScreenReaderOptimized(),h=t.simpleKeyboardNavigation||l?"simple":n.getValue(UN),c=void 0!==t.horizontalScrolling?t.horizontalScrolling:n.getValue(HN),[d,u]=XN(t,n,o),g=t.additionalScrollHeight;return{getAutomaticKeyboardNavigation:a,disposable:u,options:Object.assign(Object.assign({keyboardSupport:!1},d),{indent:n.getValue($N),renderIndentGuides:n.getValue(jN),smoothScrolling:n.getValue(qN),automaticKeyboardNavigation:a(),simpleKeyboardNavigation:"simple"===h,filterOnType:"filter"===h,horizontalScrolling:c,keyboardNavigationEventFilter:sI(e,o),additionalScrollHeight:g,hideTwistiesOfChildlessElements:t.hideTwistiesOfChildlessElements,expandOnlyOnTwistieClick:null!==(r=t.expandOnlyOnTwistieClick)&&void 0!==r?r:"doubleClick"===n.getValue(GN)})}}cI=DN([EN(7,en),EN(8,xN),EN(9,pn),EN(10,zL),EN(11,FS),EN(12,dw)],cI);let uI=class{constructor(e,t,i,n,o,s,r,a,l){this.tree=e,this.themeService=r,this.disposables=[],this.contextKeyService=WN(o,e),IN.bindTo(this.contextKeyService).set(!(!1===t.multipleSelectionSupport)),this.hasSelectionOrFocus=AN.bindTo(this.contextKeyService),this.hasDoubleSelection=MN.bindTo(this.contextKeyService),this.hasMultiSelection=ON.bindTo(this.contextKeyService),this._useAltAsMultipleSelectionModifier=YN(a);const h=new Set;h.add(PN);const c=()=>{const t=l.isScreenReaderOptimized()?"simple":a.getValue(UN);e.updateOptions({simpleKeyboardNavigation:"simple"===t,filterOnType:"filter"===t})};this.updateStyleOverrides(n),this.disposables.push(this.contextKeyService,s.register(e),e.onDidChangeSelection(()=>{const t=e.getSelection(),i=e.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.hasSelectionOrFocus.set(t.length>0||i.length>0),this.hasMultiSelection.set(t.length>1),this.hasDoubleSelection.set(2===t.length)})}),e.onDidChangeFocus(()=>{const t=e.getSelection(),i=e.getFocus();this.hasSelectionOrFocus.set(t.length>0||i.length>0)}),a.onDidChangeConfiguration(n=>{let o={};if(n.affectsConfiguration(VN)&&(this._useAltAsMultipleSelectionModifier=YN(a)),n.affectsConfiguration($N)){const e=a.getValue($N);o=Object.assign(Object.assign({},o),{indent:e})}if(n.affectsConfiguration(jN)){const e=a.getValue(jN);o=Object.assign(Object.assign({},o),{renderIndentGuides:e})}if(n.affectsConfiguration(qN)){const e=a.getValue(qN);o=Object.assign(Object.assign({},o),{smoothScrolling:e})}if(n.affectsConfiguration(UN)&&c(),n.affectsConfiguration(KN)&&(o=Object.assign(Object.assign({},o),{automaticKeyboardNavigation:i()})),n.affectsConfiguration(HN)&&void 0===t.horizontalScrolling){const e=a.getValue(HN);o=Object.assign(Object.assign({},o),{horizontalScrolling:e})}n.affectsConfiguration(GN)&&void 0===t.expandOnlyOnTwistieClick&&(o=Object.assign(Object.assign({},o),{expandOnlyOnTwistieClick:"doubleClick"===a.getValue(GN)})),Object.keys(o).length>0&&e.updateOptions(o)}),this.contextKeyService.onDidChangeContext(t=>{t.affectsSome(h)&&e.updateOptions({automaticKeyboardNavigation:i()})}),l.onDidChangeScreenReaderOptimized(()=>c())),this.navigator=new oI(e,Object.assign({configurationService:a},t)),this.disposables.push(this.navigator)}get onDidOpen(){return this.navigator.onDidOpen}updateStyleOverrides(e){f(this.styler),this.styler=e?CE(this.tree,this.themeService,e):C.None}dispose(){this.disposables=f(this.disposables),f(this.styler),this.styler=void 0}};uI=DN([EN(4,en),EN(5,xN),EN(6,pn),EN(7,zL),EN(8,dw)],uI),an.as(lg.Configuration).registerConfiguration({id:"workbench",order:7,title:t(0,"Workbench"),type:"object",properties:{[VN]:{type:"string",enum:["ctrlCmd","alt"],enumDescriptions:[t(0,"Maps to `Control` on Windows and Linux and to `Command` on macOS."),t(0,"Maps to `Alt` on Windows and Linux and to `Option` on macOS.")],default:"ctrlCmd",description:t(0,"The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.")},[zN]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:t(0,"Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.")},[HN]:{type:"boolean",default:!1,description:t(0,"Controls whether lists and trees support horizontal scrolling in the workbench. Warning: turning on this setting has a performance implication.")},[$N]:{type:"number",default:8,minimum:0,maximum:40,description:t(0,"Controls tree indentation in pixels.")},[jN]:{type:"string",enum:["none","onHover","always"],default:"onHover",description:t(0,"Controls whether the tree should render indent guides.")},[qN]:{type:"boolean",default:!1,description:t(0,"Controls whether lists and trees have smooth scrolling.")},[UN]:{type:"string",enum:["simple","highlight","filter"],enumDescriptions:[t(0,"Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes."),t(0,"Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements."),t(0,"Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.")],default:"highlight",description:t(0,"Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter.")},[KN]:{type:"boolean",default:!0,markdownDescription:t(0,"Controls whether keyboard navigation in lists and trees is automatically triggered simply by typing. If set to `false`, keyboard navigation is only triggered when executing the `list.toggleKeyboardNavigation` command, for which you can assign a keyboard shortcut.")},[GN]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:t(0,"Controls how tree folders are expanded when clicking the folder names. Note that some trees and lists might choose to ignore this setting if it is not applicable.")}}});const gI=kt("undoRedoService");class pI{constructor(e,t){this.resource=e,this.elements=t}}class mI{constructor(){this.id=mI._ID++,this.order=1}nextOrder(){return 0===this.id?0:this.order++}}mI._ID=0,mI.None=new mI;class fI{constructor(){this.id=fI._ID++,this.order=1}nextOrder(){return 0===this.id?0:this.order++}}fI._ID=0,fI.None=new fI;var _I=function(e,t){return function(i,n){t(i,n,e)}},bI=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class vI{constructor(e,t){this._editor=e,this._model=t,this._decorations=new Map,this._decorationIgnoreSet=new Set,this._callOnDispose=new v,this._callOnModelChange=new v,this._callOnDispose.add(this._editor.onDidChangeModel(()=>this._onModelChanged())),this._onModelChanged()}dispose(){this._callOnModelChange.dispose(),this._callOnDispose.dispose(),this.removeDecorations()}_onModelChanged(){this._callOnModelChange.clear();const e=this._editor.getModel();if(e)for(let t of this._model.references)if(t.uri.toString()===e.uri.toString())return void this._addDecorations(t.parent)}_addDecorations(e){if(!this._editor.hasModel())return;this._callOnModelChange.add(this._editor.getModel().onDidChangeDecorations(()=>this._onDecorationChanged()));const t=[],i=[];for(let n=0,o=e.children.length;n{e.equals(9)&&(this._keybindingService.dispatchEvent(e,e.target),e.stopPropagation())},!0)),this._tree=this._instantiationService.createInstance(CI,"ReferencesWidget",this._treeContainer,new dx,[this._instantiationService.createInstance(mx),this._instantiationService.createInstance(_x)],this._instantiationService.createInstance(cx),i),this._splitView.addView({onDidChange:ie.None,element:this._previewContainer,minimumSize:200,maximumSize:Number.MAX_VALUE,layout:e=>{this._preview.layout({height:this._dim.height,width:e})}},CN.Distribute),this._splitView.addView({onDidChange:ie.None,element:this._treeContainer,minimumSize:100,maximumSize:Number.MAX_VALUE,layout:e=>{this._treeContainer.style.height=`${this._dim.height}px`,this._treeContainer.style.width=`${e}px`,this._tree.layout(this._dim.height,e)}},CN.Distribute),this._disposables.add(this._splitView.onDidSashChange(()=>{this._dim.width&&(this.layoutData.ratio=this._splitView.getViewSize(0)/this._dim.width)},void 0));let n=(e,t)=>{e instanceof sE&&("show"===t&&this._revealReference(e,!1),this._onDidSelectReference.fire({element:e,kind:t,source:"tree"}))};this._tree.onDidOpen(e=>{n(e.element,e.sideBySide?"side":e.editorOptions.pinned?"goto":"show")}),Vu(this._treeContainer)}_onWidth(e){this._dim&&this._doLayoutBody(this._dim.height,e)}_doLayoutBody(e,t){super._doLayoutBody(e,t),this._dim=new hu(t,e),this.layoutData.heightInLines=this._viewZone?this._viewZone.heightInLines:this.layoutData.heightInLines,this._splitView.layout(t),this._splitView.resizeView(0,t*this.layoutData.ratio)}setSelection(e){return this._revealReference(e,!0).then(()=>{this._model&&(this._tree.setSelection([e]),this._tree.setFocus([e]))})}setModel(e){return this._disposeOnNewModel.clear(),this._model=e,this._model?this._onNewModel():Promise.resolve()}_onNewModel(){return this._model?this._model.isEmpty?(this.setTitle(""),this._messageContainer.innerText=t(0,"No results"),Wu(this._messageContainer),Promise.resolve(void 0)):(Vu(this._messageContainer),this._decorationsManager=new vI(this._preview,this._model),this._disposeOnNewModel.add(this._decorationsManager),this._disposeOnNewModel.add(this._model.onDidChangeReferenceRange(e=>this._tree.rerender(e))),this._disposeOnNewModel.add(this._preview.onMouseDown(e=>{const{event:t,target:i}=e;if(2!==t.detail)return;const n=this._getFocusedReference();n&&this._onDidSelectReference.fire({element:{uri:n.uri,range:i.range},kind:t.ctrlKey||t.metaKey||t.altKey?"side":"open",source:"editor"})})),this.container.classList.add("results-loaded"),Wu(this._treeContainer),Wu(this._previewContainer),this._splitView.layout(this._dim.width),this.focusOnReferenceTree(),this._tree.setInput(1===this._model.groups.length?this._model.groups[0]:this._model)):Promise.resolve(void 0)}_getFocusedReference(){const[e]=this._tree.getFocus();return e instanceof sE?e:e instanceof aE&&e.children.length>0?e.children[0]:void 0}revealReference(e){return bI(this,void 0,void 0,(function*(){yield this._revealReference(e,!1),this._onDidSelectReference.fire({element:e,kind:"goto",source:"tree"})}))}_revealReference(e,i){return bI(this,void 0,void 0,(function*(){if(this._revealedReference===e)return;this._revealedReference=e,e.uri.scheme!==Cs.inMemory?this.setTitle(Es(e.uri),this._uriLabel.getUriLabel(ks(e.uri))):this.setTitle(t(0,"References"));const n=this._textModelResolverService.createModelReference(e.uri);this._tree.getInput()===e.parent?this._tree.reveal(e):(i&&this._tree.reveal(e.parent),yield this._tree.expand(e.parent),this._tree.reveal(e));const o=yield n;if(!this._model)return void o.dispose();f(this._previewModelReference);const s=o.object;if(s){const t=this._preview.getModel()===s.textEditorModel?0:1,i=ro.lift(e.range).collapseToStart();this._previewModelReference=o,this._preview.setModel(s.textEditorModel),this._preview.setSelection(i),this._preview.revealRangeInCenter(i,t)}else this._preview.setModel(this._previewNotAvailableMessage),o.dispose()}))}};wI=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([_I(3,pn),_I(4,Ot),_I(5,Et),_I(6,BD),_I(7,_E),_I(8,gI),_I(9,FS)],wI),Cn((e,t)=>{const i=e.getColor(eE);i&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { background-color: ${i}; }`);const n=e.getColor(tE);n&&t.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { background-color: ${n}; }`);const o=e.getColor(iE);o&&t.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { border: 2px solid ${o}; box-sizing: border-box; }`);const s=e.getColor(rm);s&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { border: 1px dotted ${s}; box-sizing: border-box; }`);const r=e.getColor(qD);r&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree { background-color: ${r}; }`);const a=e.getColor(GD);a&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree { color: ${a}; }`);const l=e.getColor(YD);l&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .reference-file { color: ${l}; }`);const h=e.getColor(ZD);h&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { background-color: ${h}; }`);const c=e.getColor(XD);c&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { color: ${c} !important; }`);const d=e.getColor(QD);d&&t.addRule(".monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input {"+`\tbackground-color: ${d};`+"}");const u=e.getColor(JD);u&&t.addRule(".monaco-editor .reference-zone-widget .preview .monaco-editor .margin {"+`\tbackground-color: ${u};`+"}")});var yI=function(e,t){return function(i,n){t(i,n,e)}},SI=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const LI=new Ji("referenceSearchVisible",!1);let DI=class e{constructor(e,t,i,n,o,s,r,a){this._defaultTreeKeyboardSupport=e,this._editor=t,this._editorService=n,this._notificationService=o,this._instantiationService=s,this._storageService=r,this._configurationService=a,this._disposables=new v,this._requestIdPool=0,this._ignoreModelChangeEvent=!1,this._referenceSearchVisible=LI.bindTo(i)}static get(t){return t.getContribution(e.ID)}dispose(){var e,t;this._referenceSearchVisible.reset(),this._disposables.dispose(),null===(e=this._widget)||void 0===e||e.dispose(),null===(t=this._model)||void 0===t||t.dispose(),this._widget=void 0,this._model=void 0}toggleWidget(e,i,n){let o;if(this._widget&&(o=this._widget.position),this.closeWidget(),o&&e.containsPosition(o))return;this._peekMode=n,this._referenceSearchVisible.set(!0),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>{this.closeWidget()})),this._disposables.add(this._editor.onDidChangeModel(()=>{this._ignoreModelChangeEvent||this.closeWidget()}));const s=class{constructor(){this.ratio=.7,this.heightInLines=18}static fromJSON(e){let t,i;try{const n=JSON.parse(e);t=n.ratio,i=n.heightInLines}catch(e){}return{ratio:t||.7,heightInLines:i||18}}}.fromJSON(this._storageService.get("peekViewLayout",0,"{}"));this._widget=this._instantiationService.createInstance(wI,this._editor,this._defaultTreeKeyboardSupport,s),this._widget.setTitle(t(0,"Loading...")),this._widget.show(e),this._disposables.add(this._widget.onDidClose(()=>{i.cancel(),this._widget&&(this._storageService.store("peekViewLayout",JSON.stringify(this._widget.layoutData),0,1),this._widget=void 0),this.closeWidget()})),this._disposables.add(this._widget.onDidSelectReference(e=>{let{element:t,kind:i}=e;if(t)switch(i){case"open":"editor"===e.source&&this._configurationService.getValue("editor.stablePeek")||this.openReference(t,!1,!1);break;case"side":this.openReference(t,!0,!1);break;case"goto":n?this._gotoReference(t):this.openReference(t,!1,!0)}}));const r=++this._requestIdPool;i.then(i=>{var n;if(r===this._requestIdPool&&this._widget)return null===(n=this._model)||void 0===n||n.dispose(),this._model=i,this._widget.setModel(this._model).then(()=>{if(this._widget&&this._model&&this._editor.hasModel()){this._widget.setMetaTitle(this._model.isEmpty?"":t(0,"{0} ({1})",this._model.title,this._model.references.length));let i=this._editor.getModel().uri,n=new Tt(e.startLineNumber,e.startColumn),o=this._model.nearestReference(i,n);if(o)return this._widget.setSelection(o).then(()=>{this._widget&&"editor"===this._editor.getOption(73)&&this._widget.focusOnPreviewEditor()})}});i.dispose()},e=>{this._notificationService.error(e)})}changeFocusBetweenPreviewAndReferences(){this._widget&&(this._widget.isPreviewEditorFocused()?this._widget.focusOnReferenceTree():this._widget.focusOnPreviewEditor())}goToNextOrPreviousReference(e){return SI(this,void 0,void 0,(function*(){if(!this._editor.hasModel()||!this._model||!this._widget)return;const t=this._widget.position;if(!t)return;const i=this._model.nearestReference(this._editor.getModel().uri,t);if(!i)return;const n=this._model.nextOrPreviousReference(i,e),o=this._editor.hasTextFocus(),s=this._widget.isPreviewEditorFocused();yield this._widget.setSelection(n),yield this._gotoReference(n),o?this._editor.focus():this._widget&&s&&this._widget.focusOnPreviewEditor()}))}revealReference(e){return SI(this,void 0,void 0,(function*(){this._editor.hasModel()&&this._model&&this._widget&&(yield this._widget.revealReference(e))}))}closeWidget(e=!0){var t,i;null===(t=this._widget)||void 0===t||t.dispose(),null===(i=this._model)||void 0===i||i.dispose(),this._referenceSearchVisible.reset(),this._disposables.clear(),this._widget=void 0,this._model=void 0,e&&this._editor.focus(),this._requestIdPool+=1}_gotoReference(t){this._widget&&this._widget.hide(),this._ignoreModelChangeEvent=!0;const i=ro.lift(t.range).collapseToStart();return this._editorService.openCodeEditor({resource:t.uri,options:{selection:i}},this._editor).then(t=>{var n;if(this._ignoreModelChangeEvent=!1,t&&this._widget)if(this._editor===t)this._widget.show(i),this._widget.focusOnReferenceTree();else{const o=e.get(t),s=this._model.clone();this.closeWidget(),t.focus(),o.toggleWidget(i,Pa(e=>Promise.resolve(s)),null!==(n=this._peekMode)&&void 0!==n&&n)}else this.closeWidget()},e=>{this._ignoreModelChangeEvent=!1,n(e)})}openReference(e,t,i){t||this.closeWidget();const{uri:n,range:o}=e;this._editorService.openCodeEditor({resource:n,options:{selection:o,pinned:i}},this._editor,t)}};function EI(e,t){const i=function n(e){let t=e.get(It).getFocusedCodeEditor();return t instanceof CD?t.getParentEditor():t}(e);if(!i)return;let o=DI.get(i);o&&t(o)}DI.ID="editor.contrib.referencesController",DI=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([yI(2,en),yI(3,It),yI(4,cw),yI(5,Et),yI(6,kL),yI(7,zL)],DI),Hn.registerCommandAndKeybindingRule({id:"togglePeekWidgetFocus",weight:100,primary:On(2089,60),when:Ri.or(LI,WD.inPeekEditor),handler(e){EI(e,e=>{e.changeFocusBetweenPreviewAndReferences()})}}),Hn.registerCommandAndKeybindingRule({id:"goToNextReference",weight:90,primary:62,secondary:[70],when:Ri.or(LI,WD.inPeekEditor),handler(e){EI(e,e=>{e.goToNextOrPreviousReference(!0)})}}),Hn.registerCommandAndKeybindingRule({id:"goToPreviousReference",weight:90,primary:1086,secondary:[1094],when:Ri.or(LI,WD.inPeekEditor),handler(e){EI(e,e=>{e.goToNextOrPreviousReference(!1)})}}),sn.registerCommandAlias("goToNextReferenceFromEmbeddedEditor","goToNextReference"),sn.registerCommandAlias("goToPreviousReferenceFromEmbeddedEditor","goToPreviousReference"),sn.registerCommandAlias("closeReferenceSearchEditor","closeReferenceSearch"),sn.registerCommand("closeReferenceSearch",e=>EI(e,e=>e.closeWidget())),Hn.registerKeybindingRule({id:"closeReferenceSearch",weight:-1,primary:9,secondary:[1033],when:Ri.and(WD.inPeekEditor,Ri.not("config.editor.stablePeek"))}),Hn.registerKeybindingRule({id:"closeReferenceSearch",weight:250,primary:9,secondary:[1033],when:Ri.and(LI,Ri.not("config.editor.stablePeek"))}),Hn.registerCommandAndKeybindingRule({id:"revealReference",weight:200,primary:3,mac:{primary:3,secondary:[2066]},when:Ri.and(LI,TN),handler(e){var t;const i=null===(t=e.get(xN).lastFocusedList)||void 0===t?void 0:t.getFocus();Array.isArray(i)&&i[0]instanceof sE&&EI(e,e=>e.revealReference(i[0]))}}),Hn.registerCommandAndKeybindingRule({id:"openReferenceToSide",weight:100,primary:2051,mac:{primary:259},when:Ri.and(LI,TN),handler(e){var t;const i=null===(t=e.get(xN).lastFocusedList)||void 0===t?void 0:t.getFocus();Array.isArray(i)&&i[0]instanceof sE&&EI(e,e=>e.openReference(i[0],!0,!0))}}),sn.registerCommand("openReference",e=>{var t;const i=null===(t=e.get(xN).lastFocusedList)||void 0===t?void 0:t.getFocus();Array.isArray(i)&&i[0]instanceof sE&&EI(e,e=>e.openReference(i[0],!1,!0))});var xI=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function kI(e,t,i,n){const s=i.ordered(e).map(i=>Promise.resolve(n(i,e,t)).then(void 0,e=>{o(e)}));return Promise.all(s).then(e=>{const t=[];for(let i of e)Array.isArray(i)?t.push(...i):i&&t.push(i);return t})}function NI(e,t,i){return kI(e,t,Wl,(e,t,n)=>e.provideDefinition(t,n,i))}function II(e,t,i){return kI(e,t,Vl,(e,t,n)=>e.provideDeclaration(t,n,i))}function TI(e,t,i){return kI(e,t,zl,(e,t,n)=>e.provideImplementation(t,n,i))}function AI(e,t,i){return kI(e,t,Hl,(e,t,n)=>e.provideTypeDefinition(t,n,i))}function MI(e,t,i,n){return kI(e,t,Tl,(e,t,o)=>xI(this,void 0,void 0,(function*(){const s=yield e.provideReferences(t,o,{includeDeclaration:!0},n);if(!i||!s||2!==s.length)return s;const r=yield e.provideReferences(t,o,{includeDeclaration:!1},n);return r&&1===r.length?r:s})))}Zn("_executeDefinitionProvider",(e,t)=>NI(e,t,Aa.None)),Zn("_executeDeclarationProvider",(e,t)=>II(e,t,Aa.None)),Zn("_executeImplementationProvider",(e,t)=>TI(e,t,Aa.None)),Zn("_executeTypeDefinitionProvider",(e,t)=>AI(e,t,Aa.None)),Zn("_executeReferenceProvider",(e,t)=>MI(e,t,!1,Aa.None));var OI=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},RI=function(e,t){return function(i,n){t(i,n,e)}};const PI=new Ji("hasSymbols",!1),FI=kt("ISymbolNavigationService");let BI=class{constructor(e,t,i,n){this._editorService=t,this._notificationService=i,this._keybindingService=n,this._currentModel=void 0,this._currentIdx=-1,this._ignoreEditorChange=!1,this._ctxHasSymbols=PI.bindTo(e)}reset(){var e,t;this._ctxHasSymbols.reset(),null===(e=this._currentState)||void 0===e||e.dispose(),null===(t=this._currentMessage)||void 0===t||t.dispose(),this._currentModel=void 0,this._currentIdx=-1}put(e){const t=e.parent.parent;if(t.references.length<=1)return void this.reset();this._currentModel=t,this._currentIdx=t.references.indexOf(e),this._ctxHasSymbols.set(!0),this._showMessage();const i=new WI(this._editorService),n=i.onDidChange(e=>{if(this._ignoreEditorChange)return;const i=this._editorService.getActiveCodeEditor();if(!i)return;const n=i.getModel(),o=i.getPosition();if(!n||!o)return;let s=!1,r=!1;for(const e of t.references)if(Ds(e.uri,n.uri))s=!0,r=r||ro.containsPosition(e.range,o);else if(s)break;s&&r||this.reset()});this._currentState=_(i,n)}revealNext(e){if(!this._currentModel)return Promise.resolve();this._currentIdx+=1,this._currentIdx%=this._currentModel.references.length;const t=this._currentModel.references[this._currentIdx];return this._showMessage(),this._ignoreEditorChange=!0,this._editorService.openCodeEditor({resource:t.uri,options:{selection:ro.collapseToStart(t.range),selectionRevealType:3}},e).finally(()=>{this._ignoreEditorChange=!1})}_showMessage(){var e;null===(e=this._currentMessage)||void 0===e||e.dispose();const i=this._keybindingService.lookupKeybinding("editor.gotoNextSymbolFromResult"),n=i?t(0,"Symbol {0} of {1}, {2} for next",this._currentIdx+1,this._currentModel.references.length,i.getLabel()):t(0,"Symbol {0} of {1}",this._currentIdx+1,this._currentModel.references.length);this._currentMessage=this._notificationService.status(n)}};BI=OI([RI(0,en),RI(1,It),RI(2,cw),RI(3,FS)],BI),Yw(FI,BI,!0),Xn(new class extends Gn{constructor(){super({id:"editor.gotoNextSymbolFromResult",precondition:PI,kbOpts:{weight:100,primary:70}})}runEditorCommand(e,t){return e.get(FI).revealNext(t)}}),Hn.registerCommandAndKeybindingRule({id:"editor.gotoNextSymbolFromResult.cancel",weight:100,when:PI,primary:9,handler(e){e.get(FI).reset()}});let WI=class{constructor(e){this._listener=new Map,this._disposables=new v,this._onDidChange=new oe,this.onDidChange=this._onDidChange.event,this._disposables.add(e.onCodeEditorRemove(this._onDidRemoveEditor,this)),this._disposables.add(e.onCodeEditorAdd(this._onDidAddEditor,this)),e.listCodeEditors().forEach(this._onDidAddEditor,this)}dispose(){this._disposables.dispose(),this._onDidChange.dispose(),f(this._listener.values())}_onDidAddEditor(e){this._listener.set(e,_(e.onDidChangeCursorPosition(t=>this._onDidChange.fire({editor:e})),e.onDidChangeModelContent(t=>this._onDidChange.fire({editor:e}))))}_onDidRemoveEditor(e){var t;null===(t=this._listener.get(e))||void 0===t||t.dispose(),this._listener.delete(e)}};WI=OI([RI(0,It)],WI);var VI,zI,HI,UI,KI,$I,jI,qI,GI=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};En.appendMenuItem(Ln.EditorContext,{submenu:Ln.EditorContextPeek,title:t(0,"Peek"),group:"navigation",order:100});class YI extends Yn{constructor(e,t){super(t),this._configuration=e}run(e,t){if(!t.hasModel())return Promise.resolve(void 0);const i=e.get(cw),n=e.get(It),o=e.get(Iy),s=e.get(FI),r=t.getModel(),a=t.getPosition(),l=new ey(t,5),h=Fa(this._getLocationModel(r,a,l.token),l.token).then(e=>GI(this,void 0,void 0,(function*(){if(!e||l.token.isCancellationRequested)return;let i;if(MS(e.ariaMessage),e.referenceAt(r.uri,a)){const e=this._getAlternativeCommand(t);e!==this.id&&(i=t.getAction(e))}const o=e.references.length;if(0===o){if(!this._configuration.muteMessage){const e=r.getWordAtPosition(a);RS.get(t).showMessage(this._getNoResultFoundMessage(e),a)}}else{if(1!==o||!i)return this._onResult(n,s,t,e);i.run()}})),e=>{i.error(e)}).finally(()=>{l.dispose()});return o.showWhile(h,250),h}_onResult(e,t,i,n){return GI(this,void 0,void 0,(function*(){const o=this._getGoToPreference(i);if(i instanceof CD||!(this._configuration.openInPeek||"peek"===o&&n.references.length>1)){const s=n.firstReference(),r=n.references.length>1&&"gotoAndPeek"===o,a=yield this._openReference(i,e,s,this._configuration.openToSide,!r);r&&a?this._openInPeek(a,n):n.dispose(),"goto"===o&&t.put(s)}else this._openInPeek(i,n)}))}_openReference(e,t,i,n,o){return GI(this,void 0,void 0,(function*(){let s=void 0;if(function r(e){return e&&mt.isUri(e.uri)&&ro.isIRange(e.range)&&(ro.isIRange(e.originSelectionRange)||ro.isIRange(e.targetSelectionRange))}(i)&&(s=i.targetSelectionRange),s||(s=i.range),!s)return;const a=yield t.openCodeEditor({resource:i.uri,options:{selection:ro.collapseToStart(s),selectionRevealType:3}},e,n);if(a){if(o){const e=a.getModel(),t=a.deltaDecorations([],[{range:s,options:{className:"symbolHighlight"}}]);setTimeout(()=>{a.getModel()===e&&a.deltaDecorations(t,[])},350)}return a}}))}_openInPeek(e,t){let i=DI.get(e);i&&e.hasModel()?i.toggleWidget(e.getSelection(),Pa(e=>Promise.resolve(t)),this._configuration.openInPeek):t.dispose()}}class ZI extends YI{_getLocationModel(e,i,n){return GI(this,void 0,void 0,(function*(){return new lE(yield NI(e,i,n),t(0,"Definitions"))}))}_getNoResultFoundMessage(e){return e&&e.word?t(0,"No definition found for '{0}'",e.word):t(0,"No definition found")}_getAlternativeCommand(e){return e.getOption(45).alternativeDefinitionCommand}_getGoToPreference(e){return e.getOption(45).multipleDefinitions}}const XI=$&&!ye?2118:70;Qn(((VI=class e extends ZI{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.id,label:t(0,"Go to Definition"),alias:"Go to Definition",precondition:Ri.and(cd.hasDefinitionProvider,cd.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:cd.editorTextFocus,primary:XI,weight:100},contextMenuOpts:{group:"navigation",order:1.1},menuOpts:{menuId:Ln.MenubarGoMenu,group:"4_symbol_nav",order:2,title:t(0,"Go to &&Definition")}}),sn.registerCommandAlias("editor.action.goToDeclaration",e.id)}}).id="editor.action.revealDefinition",VI)),Qn(((zI=class e extends ZI{constructor(){super({openToSide:!0,openInPeek:!1,muteMessage:!1},{id:e.id,label:t(0,"Open Definition to the Side"),alias:"Open Definition to the Side",precondition:Ri.and(cd.hasDefinitionProvider,cd.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:cd.editorTextFocus,primary:On(2089,XI),weight:100}}),sn.registerCommandAlias("editor.action.openDeclarationToTheSide",e.id)}}).id="editor.action.revealDefinitionAside",zI)),Qn(((HI=class e extends ZI{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:e.id,label:t(0,"Peek Definition"),alias:"Peek Definition",precondition:Ri.and(cd.hasDefinitionProvider,WD.notInPeekEditor,cd.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:cd.editorTextFocus,primary:582,linux:{primary:3140},weight:100},contextMenuOpts:{menuId:Ln.EditorContextPeek,group:"peek",order:2}}),sn.registerCommandAlias("editor.action.previewDeclaration",e.id)}}).id="editor.action.peekDefinition",HI));class QI extends YI{_getLocationModel(e,i,n){return GI(this,void 0,void 0,(function*(){return new lE(yield II(e,i,n),t(0,"Declarations"))}))}_getNoResultFoundMessage(e){return e&&e.word?t(0,"No declaration found for '{0}'",e.word):t(0,"No declaration found")}_getAlternativeCommand(e){return e.getOption(45).alternativeDeclarationCommand}_getGoToPreference(e){return e.getOption(45).multipleDeclarations}}Qn(((UI=class e extends QI{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.id,label:t(0,"Go to Declaration"),alias:"Go to Declaration",precondition:Ri.and(cd.hasDeclarationProvider,cd.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{group:"navigation",order:1.3},menuOpts:{menuId:Ln.MenubarGoMenu,group:"4_symbol_nav",order:3,title:t(0,"Go to &&Declaration")}})}_getNoResultFoundMessage(e){return e&&e.word?t(0,"No declaration found for '{0}'",e.word):t(0,"No declaration found")}}).id="editor.action.revealDeclaration",UI)),Qn(class extends QI{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.peekDeclaration",label:t(0,"Peek Declaration"),alias:"Peek Declaration",precondition:Ri.and(cd.hasDeclarationProvider,WD.notInPeekEditor,cd.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:Ln.EditorContextPeek,group:"peek",order:3}})}});class JI extends YI{_getLocationModel(e,i,n){return GI(this,void 0,void 0,(function*(){return new lE(yield AI(e,i,n),t(0,"Type Definitions"))}))}_getNoResultFoundMessage(e){return e&&e.word?t(0,"No type definition found for '{0}'",e.word):t(0,"No type definition found")}_getAlternativeCommand(e){return e.getOption(45).alternativeTypeDefinitionCommand}_getGoToPreference(e){return e.getOption(45).multipleTypeDefinitions}}Qn(((KI=class e extends JI{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.ID,label:t(0,"Go to Type Definition"),alias:"Go to Type Definition",precondition:Ri.and(cd.hasTypeDefinitionProvider,cd.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:cd.editorTextFocus,primary:0,weight:100},contextMenuOpts:{group:"navigation",order:1.4},menuOpts:{menuId:Ln.MenubarGoMenu,group:"4_symbol_nav",order:3,title:t(0,"Go to &&Type Definition")}})}}).ID="editor.action.goToTypeDefinition",KI)),Qn((($I=class e extends JI{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:e.ID,label:t(0,"Peek Type Definition"),alias:"Peek Type Definition",precondition:Ri.and(cd.hasTypeDefinitionProvider,WD.notInPeekEditor,cd.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:Ln.EditorContextPeek,group:"peek",order:4}})}}).ID="editor.action.peekTypeDefinition",$I));class eT extends YI{_getLocationModel(e,i,n){return GI(this,void 0,void 0,(function*(){return new lE(yield TI(e,i,n),t(0,"Implementations"))}))}_getNoResultFoundMessage(e){return e&&e.word?t(0,"No implementation found for '{0}'",e.word):t(0,"No implementation found")}_getAlternativeCommand(e){return e.getOption(45).alternativeImplementationCommand}_getGoToPreference(e){return e.getOption(45).multipleImplementations}}Qn(((jI=class e extends eT{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.ID,label:t(0,"Go to Implementations"),alias:"Go to Implementations",precondition:Ri.and(cd.hasImplementationProvider,cd.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:cd.editorTextFocus,primary:2118,weight:100},menuOpts:{menuId:Ln.MenubarGoMenu,group:"4_symbol_nav",order:4,title:t(0,"Go to &&Implementations")},contextMenuOpts:{group:"navigation",order:1.45}})}}).ID="editor.action.goToImplementation",jI)),Qn(((qI=class e extends eT{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:e.ID,label:t(0,"Peek Implementations"),alias:"Peek Implementations",precondition:Ri.and(cd.hasImplementationProvider,WD.notInPeekEditor,cd.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:cd.editorTextFocus,primary:3142,weight:100},contextMenuOpts:{menuId:Ln.EditorContextPeek,group:"peek",order:5}})}}).ID="editor.action.peekImplementation",qI));class tT extends YI{_getNoResultFoundMessage(e){return e?t(0,"No references found for '{0}'",e.word):t(0,"No references found")}_getAlternativeCommand(e){return e.getOption(45).alternativeReferenceCommand}_getGoToPreference(e){return e.getOption(45).multipleReferences}}Qn(class extends tT{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:"editor.action.goToReferences",label:t(0,"Go to References"),alias:"Go to References",precondition:Ri.and(cd.hasReferenceProvider,WD.notInPeekEditor,cd.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:cd.editorTextFocus,primary:1094,weight:100},contextMenuOpts:{group:"navigation",order:1.45},menuOpts:{menuId:Ln.MenubarGoMenu,group:"4_symbol_nav",order:5,title:t(0,"Go to &&References")}})}_getLocationModel(e,i,n){return GI(this,void 0,void 0,(function*(){return new lE(yield MI(e,i,!0,n),t(0,"References"))}))}}),Qn(class extends tT{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.referenceSearch.trigger",label:t(0,"Peek References"),alias:"Peek References",precondition:Ri.and(cd.hasReferenceProvider,WD.notInPeekEditor,cd.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:Ln.EditorContextPeek,group:"peek",order:6}})}_getLocationModel(e,i,n){return GI(this,void 0,void 0,(function*(){return new lE(yield MI(e,i,!1,n),t(0,"References"))}))}});class iT extends YI{constructor(e,i,n){super(e,{id:"editor.action.goToLocation",label:t(0,"Go To Any Symbol"),alias:"Go To Any Symbol",precondition:Ri.and(WD.notInPeekEditor,cd.isInWalkThroughSnippet.toNegated())}),this._references=i,this._gotoMultipleBehaviour=n}_getLocationModel(e,i,n){return GI(this,void 0,void 0,(function*(){return new lE(this._references,t(0,"Locations"))}))}_getNoResultFoundMessage(e){return e&&t(0,"No results for '{0}'",e.word)||""}_getGoToPreference(e){var t;return null!==(t=this._gotoMultipleBehaviour)&&void 0!==t?t:e.getOption(45).multipleReferences}_getAlternativeCommand(){return""}}sn.registerCommand({id:"editor.action.goToLocations",description:{description:"Go to locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:mt},{name:"position",description:"The position at which to start",constraint:Tt.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto"},{name:"noResultsMessage",description:"Human readable message that shows when locations is empty."}]},handler:(e,t,i,n,o,s,r)=>GI(void 0,void 0,void 0,(function*(){Ne(mt.isUri(t)),Ne(Tt.isIPosition(i)),Ne(Array.isArray(n)),Ne(void 0===o||"string"==typeof o),Ne(void 0===r||"boolean"==typeof r);const a=e.get(It),l=yield a.openCodeEditor({resource:t},a.getFocusedCodeEditor());if(iD(l))return l.setPosition(i),l.revealPositionInCenterIfOutsideViewport(i,0),l.invokeWithinContext(e=>{const t=new class extends iT{_getNoResultFoundMessage(e){return s||super._getNoResultFoundMessage(e)}}({muteMessage:!Boolean(s),openInPeek:Boolean(r),openToSide:!1},n,o);e.get(Et).invokeFunction(t.run.bind(t),l)})}))}),sn.registerCommand({id:"editor.action.peekLocations",description:{description:"Peek locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:mt},{name:"position",description:"The position at which to start",constraint:Tt.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto"}]},handler:(e,t,i,n,o)=>GI(void 0,void 0,void 0,(function*(){e.get(on).executeCommand("editor.action.goToLocations",t,i,n,o,void 0,!0)}))}),sn.registerCommand({id:"editor.action.findReferences",handler:(e,i,n)=>{Ne(mt.isUri(i)),Ne(Tt.isIPosition(n));const o=e.get(It);return o.openCodeEditor({resource:i},o.getFocusedCodeEditor()).then(e=>{if(!iD(e)||!e.hasModel())return;const i=DI.get(e);if(!i)return;const o=Pa(i=>MI(e.getModel(),Tt.lift(n),!1,i).then(e=>new lE(e,t(0,"References")))),s=new ro(n.lineNumber,n.column,n.lineNumber,n.column);return Promise.resolve(i.toggleWidget(s,o,!1))})}}),sn.registerCommandAlias("editor.action.showReferences","editor.action.peekLocations");const nT=kt("modeService");class oT{constructor(e,t,i){this.presentationIndex=i,this._onColorFlushed=new oe,this.onColorFlushed=this._onColorFlushed.event,this._onDidChangeColor=new oe,this.onDidChangeColor=this._onDidChangeColor.event,this._onDidChangePresentation=new oe,this.onDidChangePresentation=this._onDidChangePresentation.event,this.originalColor=e,this._color=e,this._colorPresentations=t}get color(){return this._color}set color(e){this._color.equals(e)||(this._color=e,this._onDidChangeColor.fire(e))}get presentation(){return this.colorPresentations[this.presentationIndex]}get colorPresentations(){return this._colorPresentations}set colorPresentations(e){this._colorPresentations=e,this.presentationIndex>e.length-1&&(this.presentationIndex=0),this._onDidChangePresentation.fire(this.presentation)}selectNextColorPresentation(){this.presentationIndex=(this.presentationIndex+1)%this.colorPresentations.length,this.flushColor(),this._onDidChangePresentation.fire(this.presentation)}guessColorPresentation(e,t){for(let e=0;e{this.backgroundColor=e.getColor(cf)||uc.white})),this._register(jd(this.pickedColorNode,Nu.CLICK,()=>this.model.selectNextColorPresentation())),this._register(jd(n,Nu.CLICK,()=>{this.model.color=this.model.originalColor,this.model.flushColor()})),this._register(t.onDidChangeColor(this.onDidChangeColor,this)),this._register(t.onDidChangePresentation(this.onDidChangePresentation,this)),this.pickedColorNode.style.backgroundColor=uc.Format.CSS.format(t.color)||"",this.pickedColorNode.classList.toggle("light",t.color.rgba.a<.5?this.backgroundColor.isLighter():t.color.isLighter())}onDidChangeColor(e){this.pickedColorNode.style.backgroundColor=uc.Format.CSS.format(e)||"",this.pickedColorNode.classList.toggle("light",e.rgba.a<.5?this.backgroundColor.isLighter():e.isLighter()),this.onDidChangePresentation()}onDidChangePresentation(){this.pickedColorNode.textContent=this.model.presentation?this.model.presentation.label:""}}class aT extends C{constructor(e,t,i){super(),this.model=t,this.pixelRatio=i,this.domNode=sT(".colorpicker-body"),Mu(e,this.domNode),this.saturationBox=new lT(this.domNode,this.model,this.pixelRatio),this._register(this.saturationBox),this._register(this.saturationBox.onDidChange(this.onDidSaturationValueChange,this)),this._register(this.saturationBox.onColorFlushed(this.flushColor,this)),this.opacityStrip=new cT(this.domNode,this.model),this._register(this.opacityStrip),this._register(this.opacityStrip.onDidChange(this.onDidOpacityChange,this)),this._register(this.opacityStrip.onColorFlushed(this.flushColor,this)),this.hueStrip=new dT(this.domNode,this.model),this._register(this.hueStrip),this._register(this.hueStrip.onDidChange(this.onDidHueChange,this)),this._register(this.hueStrip.onColorFlushed(this.flushColor,this))}flushColor(){this.model.flushColor()}onDidSaturationValueChange({s:e,v:t}){const i=this.model.color.hsva;this.model.color=new uc(new dc(i.h,e,t,i.a))}onDidOpacityChange(e){const t=this.model.color.hsva;this.model.color=new uc(new dc(t.h,t.s,t.v,e))}onDidHueChange(e){const t=this.model.color.hsva,i=360*(1-e);this.model.color=new uc(new dc(360===i?0:i,t.s,t.v,t.a))}layout(){this.saturationBox.layout(),this.opacityStrip.layout(),this.hueStrip.layout()}}class lT extends C{constructor(e,t,i){super(),this.model=t,this.pixelRatio=i,this._onDidChange=new oe,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new oe,this.onColorFlushed=this._onColorFlushed.event,this.domNode=sT(".saturation-wrap"),Mu(e,this.domNode),this.canvas=document.createElement("canvas"),this.canvas.className="saturation-box",Mu(this.domNode,this.canvas),this.selection=sT(".saturation-selection"),Mu(this.domNode,this.selection),this.layout(),this._register(Yd(this.domNode,e=>this.onMouseDown(e))),this._register(this.model.onDidChangeColor(this.onDidChangeColor,this)),this.monitor=null}onMouseDown(e){this.monitor=this._register(new Wg);const t=cu(this.domNode);e.target!==this.selection&&this.onDidChangePosition(e.offsetX,e.offsetY),this.monitor.startMonitoring(e.target,e.buttons,Bg,e=>this.onDidChangePosition(e.posx-t.left,e.posy-t.top),()=>null);const i=Zd(document,()=>{this._onColorFlushed.fire(),i.dispose(),this.monitor&&(this.monitor.stopMonitoring(!0),this.monitor=null)},!0)}onDidChangePosition(e,t){const i=Math.max(0,Math.min(1,e/this.width)),n=Math.max(0,Math.min(1,1-t/this.height));this.paintSelection(i,n),this._onDidChange.fire({s:i,v:n})}layout(){this.width=this.domNode.offsetWidth,this.height=this.domNode.offsetHeight,this.canvas.width=this.width*this.pixelRatio,this.canvas.height=this.height*this.pixelRatio,this.paint();const e=this.model.color.hsva;this.paintSelection(e.s,e.v)}paint(){const e=new uc(new dc(this.model.color.hsva.h,1,1,1)),t=this.canvas.getContext("2d"),i=t.createLinearGradient(0,0,this.canvas.width,0);i.addColorStop(0,"rgba(255, 255, 255, 1)"),i.addColorStop(.5,"rgba(255, 255, 255, 0.5)"),i.addColorStop(1,"rgba(255, 255, 255, 0)");const n=t.createLinearGradient(0,0,0,this.canvas.height);n.addColorStop(0,"rgba(0, 0, 0, 0)"),n.addColorStop(1,"rgba(0, 0, 0, 1)"),t.rect(0,0,this.canvas.width,this.canvas.height),t.fillStyle=uc.Format.CSS.format(e),t.fill(),t.fillStyle=i,t.fill(),t.fillStyle=n,t.fill()}paintSelection(e,t){this.selection.style.left=`${e*this.width}px`,this.selection.style.top=`${this.height-t*this.height}px`}onDidChangeColor(){this.monitor&&this.monitor.isMonitoring()||this.paint()}}class hT extends C{constructor(e,t){super(),this.model=t,this._onDidChange=new oe,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new oe,this.onColorFlushed=this._onColorFlushed.event,this.domNode=Mu(e,sT(".strip")),this.overlay=Mu(this.domNode,sT(".overlay")),this.slider=Mu(this.domNode,sT(".slider")),this.slider.style.top="0px",this._register(Yd(this.domNode,e=>this.onMouseDown(e))),this.layout()}layout(){this.height=this.domNode.offsetHeight-this.slider.offsetHeight;const e=this.getValue(this.model.color);this.updateSliderPosition(e)}onMouseDown(e){const t=this._register(new Wg),i=cu(this.domNode);this.domNode.classList.add("grabbing"),e.target!==this.slider&&this.onDidChangeTop(e.offsetY),t.startMonitoring(e.target,e.buttons,Bg,e=>this.onDidChangeTop(e.posy-i.top),()=>null);const n=Zd(document,()=>{this._onColorFlushed.fire(),n.dispose(),t.stopMonitoring(!0),this.domNode.classList.remove("grabbing")},!0)}onDidChangeTop(e){const t=Math.max(0,Math.min(1,1-e/this.height));this.updateSliderPosition(t),this._onDidChange.fire(t)}updateSliderPosition(e){this.slider.style.top=`${(1-e)*this.height}px`}}class cT extends hT{constructor(e,t){super(e,t),this.domNode.classList.add("opacity-strip"),this._register(t.onDidChangeColor(this.onDidChangeColor,this)),this.onDidChangeColor(this.model.color)}onDidChangeColor(e){const{r:t,g:i,b:n}=e.rgba,o=new uc(new hc(t,i,n,1)),s=new uc(new hc(t,i,n,0));this.overlay.style.background=`linear-gradient(to bottom, ${o} 0%, ${s} 100%)`}getValue(e){return e.hsva.a}}class dT extends hT{constructor(e,t){super(e,t),this.domNode.classList.add("hue-strip")}getValue(e){return 1-e.hsva.h/360}}class uT extends bb{constructor(e,t,i,n){super(),this.model=t,this.pixelRatio=i,this._register(ce(()=>this.layout()));const o=sT(".colorpicker-widget");e.appendChild(o);const s=new rT(o,this.model,n);this.body=new aT(o,this.model,this.pixelRatio),this._register(s),this._register(this.body)}layout(){this.body.layout()}}class gT{constructor(e,t,i,n,o){this._computer=e,this._state=0,this._hoverTime=o,this._firstWaitScheduler=new $a(()=>this._triggerAsyncComputation(),0),this._secondWaitScheduler=new $a(()=>this._triggerSyncComputation(),0),this._loadingMessageScheduler=new $a(()=>this._showLoadingMessage(),0),this._asyncComputationPromise=null,this._asyncComputationPromiseDone=!1,this._completeCallback=t,this._errorCallback=i,this._progressCallback=n}setHoverTime(e){this._hoverTime=e}_firstWaitTime(){return this._hoverTime/2}_secondWaitTime(){return this._hoverTime/2}_loadingMessageTime(){return 3*this._hoverTime}_triggerAsyncComputation(){this._state=2,this._secondWaitScheduler.schedule(this._secondWaitTime()),this._computer.computeAsync?(this._asyncComputationPromiseDone=!1,this._asyncComputationPromise=Pa(e=>this._computer.computeAsync(e)),this._asyncComputationPromise.then(e=>{this._asyncComputationPromiseDone=!0,this._withAsyncResult(e)},e=>this._onError(e))):this._asyncComputationPromiseDone=!0}_triggerSyncComputation(){this._computer.computeSync&&this._computer.onResult(this._computer.computeSync(),!0),this._asyncComputationPromiseDone?(this._state=0,this._onComplete(this._computer.getResult())):(this._state=3,this._onProgress(this._computer.getResult()))}_showLoadingMessage(){3===this._state&&this._onProgress(this._computer.getResultWithLoadingMessage())}_withAsyncResult(e){e&&this._computer.onResult(e,!1),3===this._state&&(this._state=0,this._onComplete(this._computer.getResult()))}_onComplete(e){this._completeCallback(e)}_onError(e){this._errorCallback?this._errorCallback(e):n(e)}_onProgress(e){this._progressCallback(e)}start(e){if(0===e)0===this._state&&(this._state=1,this._firstWaitScheduler.schedule(this._firstWaitTime()),this._loadingMessageScheduler.schedule(this._loadingMessageTime()));else switch(this._state){case 0:this._triggerAsyncComputation(),this._secondWaitScheduler.cancel(),this._triggerSyncComputation();break;case 2:this._secondWaitScheduler.cancel(),this._triggerSyncComputation()}}cancel(){this._loadingMessageScheduler.cancel(),1===this._state&&this._firstWaitScheduler.cancel(),2===this._state&&(this._secondWaitScheduler.cancel(),this._asyncComputationPromise&&(this._asyncComputationPromise.cancel(),this._asyncComputationPromise=null)),3===this._state&&this._asyncComputationPromise&&(this._asyncComputationPromise.cancel(),this._asyncComputationPromise=null),this._state=0}}class pT extends bb{constructor(){super(),this._onResizeStart=this._register(new oe),this.onResizeStart=this._onResizeStart.event,this._onResize=this._register(new oe),this.onResize=this._onResize.event,this._onResizeEnd=this._register(new oe),this.onResizeEnd=this._onResizeEnd.event,this._dragging=!1,this._initialX=0,this._initialY=0,this.domNode=Mg(document.createElement("div")),this.domNode.domNode.className="resizer",this.onmousedown(document,e=>this._domNodeMouseDown(e)),this.onmousemove(document,e=>this._onMouseMove(e)),this.onmouseup(document,()=>this._onMouseUp())}_domNodeMouseDown(e){e.target===this.domNode.domNode&&this._onMouseDown(e)}_onMouseDown(e){this._dragging=!0,this._initialX=e.posx,this._initialY=e.posy,this._onResizeStart.fire()}_onMouseUp(){this._dragging&&(this._dragging=!1,this._onResizeEnd.fire())}_onMouseMove(e){this._dragging&&this._onResize.fire({widthChange:e.posx-this._initialX,heightChange:e.posy-this._initialY})}}class mT extends bb{constructor(e){super(),this._onResize=this._register(new oe),this.onResize=this._onResize.event,this._onResizeEnd=this._register(new oe),this.onResizeEnd=this._onResizeEnd.event,this._resizer=new pT,this._currentDimensions={width:0,height:0},this._initialDimensions={width:0,height:0},this._isResizing=!1,this._element=e,this._domNode=document.createElement("div"),this._domNode.className="monaco-resizable-element",this._domNode.appendChild(this._element),this._domNode.appendChild(this._resizer.domNode.domNode),this._register(this._resizer.onResizeStart(()=>this._handleResizeStart())),this._register(this._resizer.onResize(e=>this._handleResize(e))),this._register(this._resizer.onResizeEnd(()=>this._handleResizeEnd()))}get isResizing(){return this._isResizing}getDomNode(){return this._domNode}_handleResizeStart(){this._initialDimensions={width:this._domNode.clientWidth,height:this._domNode.clientHeight},this._isResizing=!0}_handleResize(e){if(0===e.widthChange&&0===e.heightChange)return;this._element.style.removeProperty("maxHeight"),this._element.style.removeProperty("maxWidth");const{width:t,height:i}=this._initialDimensions;this._currentDimensions={width:t+e.widthChange,height:i+e.heightChange},this.setDimensions(this._currentDimensions),this._onResize.fire()}_handleResizeEnd(){this._isResizing=!1,this._onResizeEnd.fire(this._currentDimensions)}setDimensions(e){const{width:t,height:i}=e;this._domNode.style.width=`${t}px`,this._domNode.style.height=`${i}px`}clearResize(){this._domNode.style.removeProperty("width"),this._domNode.style.removeProperty("height")}}const fT=Bu;class _T extends C{constructor(){super(),this.containerDomNode=document.createElement("div"),this.containerDomNode.className="monaco-hover",this.containerDomNode.tabIndex=0,this.containerDomNode.setAttribute("role","tooltip"),this.contentsDomNode=document.createElement("div"),this.contentsDomNode.className="monaco-hover-content",this.resizable=this._register(new mT(this.contentsDomNode)),this._register(this.resizable.onResize(()=>this.onContentsChanged())),this._register(this.resizable.onResizeEnd(()=>this.onContentsChanged())),this._scrollbar=this._register(new Kb(this.resizable.getDomNode(),{consumeMouseWheelIfScrollbarIsNeeded:!0})),this.containerDomNode.appendChild(this._scrollbar.getDomNode())}onContentsChanged(){this._scrollbar.scanDomNode()}}var bT=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const vT=kt("openerService"),CT=Object.freeze({_serviceBrand:void 0,registerOpener:()=>C.None,registerValidator:()=>C.None,registerExternalUriResolver:()=>C.None,setDefaultExternalOpener(){},registerExternalOpener:()=>C.None,open(){return bT(this,void 0,void 0,(function*(){return!1}))},resolveExternalUri(e){return bT(this,void 0,void 0,(function*(){return{resolved:e,dispose(){}}}))}});function wT(e,t){return mt.isUri(e)?ri(e.scheme,t):li(e,t+":")}var yT;!function(e){e.className=function t(e){switch(e){case hw.Ignore:return"severity-ignore "+un.info.classNames;case hw.Info:return un.info.classNames;case hw.Warning:return un.warning.classNames;case hw.Error:return un.error.classNames;default:return""}}}(yT||(yT={})),Cn((e,t)=>{const i=e.getColor(l_);if(i){const e=un.error.cssSelector;t.addRule(`\n\t\t\t.monaco-editor .zone-widget ${e},\n\t\t\t.markers-panel .marker-icon${e},\n\t\t\t.extensions-viewlet > .extensions ${e} {\n\t\t\t\tcolor: ${i};\n\t\t\t}\n\t\t`)}const n=e.getColor(h_);if(n){const e=un.warning.cssSelector;t.addRule(`\n\t\t\t.monaco-editor .zone-widget ${e},\n\t\t\t.markers-panel .marker-icon${e},\n\t\t\t.extensions-viewlet > .extensions ${e},\n\t\t\t.extension-editor ${e} {\n\t\t\t\tcolor: ${n};\n\t\t\t}\n\t\t`)}const o=e.getColor(c_);if(o){const e=un.info.cssSelector;t.addRule(`\n\t\t\t.monaco-editor .zone-widget ${e},\n\t\t\t.markers-panel .marker-icon${e},\n\t\t\t.extensions-viewlet > .extensions ${e},\n\t\t\t.extension-editor ${e} {\n\t\t\t\tcolor: ${o};\n\t\t\t}\n\t\t`)}});var ST=function(e,t){return function(i,n){t(i,n,e)}};class LT{constructor(e,t,i,n,o){this._openerService=n,this._labelService=o,this._lines=0,this._longestLineLength=0,this._relatedDiagnostics=new WeakMap,this._disposables=new v,this._editor=t;const s=document.createElement("div");s.className="descriptioncontainer",this._messageBlock=document.createElement("div"),this._messageBlock.classList.add("message"),this._messageBlock.setAttribute("aria-live","assertive"),this._messageBlock.setAttribute("role","alert"),s.appendChild(this._messageBlock),this._relatedBlock=document.createElement("div"),s.appendChild(this._relatedBlock),this._disposables.add(Gd(this._relatedBlock,"click",e=>{e.preventDefault();const t=this._relatedDiagnostics.get(e.target);t&&i(t)})),this._scrollable=new Hb(s,{horizontal:1,vertical:1,useShadows:!1,horizontalScrollbarSize:3,verticalScrollbarSize:3}),e.appendChild(this._scrollable.getDomNode()),this._disposables.add(this._scrollable.onScroll(e=>{s.style.left=`-${e.scrollLeft}px`,s.style.top=`-${e.scrollTop}px`})),this._disposables.add(this._scrollable)}dispose(){f(this._disposables)}update(e){const{source:t,message:i,relatedInformation:n,code:o}=e;let s=((null==t?void 0:t.length)||0)+"()".length;o&&(s+="string"==typeof o?o.length:o.value.length);const r=Yt(i);this._lines=r.length,this._longestLineLength=0;for(const e of r)this._longestLineLength=Math.max(e.length+s,this._longestLineLength);Ud(this._messageBlock),this._messageBlock.setAttribute("aria-label",this.getAriaLabel(e)),this._editor.applyFontInfo(this._messageBlock);let a=this._messageBlock;for(const e of r)(a=document.createElement("div")).innerText=e,""===e&&(a.style.height=this._messageBlock.style.lineHeight),this._messageBlock.appendChild(a);if(t||o){const e=document.createElement("span");if(e.classList.add("details"),a.appendChild(e),t){const i=document.createElement("span");i.innerText=t,i.classList.add("source"),e.appendChild(i)}if(o)if("string"==typeof o){const t=document.createElement("span");t.innerText=`(${o})`,t.classList.add("code"),e.appendChild(t)}else this._codeLink=Bu("a.code-link"),this._codeLink.setAttribute("href",`${o.target.toString()}`),this._codeLink.onclick=e=>{this._openerService.open(o.target),e.preventDefault(),e.stopPropagation()},Mu(this._codeLink,Bu("span")).innerText=o.value,e.appendChild(this._codeLink)}if(Ud(this._relatedBlock),this._editor.applyFontInfo(this._relatedBlock),na(n)){const e=this._relatedBlock.appendChild(document.createElement("div"));e.style.paddingTop=`${Math.floor(.66*this._editor.getOption(54))}px`,this._lines+=1;for(const t of n){let i=document.createElement("div"),n=document.createElement("a");n.classList.add("filename"),n.innerText=`${SE(t.resource)}(${t.startLineNumber}, ${t.startColumn}): `,n.title=this._labelService.getUriLabel(t.resource),this._relatedDiagnostics.set(n,t);let o=document.createElement("span");o.innerText=t.message,i.appendChild(n),i.appendChild(o),this._lines+=1,e.appendChild(i)}}const l=this._editor.getOption(38),h=Math.ceil(l.typicalFullwidthCharacterWidth*this._longestLineLength*.75);this._scrollable.setScrollDimensions({scrollWidth:h,scrollHeight:l.lineHeight*this._lines})}layout(e,t){this._scrollable.getDomNode().style.height=`${e}px`,this._scrollable.getDomNode().style.width=`${t}px`,this._scrollable.setScrollDimensions({width:t,height:e})}getHeightInLines(){return Math.min(17,this._lines)}getAriaLabel(e){let i="";switch(e.severity){case qS.Error:i=t(0,"Error");break;case qS.Warning:i=t(0,"Warning");break;case qS.Info:i=t(0,"Info");break;case qS.Hint:i=t(0,"Hint")}let n=t(0,"{0} at {1}. ",i,e.startLineNumber+":"+e.startColumn);const o=this._editor.getModel();return o&&e.startLineNumber<=o.getLineCount()&&e.startLineNumber>=1&&(n=`${o.getLineContent(e.startLineNumber)}, ${n}`),n}}let DT=class e extends HD{constructor(e,t,i,n,o,s,r){super(e,{showArrow:!0,showFrame:!0,isAccessible:!0},o),this._themeService=t,this._openerService=i,this._menuService=n,this._contextKeyService=s,this._labelService=r,this._callOnDispose=new v,this._onDidSelectRelatedInformation=new oe,this.onDidSelectRelatedInformation=this._onDidSelectRelatedInformation.event,this._severity=qS.Warning,this._backgroundColor=uc.white,this._applyTheme(t.getColorTheme()),this._callOnDispose.add(t.onDidColorThemeChange(this._applyTheme.bind(this))),this.create()}_applyTheme(e){this._backgroundColor=e.getColor(AT);let t=NT;this._severity===qS.Warning?t=IT:this._severity===qS.Info&&(t=TT);const i=e.getColor(t);this.style({arrowColor:i,frameColor:i,headerBackgroundColor:this._backgroundColor,primaryHeadingColor:e.getColor(KD),secondaryHeadingColor:e.getColor($D)})}_applyStyles(){this._parentContainer&&(this._parentContainer.style.backgroundColor=this._backgroundColor?this._backgroundColor.toString():""),super._applyStyles()}dispose(){this._callOnDispose.dispose(),super.dispose()}_fillHead(t){super._fillHead(t),this._disposables.add(this._actionbarWidget.actionRunner.onBeforeRun(e=>this.editor.focus()));const i=[],n=this._menuService.createMenu(e.TitleMenu,this._contextKeyService);(function o(e,t,i,n,s,r){const a=e.getActions(t);(function l(e,t,i,n=(e=>"navigation"===e),o=Number.MAX_SAFE_INTEGER,s=(()=>!1)){let r,a;Array.isArray(t)?(r=t,a=t):(r=t.primary,a=t.secondary);const l=new Set;for(const[t,o]of e){let e;n(t)?e=r:(e=a).length>0&&e.push(new Bt);for(let n of o){i&&(n=n instanceof kn&&n.alt?n.alt:n);const o=e.push(n);n instanceof Wt&&l.add({group:t,action:n,index:o-1})}}for(const{group:e,action:t,index:i}of l){const l=n(e)?r:a,h=t.actions;(h.length<=1||l.length+h.length-2<=o)&&s(t,e,l.length)&&l.splice(i,1,...h)}if(r!==a&&r.length>o){const e=r.splice(o,r.length-o);a.unshift(...e,new Bt)}})(a,i,!1,n,s,r),function h(e){const t=new v;for(const[,i]of e)for(const e of i)t.add(e)}(a)})(n,void 0,i),this._actionbarWidget.push(i,{label:!1,icon:!0,index:0}),n.dispose()}_fillTitleIcon(e){this._icon=Mu(e,Bu(""))}_fillBody(e){this._parentContainer=e,e.classList.add("marker-widget"),this._parentContainer.tabIndex=0,this._parentContainer.setAttribute("role","tooltip"),this._container=document.createElement("div"),e.appendChild(this._container),this._message=new LT(this._container,this.editor,e=>this._onDidSelectRelatedInformation.fire(e),this._openerService,this._labelService),this._disposables.add(this._message)}show(){throw new Error("call showAtMarker")}showAtMarker(e,i,n){this._container.classList.remove("stale"),this._message.update(e),this._severity=e.severity,this._applyTheme(this._themeService.getColorTheme());let o=ro.lift(e);const s=this.editor.getPosition();let r=s&&o.containsPosition(s)?s:o.getStartPosition();super.show(r,this.computeRequiredHeight());const a=this.editor.getModel();if(a){const e=t(0,n>1?"{0} of {1} problems":"{0} of {1} problem",i,n);this.setTitle(xs(a.uri),e)}this._icon.className=`codicon ${yT.className(qS.toSeverity(this._severity))}`,this.editor.revealPositionNearTop(r,0),this.editor.focus()}updateMarker(e){this._container.classList.remove("stale"),this._message.update(e)}showStale(){this._container.classList.add("stale"),this._relayout()}_doLayoutBody(e,t){super._doLayoutBody(e,t),this._heightInPixel=e,this._message.layout(e,t),this._container.style.height=`${e}px`}_onWidth(e){this._message.layout(this._heightInPixel,e)}_relayout(){super._relayout(this.computeRequiredHeight())}computeRequiredHeight(){return 3+this._message.getHeightInLines()}};DT.TitleMenu=new Ln("gotoErrorTitleMenu"),DT=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([ST(1,pn),ST(2,vT),ST(3,Dn),ST(4,Et),ST(5,en),ST(6,_E)],DT);let ET=p_(Rm,Pm),xT=p_(Bm,Wm),kT=p_(zm,Hm);const NT=im("editorMarkerNavigationError.background",{dark:ET,light:ET,hc:ET},t(0,"Editor marker navigation widget error color.")),IT=im("editorMarkerNavigationWarning.background",{dark:xT,light:xT,hc:xT},t(0,"Editor marker navigation widget warning color.")),TT=im("editorMarkerNavigationInfo.background",{dark:kT,light:kT,hc:kT},t(0,"Editor marker navigation widget info color.")),AT=im("editorMarkerNavigation.background",{dark:"#2D2D30",light:uc.white,hc:"#0C141F"},t(0,"Editor marker navigation widget background."));Cn((e,t)=>{const i=e.getColor(am);i&&(t.addRule(`.monaco-editor .marker-widget a { color: ${i}; }`),t.addRule(`.monaco-editor .marker-widget a.code-link span:hover { color: ${i}; }`))});var MT=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},OT=function(e,t){return function(i,n){t(i,n,e)}};class RT{constructor(e,t,i){this.marker=e,this.index=t,this.total=i}}let PT=class e{constructor(t,i){this._markerService=i,this._onDidChange=new oe,this.onDidChange=this._onDidChange.event,this._dispoables=new v,this._markers=[],this._nextIdx=-1,mt.isUri(t)?this._resourceFilter=e=>e.toString()===t.toString():t&&(this._resourceFilter=t);const n=()=>{this._markers=this._markerService.read({resource:mt.isUri(t)?t:void 0,severities:qS.Error|qS.Warning|qS.Info}),"function"==typeof t&&(this._markers=this._markers.filter(e=>this._resourceFilter(e.resource))),this._markers.sort(e._compareMarker)};n(),this._dispoables.add(i.onMarkerChanged(e=>{this._resourceFilter&&!e.some(e=>this._resourceFilter(e))||(n(),this._nextIdx=-1,this._onDidChange.fire())}))}dispose(){this._dispoables.dispose(),this._onDidChange.dispose()}matches(e){return!this._resourceFilter&&!e||!(!this._resourceFilter||!e)&&this._resourceFilter(e)}get selected(){const e=this._markers[this._nextIdx];return e&&new RT(e,this._nextIdx+1,this._markers.length)}_initIdx(e,t,i){let n=!1,o=this._markers.findIndex(t=>t.resource.toString()===e.uri.toString());o<0&&(o=Xr(this._markers,{resource:e.uri},(e,t)=>Jt(e.resource.toString(),t.resource.toString())))<0&&(o=~o);for(let i=o;it.resource.toString()===e.toString());if(!(i<0))for(;ithis.close(),this,this._sessionDispoables),this._widgetVisible.set(!0),this._sessionDispoables.add(this._model),this._sessionDispoables.add(this._widget),this._sessionDispoables.add(this._editor.onDidChangeCursorPosition(e=>{var t,i,n;(null===(t=this._model)||void 0===t?void 0:t.selected)&&ro.containsPosition(null===(i=this._model)||void 0===i?void 0:i.selected.marker,e.position)||null===(n=this._model)||void 0===n||n.resetIndex()})),this._sessionDispoables.add(this._model.onDidChange(()=>{if(!this._widget||!this._widget.position||!this._model)return;const e=this._model.find(this._editor.getModel().uri,this._widget.position);e?this._widget.updateMarker(e.marker):this._widget.showStale()})),this._sessionDispoables.add(this._widget.onDidSelectRelatedInformation(e=>{this._editorService.openCodeEditor({resource:e.resource,options:{pinned:!0,revealIfOpened:!0,selection:ro.lift(e).collapseToStart()}},this._editor),this.close(!1)})),this._sessionDispoables.add(this._editor.onDidChangeModel(()=>this._cleanUp())),this._model}close(e=!0){this._cleanUp(),e&&this._editor.focus()}showAtMarker(e){if(this._editor.hasModel()){const t=this._getOrCreateModel(this._editor.getModel().uri);t.resetIndex(),t.move(!0,this._editor.getModel(),new Tt(e.startLineNumber,e.startColumn)),t.selected&&this._widget.showAtMarker(t.selected.marker,t.selected.index,t.selected.total)}}nagivate(t,i){return VT(this,void 0,void 0,(function*(){if(this._editor.hasModel()){const n=this._getOrCreateModel(i?void 0:this._editor.getModel().uri);if(n.move(t,this._editor.getModel(),this._editor.getPosition()),!n.selected)return;if(n.selected.marker.resource.toString()!==this._editor.getModel().uri.toString()){this._cleanUp();const o=yield this._editorService.openCodeEditor({resource:n.selected.marker.resource,options:{pinned:!1,revealIfOpened:!0,selectionRevealType:2,selection:n.selected.marker}},this._editor);o&&(e.get(o).close(),e.get(o).nagivate(t,i))}else this._widget.showAtMarker(n.selected.marker,n.selected.index,n.selected.total)}}))}};zT.ID="editor.contrib.markerController",zT=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([WT(1,FT),WT(2,en),WT(3,It),WT(4,Et)],zT);class HT extends Yn{constructor(e,t,i){super(i),this._next=e,this._multiFile=t}run(e,t){return VT(this,void 0,void 0,(function*(){t.hasModel()&&zT.get(t).nagivate(this._next,this._multiFile)}))}}class UT extends HT{constructor(){super(!0,!1,{id:UT.ID,label:UT.LABEL,alias:"Go to Next Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:cd.focus,primary:578,weight:100},menuOpts:{menuId:DT.TitleMenu,title:UT.LABEL,icon:cy("marker-navigation-next",un.chevronDown,t(0,"Icon for goto next marker.")),group:"navigation",order:1}})}}UT.ID="editor.action.marker.next",UT.LABEL=t(0,"Go to Next Problem (Error, Warning, Info)");class KT extends HT{constructor(){super(!1,!1,{id:KT.ID,label:KT.LABEL,alias:"Go to Previous Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:cd.focus,primary:1602,weight:100},menuOpts:{menuId:DT.TitleMenu,title:UT.LABEL,icon:cy("marker-navigation-previous",un.chevronUp,t(0,"Icon for goto previous marker.")),group:"navigation",order:2}})}}KT.ID="editor.action.marker.prev",KT.LABEL=t(0,"Go to Previous Problem (Error, Warning, Info)"),Jn(zT.ID,zT),Qn(UT),Qn(KT),Qn(class extends HT{constructor(){super(!0,!0,{id:"editor.action.marker.nextInFiles",label:t(0,"Go to Next Problem in Files (Error, Warning, Info)"),alias:"Go to Next Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:cd.focus,primary:66,weight:100},menuOpts:{menuId:Ln.MenubarGoMenu,title:t(0,"Next &&Problem"),group:"6_problem_nav",order:1}})}}),Qn(class extends HT{constructor(){super(!1,!0,{id:"editor.action.marker.prevInFiles",label:t(0,"Go to Previous Problem in Files (Error, Warning, Info)"),alias:"Go to Previous Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:cd.focus,primary:1090,weight:100},menuOpts:{menuId:Ln.MenubarGoMenu,title:t(0,"Previous &&Problem"),group:"6_problem_nav",order:2}})}});const $T=new Ji("markersNavigationVisible",!1);Xn(new(Gn.bindToContribution(zT.get))({id:"closeMarkersNavigation",precondition:$T,handler:e=>e.close(),kbOpts:{weight:150,kbExpr:cd.focus,primary:9,secondary:[1033]}}));var jT=function(e,t){return function(i,n){t(i,n,e)}};const qT=Bu;class GT{constructor(e,t){this.range=e,this.marker=t}equals(e){return e instanceof GT&&GS.makeKey(this.marker)===GS.makeKey(e.marker)}}const YT={type:2,filter:{include:_S.QuickFix}};let ZT=class{constructor(e,t,i,n,o){this._editor=e,this._hover=t,this._markerDecorationsService=i,this._keybindingService=n,this._openerService=o,this.recentMarkerCodeActionsInfo=void 0}computeSync(e,t){if(!this._editor.hasModel())return[];const i=this._editor.getModel(),n=e.startLineNumber,o=i.getLineMaxColumn(n),s=[];for(const r of t){const t=r.range.startLineNumber===n?r.range.startColumn:1,a=r.range.endLineNumber===n?r.range.endColumn:o,l=this._markerDecorationsService.getMarker(i.uri,r);if(!l)continue;const h=new ro(e.startLineNumber,t,e.startLineNumber,a);s.push(new GT(h,l))}return s}renderHoverParts(e,t){if(!e.length)return C.None;const i=new v;e.forEach(e=>t.appendChild(this.renderMarkerHover(e,i)));const n=1===e.length?e[0]:e.sort((e,t)=>qS.compare(e.marker.severity,t.marker.severity))[0];return t.appendChild(this.renderMarkerStatusbar(n,i)),i}renderMarkerHover(e,t){const i=qT("div.hover-row"),o=Mu(i,qT("div.marker.hover-contents")),{source:s,message:r,code:a,relatedInformation:l}=e.marker;this._editor.applyFontInfo(o);const h=Mu(o,qT("span"));if(h.style.whiteSpace="pre-wrap",h.innerText=r,s||a)if(a&&"string"!=typeof a){const e=qT("span");s&&(Mu(e,qT("span")).innerText=s);const i=Mu(e,qT("a.code-link"));i.setAttribute("href",a.target.toString()),t.add(jd(i,"click",e=>{this._openerService.open(a.target),e.preventDefault(),e.stopPropagation()})),Mu(i,qT("span")).innerText=a.value;const n=Mu(o,e);n.style.opacity="0.6",n.style.paddingLeft="6px"}else{const e=Mu(o,qT("span"));e.style.opacity="0.6",e.style.paddingLeft="6px",e.innerText=s&&a?`${s}(${a})`:s||`(${a})`}if(na(l))for(const{message:e,resource:i,startLineNumber:s,startColumn:r}of l){const a=Mu(o,qT("div"));a.style.marginTop="8px";const l=Mu(a,qT("a"));l.innerText=`${xs(i)}(${s}, ${r}): `,l.style.cursor="pointer",t.add(jd(l,"click",e=>{e.stopPropagation(),e.preventDefault(),this._openerService&&this._openerService.open(i,{fromUserGesture:!0,editorOptions:{selection:{startLineNumber:s,startColumn:r}}}).catch(n)}));const h=Mu(a,qT("span"));h.innerText=e,this._editor.applyFontInfo(h)}return i}renderMarkerStatusbar(e,i){const o=qT("div.hover-row.status-bar"),s=Mu(o,qT("div.actions"));if(e.marker.severity!==qS.Error&&e.marker.severity!==qS.Warning&&e.marker.severity!==qS.Info||i.add(this.renderAction(s,{label:t(0,"View Problem"),commandId:UT.ID,run:()=>{this._hover.hide(),zT.get(this._editor).showAtMarker(e.marker),this._editor.focus()}})),!this._editor.getOption(77)){const o=Mu(s,qT("div"));this.recentMarkerCodeActionsInfo&&(GS.makeKey(this.recentMarkerCodeActionsInfo.marker)===GS.makeKey(e.marker)?this.recentMarkerCodeActionsInfo.hasCodeActions||(o.textContent=t(0,"No quick fixes available")):this.recentMarkerCodeActionsInfo=void 0);const r=this.recentMarkerCodeActionsInfo&&!this.recentMarkerCodeActionsInfo.hasCodeActions?C.None:i.add(Ha(()=>o.textContent=t(0,"Checking for quick fixes..."),200));o.textContent||(o.textContent=String.fromCharCode(160));const a=this.getCodeActions(e.marker);i.add(b(()=>a.cancel())),a.then(n=>{if(r.dispose(),this.recentMarkerCodeActionsInfo={marker:e.marker,hasCodeActions:n.validActions.length>0},!this.recentMarkerCodeActionsInfo.hasCodeActions)return n.dispose(),void(o.textContent=t(0,"No quick fixes available"));o.style.display="none";let a=!1;i.add(b(()=>{a||n.dispose()})),i.add(this.renderAction(s,{label:t(0,"Quick Fix..."),commandId:dL.Id,run:e=>{a=!0;const t=lL.get(this._editor),i=cu(e);this._hover.hide(),t.showCodeActions(YT,n,{x:i.left+6,y:i.top+i.height+6})}}))}).catch(n)}return o}renderAction(e,t){const i=this._keybindingService.lookupKeybinding(t.commandId);return function n(e,t,i){const n=Mu(e,fT("div.action-container")),o=Mu(n,fT("a.action"));return o.setAttribute("href","#"),o.setAttribute("role","button"),t.iconClass&&Mu(o,fT(`span.icon.${t.iconClass}`)),Mu(o,fT("span")).textContent=i?`${t.label} (${i})`:t.label,jd(n,Nu.CLICK,e=>{e.stopPropagation(),e.preventDefault(),t.run(n)})}(e,t,i?i.getLabel():null)}getCodeActions(e){return Pa(t=>ES(this._editor.getModel(),new ro(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn),YT,Ny.None,t))}};ZT=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([jT(2,Sd),jT(3,FS),jT(4,vT)],ZT);const XT="$(",QT=new RegExp(`\\$\\(${gn.iconNameExpression}(?:${gn.iconModifierExpression})?\\)`,"g"),JT=new RegExp(`(\\\\)?${QT.source}`,"g"),eA=new RegExp(`\\\\${QT.source}`,"g"),tA=new RegExp(`(\\s)?(\\\\)?${QT.source}(\\s)?`,"g");function iA(e){const t=e.indexOf(XT);return-1===t?{text:e}:function i(e,t){const i=[];let n="";function o(e){if(e){n+=e;for(const t of e)i.push(h)}}let s,r,a=-1,l="",h=0,c=t;const d=e.length;for(o(e.substr(0,t));ct?e:`\\${e}`)}(e):e).replace(/([ \t]+)/g,(e,t)=>" ".repeat(t.length)).replace(/^>/gm,"\\>").replace(/\n/g,1===t?"\\\n":"\n\n"),this}appendMarkdown(e){return this.value+=e,this}appendCodeblock(e,t){return this.value+="\n```",this.value+=e,this.value+="\n",this.value+=t,this.value+="\n```\n",this}}function sA(e){return rA(e)?!e.value:!Array.isArray(e)||e.every(sA)}function rA(e){return e instanceof oA||!(!e||"object"!=typeof e)&&!("string"!=typeof e.value||"boolean"!=typeof e.isTrusted&&void 0!==e.isTrusted||"boolean"!=typeof e.supportThemeIcons&&void 0!==e.supportThemeIcons)}function aA(e,t){return e===t||!(!e||!t)&&e.value===t.value&&e.isTrusted===t.isTrusted&&e.supportThemeIcons===t.supportThemeIcons}function lA(e){return e?e.replace(/\\([\\`*_{}[\]()#+\-.!])/g,"$1"):e}function hA(e){const t=document.createElement(e.inline?"span":"div");return e.className&&(t.className=e.className),t}class cA{constructor(e){this.source=e,this.index=0}eos(){return this.index>=this.source.length}next(){const e=this.peek();return this.advance(),e}peek(){return this.source[this.index]}advance(){this.index++}}function dA(e){switch(e){case"*":return 3;case"_":return 4;case"[":return 5;case"]":return 6;default:return 0}}function uA(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function gA(e,t){return e(t={exports:{}},t.exports),t.exports}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var pA=gA((function(e,t){e.exports=function(){function e(e,t){for(var i=0;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[s++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}var n=function o(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e){e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}},changeDefaults:function i(t){e.exports.defaults=t}}})),s=/[&<>"']/,r=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,l=/[<>"']|&(?!#?\w+;)/g,h={"&":"&","<":"<",">":">",'"':""","'":"'"},c=function e(t){return h[t]},d=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function u(e){return e.replace(d,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var g=/(^|[^\[])\^/g,p=/[^\w:]/g,m=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i,f={},_=/^[^:]+:\/*[^\/]*$/,b=/^([^:]+:)[\s\S]*$/,v=/^([^:]+:\/*[^\/]*)[\s\S]*$/;function C(e,t,i){var n=e.length;if(0===n)return"";for(var o=0;o=0&&"\\"===i[o];)n=!n;return n?"|":" |"})).split(/ \|/),n=0;if(i.length>t)i.splice(t);else for(;i.length1?{type:"space",raw:i[0]}:{raw:"\n"}},t.code=function e(t){var i=this.rules.block.code.exec(t);if(i){var n=i[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:i[0],codeBlockStyle:"indented",text:this.options.pedantic?n:x(n,"\n")}}},t.fences=function e(t){var i=this.rules.block.fences.exec(t);if(i){var n=i[0],o=function s(e,t){var i=e.match(/^(\s+)(?:```)/);if(null===i)return t;var n=i[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=n.length?e.slice(n.length):e})).join("\n")}(n,i[3]||"");return{type:"code",raw:n,lang:i[2]?i[2].trim():i[2],text:o}}},t.heading=function e(t){var i=this.rules.block.heading.exec(t);if(i){var n=i[2].trim();if(/#$/.test(n)){var o=x(n,"#");this.options.pedantic?n=o.trim():o&&!/ $/.test(o)||(n=o.trim())}return{type:"heading",raw:i[0],depth:i[1].length,text:n}}},t.nptable=function e(t){var i=this.rules.block.nptable.exec(t);if(i){var n={type:"table",header:k(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[],raw:i[0]};if(n.header.length===n.align.length){var o,s=n.align.length;for(o=0;o ?/gm,"");return{type:"blockquote",raw:i[0],text:n}}},t.list=function e(t){var i=this.rules.block.list.exec(t);if(i){var n,o,s,r,a,l,h,c,d=i[0],u=i[2],g=u.length>1,e={type:"list",raw:d,ordered:g,start:g?+u.slice(0,-1):"",loose:!1,items:[]},p=i[0].match(this.rules.block.item),m=!1,f=p.length;s=this.rules.block.listItemStart.exec(p[0]);for(var _=0;_s[1].length:r[1].length>s[0].length||r[1].length>3){p.splice(_,2,p[_]+"\n"+p[_+1]),_--,f--;continue}(!this.options.pedantic||this.options.smartLists?r[2][r[2].length-1]!==u[u.length-1]:g===(1===r[2].length))&&(a=p.slice(_+1).join("\n"),e.raw=e.raw.substring(0,e.raw.length-a.length),_=f-1),s=r}o=n.length,~(n=n.replace(/^ *([*+-]|\d+[.)]) ?/,"")).indexOf("\n ")&&(o-=n.length,n=n.replace(this.options.pedantic?/^ {1,4}/gm:new RegExp("^ {1,"+o+"}","gm"),"")),l=m||/\n\n(?!\s*$)/.test(n),_!==f-1&&(m="\n"===n.charAt(n.length-1),l||(l=m)),l&&(e.loose=!0),this.options.gfm&&(c=void 0,(h=/^\[[ xX]\] /.test(n))&&(c=" "!==n[1],n=n.replace(/^\[[ xX]\] +/,""))),e.items.push({type:"list_item",raw:d,task:h,checked:c,loose:l,text:n})}return e}},t.html=function e(t){var i=this.rules.block.html.exec(t);if(i)return{type:this.options.sanitize?"paragraph":"html",raw:i[0],pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):I(i[0]):i[0]}},t.def=function e(t){var i=this.rules.block.def.exec(t);if(i)return i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),{tag:i[1].toLowerCase().replace(/\s+/g," "),raw:i[0],href:i[2],title:i[3]}},t.table=function e(t){var i=this.rules.block.table.exec(t);if(i){var n={type:"table",header:k(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=i[0];var o,s=n.align.length;for(o=0;o/i.test(o[0])&&(i=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:o[0],inLink:i,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):I(o[0]):o[0]}},t.link=function e(t){var i=this.rules.inline.link.exec(t);if(i){var n=i[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;var o=x(n.slice(0,-1),"\\");if((n.length-o.length)%2==0)return}else{var s=function r(e,t){if(-1===e.indexOf(t[1]))return-1;for(var i=e.length,n=0,o=0;o-1){var a=(0===i[0].indexOf("!")?5:4)+i[1].length+s;i[2]=i[2].substring(0,s),i[0]=i[0].substring(0,a).trim(),i[3]=""}}var l=i[2],h="";if(this.options.pedantic){var e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(l);e&&(l=e[1],h=e[3])}else h=i[3]?i[3].slice(1,-1):"";return l=l.trim(),/^$/.test(n)?l.slice(1):l.slice(1,-1)),T(i,{href:l?l.replace(this.rules.inline._escapes,"$1"):l,title:h?h.replace(this.rules.inline._escapes,"$1"):h},i[0])}},t.reflink=function e(t,i){var n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){var o=(n[2]||n[1]).replace(/\s+/g," ");if(!(o=i[o.toLowerCase()])||!o.href){var s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return T(n,o,n[0])}},t.emStrong=function e(t,i,n){void 0===n&&(n="");var o=this.rules.inline.emStrong.lDelim.exec(t);if(o&&(!o[3]||!n.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var s=o[1]||o[2]||"";if(!s||s&&(""===n||this.rules.inline.punctuation.exec(n))){var r,a,l=o[0].length-1,h=l,c=0,d="*"===o[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(d.lastIndex=0,i=i.slice(-1*t.length+l);null!=(o=d.exec(i));)if(r=o[1]||o[2]||o[3]||o[4]||o[5]||o[6])if(a=r.length,o[3]||o[4])h+=a;else if(!((o[5]||o[6])&&l%3)||(l+a)%3){if(!((h-=a)>0)){if(h+c-a<=0&&!i.slice(d.lastIndex).match(d)&&(a=Math.min(a,a+h+c)),Math.min(l,a)%2)return{type:"em",raw:t.slice(0,l+o.index+a+1),text:t.slice(1,l+o.index+a)};if(Math.min(l,a)%2==0)return{type:"strong",raw:t.slice(0,l+o.index+a+1),text:t.slice(2,l+o.index+a-1)}}}else c+=a}}},t.codespan=function e(t){var i=this.rules.inline.code.exec(t);if(i){var n=i[2].replace(/\n/g," "),o=/[^ ]/.test(n),s=/^ /.test(n)&&/ $/.test(n);return o&&s&&(n=n.substring(1,n.length-1)),n=I(n,!0),{type:"codespan",raw:i[0],text:n}}},t.br=function e(t){var i=this.rules.inline.br.exec(t);if(i)return{type:"br",raw:i[0]}},t.del=function e(t){var i=this.rules.inline.del.exec(t);if(i)return{type:"del",raw:i[0],text:i[2]}},t.autolink=function e(t,i){var n,o,s=this.rules.inline.autolink.exec(t);if(s)return o="@"===s[2]?"mailto:"+(n=I(this.options.mangle?i(s[1]):s[1])):n=I(s[1]),{type:"link",raw:s[0],text:n,href:o,tokens:[{type:"text",raw:n,text:n}]}},t.url=function e(t,i){var n;if(n=this.rules.inline.url.exec(t)){var o,s;if("@"===n[2])s="mailto:"+(o=I(this.options.mangle?i(n[0]):n[0]));else{var r;do{r=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(r!==n[0]);o=I(n[0]),s="www."===n[1]?"http://"+o:o}return{type:"link",raw:n[0],text:o,href:s,tokens:[{type:"text",raw:o,text:o}]}}},t.inlineText=function e(t,i,n){var o,s=this.rules.inline.text.exec(t);if(s)return o=i?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(s[0]):I(s[0]):s[0]:I(this.options.smartypants?n(s[0]):s[0]),{type:"text",raw:s[0],text:o}},e}(),M={exec:function e(){}},O=function R(e,t){e=e.source||e,t=t||"";var i={replace:function t(n,o){return o=(o=o.source||o).replace(g,"$1"),e=e.replace(n,o),i},getRegex:function i(){return new RegExp(e,t)}};return i},P=L,F={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:M,table:M,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};F.def=O(F.def).replace("label",F._label).replace("title",F._title).getRegex(),F.bullet=/(?:[*+-]|\d{1,9}[.)])/,F.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,F.item=O(F.item,"gm").replace(/bull/g,F.bullet).getRegex(),F.listItemStart=O(/^( *)(bull)/).replace("bull",F.bullet).getRegex(),F.list=O(F.list).replace(/bull/g,F.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+F.def.source+")").getRegex(),F._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",F._comment=/|$)/,F.html=O(F.html,"i").replace("comment",F._comment).replace("tag",F._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),F.paragraph=O(F._paragraph).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",F._tag).getRegex(),F.blockquote=O(F.blockquote).replace("paragraph",F.paragraph).getRegex(),F.normal=P({},F),F.gfm=P({},F.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),F.gfm.nptable=O(F.gfm.nptable).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",F._tag).getRegex(),F.gfm.table=O(F.gfm.table).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",F._tag).getRegex(),F.pedantic=P({},F.normal,{html:O("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",F._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:M,paragraph:O(F.normal._paragraph).replace("hr",F.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",F.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var B={escape:/^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:M,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:M,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};B.punctuation=O(B.punctuation).replace(/punctuation/g,B._punctuation).getRegex(),B.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,B.escapedEmSt=/\\\*|\\_/g,B._comment=O(F._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),B.emStrong.lDelim=O(B.emStrong.lDelim).replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimAst=O(B.emStrong.rDelimAst,"g").replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimUnd=O(B.emStrong.rDelimUnd,"g").replace(/punct/g,B._punctuation).getRegex(),B._escapes=/\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g,B._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,B._email=/[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,B.autolink=O(B.autolink).replace("scheme",B._scheme).replace("email",B._email).getRegex(),B._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,B.tag=O(B.tag).replace("comment",B._comment).replace("attribute",B._attribute).getRegex(),B._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,B._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,B._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,B.link=O(B.link).replace("label",B._label).replace("href",B._href).replace("title",B._title).getRegex(),B.reflink=O(B.reflink).replace("label",B._label).getRegex(),B.reflinkSearch=O(B.reflinkSearch,"g").replace("reflink",B.reflink).replace("nolink",B.nolink).getRegex(),B.normal=P({},B),B.pedantic=P({},B.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:O(/^!?\[(label)\]\((.*?)\)/).replace("label",B._label).getRegex(),reflink:O(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",B._label).getRegex()}),B.gfm=P({},B.normal,{escape:O(B.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\1;)1&t&&(i+=e),t>>=1,e+=e;return i+e};function $(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function j(e){var t,i,n="",o=e.length;for(t=0;t.5&&(i="x"+i.toString(16)),n+="&#"+i+";";return n}var q=function(){function t(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||V,this.options.tokenizer=this.options.tokenizer||new A,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var t={block:z.normal,inline:H.normal};this.options.pedantic?(t.block=z.pedantic,t.inline=H.pedantic):this.options.gfm&&(t.block=z.gfm,t.inline=this.options.breaks?H.breaks:H.gfm),this.tokenizer.rules=t}t.lex=function e(i,n){return new t(n).lex(i)},t.lexInline=function e(i,n){return new t(n).inlineTokens(i)};var i=t.prototype;return i.lex=function e(t){return t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(t,this.tokens,!0),this.inline(this.tokens),this.tokens},i.blockTokens=function e(t,i,n){var o,s,r,a;for(void 0===i&&(i=[]),void 0===n&&(n=!0),this.options.pedantic&&(t=t.replace(/^ +$/gm,""));t;)if(o=this.tokenizer.space(t))t=t.substring(o.raw.length),o.type&&i.push(o);else if(o=this.tokenizer.code(t))t=t.substring(o.raw.length),(a=i[i.length-1])&&"paragraph"===a.type?(a.raw+="\n"+o.raw,a.text+="\n"+o.text):i.push(o);else if(o=this.tokenizer.fences(t))t=t.substring(o.raw.length),i.push(o);else if(o=this.tokenizer.heading(t))t=t.substring(o.raw.length),i.push(o);else if(o=this.tokenizer.nptable(t))t=t.substring(o.raw.length),i.push(o);else if(o=this.tokenizer.hr(t))t=t.substring(o.raw.length),i.push(o);else if(o=this.tokenizer.blockquote(t))t=t.substring(o.raw.length),o.tokens=this.blockTokens(o.text,[],n),i.push(o);else if(o=this.tokenizer.list(t)){for(t=t.substring(o.raw.length),r=o.items.length,s=0;s0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(c));)d.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,a.index)+"["+U("a",a[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,a.index)+"["+U("a",a[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(a=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,a.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;t;)if(l||(h=""),l=!1,s=this.tokenizer.escape(t))t=t.substring(s.raw.length),i.push(s);else if(s=this.tokenizer.tag(t,n,o)){t=t.substring(s.raw.length),n=s.inLink,o=s.inRawBlock;var u=i[i.length-1];u&&"text"===s.type&&"text"===u.type?(u.raw+=s.raw,u.text+=s.text):i.push(s)}else if(s=this.tokenizer.link(t))t=t.substring(s.raw.length),"link"===s.type&&(s.tokens=this.inlineTokens(s.text,[],!0,o)),i.push(s);else if(s=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(s.raw.length);var g=i[i.length-1];"link"===s.type?(s.tokens=this.inlineTokens(s.text,[],!0,o),i.push(s)):g&&"text"===s.type&&"text"===g.type?(g.raw+=s.raw,g.text+=s.text):i.push(s)}else if(s=this.tokenizer.emStrong(t,c,h))t=t.substring(s.raw.length),s.tokens=this.inlineTokens(s.text,[],n,o),i.push(s);else if(s=this.tokenizer.codespan(t))t=t.substring(s.raw.length),i.push(s);else if(s=this.tokenizer.br(t))t=t.substring(s.raw.length),i.push(s);else if(s=this.tokenizer.del(t))t=t.substring(s.raw.length),s.tokens=this.inlineTokens(s.text,[],n,o),i.push(s);else if(s=this.tokenizer.autolink(t,j))t=t.substring(s.raw.length),i.push(s);else if(n||!(s=this.tokenizer.url(t,j))){if(s=this.tokenizer.inlineText(t,o,$))t=t.substring(s.raw.length),"_"!==s.raw.slice(-1)&&(h=s.raw.slice(-1)),l=!0,(r=i[i.length-1])&&"text"===r.type?(r.raw+=s.raw,r.text+=s.text):i.push(s);else if(t){var p="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(p);break}throw new Error(p)}}else t=t.substring(s.raw.length),i.push(s);return i},function n(t,i,o){i&&e(t.prototype,i),o&&e(t,o)}(t,null,[{key:"rules",get:function e(){return{block:z,inline:H}}}]),t}(),G=n.defaults,Y=function Z(e,t,i){if(e){var n;try{n=decodeURIComponent(u(i)).replace(p,"").toLowerCase()}catch(e){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}t&&!m.test(i)&&(i=function o(e,t){f[" "+e]||(f[" "+e]=_.test(e)?e+"/":C(e,"/",!0));var i=-1===(e=f[" "+e]).indexOf(":");return"//"===t.substring(0,2)?i?t:e.replace(b,"$1")+t:"/"===t.charAt(0)?i?t:e.replace(v,"$1")+t:e+t}(t,i));try{i=encodeURI(i).replace(/%25/g,"%")}catch(e){return null}return i},X=w,Q=function(){function e(e){this.options=e||G}var t=e.prototype;return t.code=function e(t,i,n){var o=(i||"").match(/\S*/)[0];if(this.options.highlight){var s=this.options.highlight(t,o);null!=s&&s!==t&&(n=!0,t=s)}return t=t.replace(/\n$/,"")+"\n",o?'
'+(n?t:X(t,!0))+"
\n":"
"+(n?t:X(t,!0))+"
\n"},t.blockquote=function e(t){return"
\n"+t+"
\n"},t.html=function e(t){return t},t.heading=function e(t,i,n,o){return this.options.headerIds?"'+t+"\n":""+t+"\n"},t.hr=function e(){return this.options.xhtml?"
\n":"
\n"},t.list=function e(t,i,n){var o=i?"ol":"ul";return"<"+o+(i&&1!==n?' start="'+n+'"':"")+">\n"+t+"\n"},t.listitem=function e(t){return"
  • "+t+"
  • \n"},t.checkbox=function e(t){return" "},t.paragraph=function e(t){return"

    "+t+"

    \n"},t.table=function e(t,i){return i&&(i=""+i+""),"\n\n"+t+"\n"+i+"
    \n"},t.tablerow=function e(t){return"\n"+t+"\n"},t.tablecell=function e(t,i){var n=i.header?"th":"td";return(i.align?"<"+n+' align="'+i.align+'">':"<"+n+">")+t+"\n"},t.strong=function e(t){return""+t+""},t.em=function e(t){return""+t+""},t.codespan=function e(t){return""+t+""},t.br=function e(){return this.options.xhtml?"
    ":"
    "},t.del=function e(t){return""+t+""},t.link=function e(t,i,n){if(null===(t=Y(this.options.sanitize,this.options.baseUrl,t)))return n;var o='
    "+n+""},t.image=function e(t,i,n){if(null===(t=Y(this.options.sanitize,this.options.baseUrl,t)))return n;var o=''+n+'":">")},t.text=function e(t){return t},e}(),J=function(){function e(){}var t=e.prototype;return t.strong=function e(t){return t},t.em=function e(t){return t},t.codespan=function e(t){return t},t.del=function e(t){return t},t.html=function e(t){return t},t.text=function e(t){return t},t.link=function e(t,i,n){return""+n},t.image=function e(t,i,n){return""+n},t.br=function e(){return""},e}(),ee=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function e(t){return t.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function e(t,i){var n=t,o=0;if(this.seen.hasOwnProperty(n)){o=this.seen[t];do{n=t+"-"+ ++o}while(this.seen.hasOwnProperty(n))}return i||(this.seen[t]=o,this.seen[n]=0),n},t.slug=function e(t,i){void 0===i&&(i={});var e=this.serialize(t);return this.getNextSafeSlug(e,i.dryrun)},e}(),te=n.defaults,ie=S,ne=function(){function e(e){this.options=e||te,this.options.renderer=this.options.renderer||new Q,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new J,this.slugger=new ee}e.parse=function t(i,n){return new e(n).parse(i)},e.parseInline=function t(i,n){return new e(n).parseInline(i)};var t=e.prototype;return t.parse=function e(t,i){void 0===i&&(i=!0);var n,o,s,r,a,l,h,c,d,u,g,p,m,f,_,b,v,C,w="",y=t.length;for(n=0;n0&&"text"===_.tokens[0].type?(_.tokens[0].text=C+" "+_.tokens[0].text,_.tokens[0].tokens&&_.tokens[0].tokens.length>0&&"text"===_.tokens[0].tokens[0].type&&(_.tokens[0].tokens[0].text=C+" "+_.tokens[0].tokens[0].text)):_.tokens.unshift({type:"text",text:C}):f+=C),f+=this.parse(_.tokens,m),d+=this.renderer.listitem(f,v,b);w+=this.renderer.list(d,g,p);continue;case"html":w+=this.renderer.html(u.text);continue;case"paragraph":w+=this.renderer.paragraph(this.parseInline(u.tokens));continue;case"text":for(d=u.tokens?this.parseInline(u.tokens):u.text;n+1An error occurred:

    "+ae(e.message+"",!0)+"
    ";throw e}}return de.options=de.setOptions=function(e){return oe(de.defaults,e),he(de.defaults),de},de.getDefaults=le,de.defaults=ce,de.use=function(e){var t=oe({},e);if(e.renderer&&function(){var i=de.defaults.renderer||new Q,n=function t(n){var o=i[n];i[n]=function(){for(var t=arguments.length,s=new Array(t),r=0;rAn error occurred:

    "+ae(e.message+"",!0)+"
    ";throw e}},de.Parser=ne,de.parser=ne.parse,de.Renderer=Q,de.TextRenderer=J,de.Lexer=q,de.lexer=q.lex,de.Tokenizer=A,de.Slugger=ee,de.parse=de,de}()})),mA=pA.parse,fA=pA.Renderer;let _A;!function e(t,i,n){function o(r,a){if(!i[r]){if(!t[r]){var l="function"==typeof require&&require;if(!a&&l)return l(r,!0);if(s)return s(r,!0);var h=new Error("Cannot find module '"+r+"'");throw h.code="MODULE_NOT_FOUND",h}var c=i[r]={exports:{}};t[r][0].call(c.exports,(function(e){return o(t[r][1][e]||e)}),c,c.exports,e,t,i,n)}return i[r].exports}for(var s="function"==typeof require&&require,r=0;r\s]+))?)*)\s*(\/?)\s*>/,a=/^<\s*\/\s*([\w:-]+)[^>]*>/,l=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,h=/^=0&&(t.comment&&t.comment(e.substring(4,n)),e=e.substring(n+3),i=!1)}():c.test(e)?m(a,_):h.test(e)&&m(r,f),function o(){if(i){var n,o=e.indexOf("<");o>=0?(n=e.substring(0,o),e=e.substring(o)):(n=e,e=""),t.chars&&t.chars(n)}}()}();var o=e===g;g=e,o&&(e="")}function m(t,n){var o=e.match(t);o&&(e=e.substring(o[0].length),o[0].replace(t,n),i=!1)}function f(e,i,r,a){var h={},c=o(i),u=s.voids[c]||!!a;r.replace(l,(function g(e,t,i,o,s){h[t]=void 0===i&&void 0===o&&void 0===s?void 0:n.decode(i||o||s||"")})),u||d.push(c),t.start&&t.start(c,h,u)}function _(e,i){var n,s=0,r=o(i);if(r)for(s=d.length-1;s>=0&&d[s]!==r;s--);if(s>=0){for(n=d.length-1;n>=s;n--)t.end&&t.end(d[n]);d.length=s}}_()}},{"./attributes":1,"./elements":3,"./lowercase":5,he:9}],8:[function(e,t,i){var n=e("he"),o=e("./lowercase"),s=e("./attributes"),r=e("./elements");t.exports=function a(e,t){var i,a=t||{};return g(),{start:function l(e,t,r){var l=o(e);i.ignoring?u(l):-1===(a.allowedTags||[]).indexOf(l)||a.filter&&!a.filter({tag:l,attrs:t})?u(l):(d("<"),d(l),Object.keys(t).forEach((function h(e){var i=t[e],r=(a.allowedClasses||{})[l]||[],h=(a.allowedAttributes||{})[l]||[];h=h.concat((a.allowedAttributes||{})["*"]||[]);var c=o(e);("class"===c&&-1===h.indexOf(c)?(i=i.split(" ").filter((function u(e){return r&&-1!==r.indexOf(e)})).join(" ").trim()).length:-1!==h.indexOf(c)&&(!0!==s.uris[c]||function g(e){var t=e[0];if("#"===t||"/"===t)return!0;var i=e.indexOf(":");if(-1===i)return!0;var n=e.indexOf("?");if(-1!==n&&i>n)return!0;var o=e.indexOf("#");return-1!==o&&i>o||a.allowedSchemes.some((function s(t){return 0===e.indexOf(t+":")}))}(i)))&&(d(" "),d(e),"string"==typeof i&&(d('="'),d(n.encode(i)),d('"')))})),d(r?"/>":">"))},end:function h(e){var t=o(e);-1!==(a.allowedTags||[]).indexOf(t)&&!1===i.ignoring?(d("")):function n(e){i.ignoring===e&&--i.depth<=0&&g()}(t)},chars:function c(e){!1===i.ignoring&&d(a.transformText?a.transformText(e):e)}};function d(t){e.push(t)}function u(e){r.voids[e]||(!1===i.ignoring?i={ignoring:e,depth:1}:i.ignoring===e&&i.depth++)}function g(){i={ignoring:!1,depth:0}}}},{"./attributes":1,"./elements":3,"./lowercase":5,he:9}],9:[function(e,t,i){var n={"&":"&","<":"<",">":">",'"':""","'":"'"},o={"&":"&","<":"<",">":">",""":'"',"'":"'"},s=/(&|<|>|"|')/g,r=/[&<>"']/g;function a(e){return n[e]}function l(e){return o[e]}function h(e){return null==e?"":String(e).replace(r,a)}function c(e){return null==e?"":String(e).replace(s,l)}h.options=c.options={},t.exports={encode:h,escape:h,decode:c,unescape:c,version:"1.0.0-browser"}},{}],10:[function(e,t,i){function n(e,t){return e[t]=!0,e}t.exports=function o(e){return e.reduce(n,{})}},{}]},{},[4]);var bA,vA=_A;function CA(e){return function e(t,i=0){if(!t||i>200)return t;if("object"==typeof t){switch(t.$mid){case 1:return mt.revive(t);case 2:return new RegExp(t.source,t.flags)}if(t instanceof ts||t instanceof Uint8Array)return t;if(Array.isArray(t))for(let n=0;nvA(e,t)});function yA(e,t={},i={}){var o;const s=hA(t);if(t.actionHandler&&t.actionHandler.disposeables.add(ie.any(Ed(s,"click"),Ed(s,"auxclick"))(e=>{const i=new Vd(e);if(!i.leftButton&&!i.middleButton)return;let o=i.target;if("A"===o.tagName||(o=o.parentElement)&&"A"===o.tagName)try{const e=o.dataset.href;e&&t.actionHandler.callback(e,i)}catch(e){n(e)}finally{i.preventDefault()}})),e.rendered){const t=e.value.replace(/e.uris&&e.uris[t]?mt.revive(e.uris[t]):void 0),encodeURIComponent(JSON.stringify(i))):t},a=function(t,i){const n=e.uris&&e.uris[t];if(!n)return t;let o=mt.revive(n);return mt.parse(t).toString()===o.toString()?t:i?ys.asBrowserUri(o).toString(!0):(o.query&&(o=o.with({query:r(o.query)})),o.toString())};let l;const h=new Promise(e=>l=e),c=new fA;c.image=(e,i,n)=>{let o=[],s=[];if(e){({href:e,dimensions:o}=function r(e){const t=[],i=e.split("|").map(e=>e.trim());e=i[0];const n=i[1];if(n){const e=/height=(\d+)/.exec(n),i=/width=(\d+)/.exec(n),o=e?e[1]:"",s=i?i[1]:"",r=isFinite(parseInt(s)),a=isFinite(parseInt(o));r&&t.push(`width="${s}"`),a&&t.push(`height="${o}"`)}return{href:e,dimensions:t}}(e)),e=a(e,!0);try{const i=mt.parse(e);t.baseUrl&&i.scheme===Cs.file&&(e=Ts(t.baseUrl,e).toString())}catch(e){}s.push(`src="${e}"`)}return n&&s.push(`alt="${n}"`),i&&s.push(`title="${i}"`),o.length&&(s=s.concat(o)),""},c.link=(i,n,o)=>(i===o&&(o=lA(o)),i=a(i,!1),t.baseUrl&&(/^\w[\w\d+.-]*:/.test(i)||(i=Ts(t.baseUrl,i).toString())),n=lA(n),!(i=lA(i))||i.match(/^data:|javascript:/i)||i.match(/^command:/i)&&!e.isTrusted||i.match(/^command:(\/\/\/)?_workbench\.downloadResource/i)?o:`/g,">").replace(/"/g,""").replace(/'/g,"'")}" title="${n||i}">${o}`),c.paragraph=t=>(e.supportThemeIcons&&(t=_L(t).map(e=>"string"==typeof e?e:e.outerHTML).join("")),`

    ${t}

    `),t.codeBlockRenderer&&(c.code=(e,i)=>{const n=t.codeBlockRenderer(i,e),o=yD.nextId(),r=Promise.all([n,h]).then(e=>{const t=s.querySelector(`div[data-code="${o}"]`);t&&Ou(t,e[0])}).catch(e=>{});return t.asyncRenderCallback&&r.then(t.asyncRenderCallback),`
    ${Kt(e)}
    `}),i.sanitizer=t=>(e.isTrusted?t.match(/^(]+>)|(<\/\s*span>)$/):void 0)?t:"",i.sanitize=!e.sanitized,i.silent=!0,i.renderer=c;let d=null!==(o=e.value)&&void 0!==o?o:"";d.length>1e5&&(d=`${d.substr(0,1e5)}…`),e.supportThemeIcons&&(d=function u(e){return e.replace(eA,e=>`\\${e}`)}(d));const g=mA(d,i);if(s.innerHTML=SA(e,g,e),l(),t.asyncRenderCallback)for(const e of s.getElementsByTagName("img")){const i=jd(e,"load",()=>{i.dispose(),t.asyncRenderCallback()})}return s}function SA(e,t,i){var n;if(null==i?void 0:i.sanitized)return t;const o=function s(e){const t=[Cs.http,Cs.https,Cs.mailto,Cs.data,Cs.file,Cs.vscodeRemote,Cs.vscodeRemoteResource];return e.isTrusted&&t.push(Cs.command),{allowedSchemes:t,allowedTags:["ul","li","p","code","blockquote","ol","h1","h2","h3","h4","h5","h6","hr","em","pre","table","thead","tbody","tr","th","td","div","del","a","strong","br","img","span","b","i"],allowedAttributes:{a:["href","name","target","data-href"],img:["src","title","alt","width","height"],div:["class","data-code"],span:["class","style"],th:["align"],td:["align"]},filter:t=>!("span"===t.tag&&e.isTrusted&&(t.attrs.style&&1===Object.keys(t.attrs).length?!t.attrs.style.match(/^(color\:#[0-9a-fA-F]+;)?(background-color\:#[0-9a-fA-F]+;)?$/):!t.attrs.class||!t.attrs.class.match(/^codicon codicon-[a-z\-]+( codicon-modifier-[a-z\-]+)?$/)))}}(e);return null!==(n=null==wA?void 0:wA.createHTML(t,o))&&void 0!==n?n:vA(t,o)}var LA,DA=function(e,t){return function(i,n){t(i,n,e)}};let EA=class e{constructor(e,t,i){this._options=e,this._modeService=t,this._openerService=i,this._onDidRenderAsync=new oe,this.onDidRenderAsync=this._onDidRenderAsync.event}dispose(){this._onDidRenderAsync.dispose()}render(e,t,i){const n=new v;let o;return{element:o=e?yA(e,Object.assign(Object.assign({},this._getRenderOptions(n)),t),i):document.createElement("span"),dispose:()=>n.dispose()}}_getRenderOptions(t){return{baseUrl:this._options.baseUrl,codeBlockRenderer:(t,i)=>(function(e,t,i,n){return new(i||(i=Promise))((function(t,o){function s(e){try{a(n.next(e))}catch(e){o(e)}}function r(e){try{a(n.throw(e))}catch(e){o(e)}}function a(e){e.done?t(e.value):function n(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(s,r)}a((n=n.apply(e,[])).next())}))})(this,0,void 0,(function*(){var n,o,s,r;let a;t?a=this._modeService.getModeIdForLanguageName(t):this._options.editor&&(a=null===(n=this._options.editor.getModel())||void 0===n?void 0:n.getLanguageIdentifier().language),a||(a="plaintext"),this._modeService.triggerMode(a);const l=null!==(o=yield th.getPromise(a))&&void 0!==o?o:void 0,h=document.createElement("span");h.innerHTML=null!==(r=null===(s=e._ttpTokenizer)||void 0===s?void 0:s.createHTML(i,l))&&void 0!==r?r:RC(i,l);let c=this._options.codeBlockFontFamily;return this._options.editor&&(c=this._options.editor.getOption(38).fontFamily),c&&(h.style.fontFamily=c),h})),asyncRenderCallback:()=>this._onDidRenderAsync.fire(),actionHandler:{callback:e=>this._openerService.open(e,{fromUserGesture:!0,allowContributedOpeners:!0}).catch(n),disposeables:t}}}};function xA(e,t,i,n){const s=Rl.ordered(e),r=n||{keyModifiers:[],source:Sl.Action},a=s.map(n=>Promise.resolve(n.provideHover(e,t,i,r)).then(e=>e&&function t(e){return void 0!==e.range&&void 0!==e.contents&&e.contents&&e.contents.length>0}(e)?e:void 0,e=>{o(e)}));return Promise.all(a).then(ta)}EA._ttpTokenizer=null===(LA=window.trustedTypes)||void 0===LA?void 0:LA.createPolicy("tokenizeToString",{createHTML:(e,t)=>RC(e,t)}),EA=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([DA(1,nT),DA(2,vT)],EA),Zn("_executeHoverProvider",(e,t)=>xA(e,t,Aa.None));var kA=function(e,t){return function(i,n){t(i,n,e)}};const NA=Bu;class IA{constructor(e,t){this.range=e,this.contents=t}equals(e){return e instanceof IA&&function t(e,i){return!e&&!i||!(!e||!i)&&(Array.isArray(e)&&Array.isArray(i)?Zr(e,i,aA):!(!rA(e)||!rA(i))&&aA(e,i))}(this.contents,e.contents)}}let TA=class{constructor(e,t,i,n){this._editor=e,this._hover=t,this._modeService=i,this._openerService=n}createLoadingMessage(e){return new IA(e,[(new oA).appendText(t(0,"Loading..."))])}computeSync(e,t){if(!this._editor.hasModel())return[];const i=this._editor.getModel(),n=e.startLineNumber,o=i.getLineMaxColumn(n),s=[];for(const i of t){const t=i.range.startLineNumber===n?i.range.startColumn:1,r=i.range.endLineNumber===n?i.range.endColumn:o,a=i.options.hoverMessage;if(!a||sA(a))continue;const l=new ro(e.startLineNumber,t,e.startLineNumber,r);s.push(new IA(l,ua(a)))}return s}computeAsync(e,t,i){return n=this,void 0,s=function*(){if(!this._editor.hasModel()||!e)return Promise.resolve([]);const n=this._editor.getModel();if(!Rl.has(n))return Promise.resolve([]);const o=yield xA(n,new Tt(e.startLineNumber,e.startColumn),t,i),s=[];for(const t of o){if(sA(t.contents))continue;const i=t.range?ro.lift(t.range):e;s.push(new IA(i,t.contents))}return s},new((o=void 0)||(o=Promise))((function(e,t){function i(e){try{a(s.next(e))}catch(e){t(e)}}function r(e){try{a(s.throw(e))}catch(e){t(e)}}function a(t){t.done?e(t.value):function n(e){return e instanceof o?e:new o((function(t){t(e)}))}(t.value).then(i,r)}a((s=s.apply(n,[])).next())}));var n,o,s}renderHoverParts(e,t){const i=new v;for(const n of e)for(const e of n.contents){if(sA(e))continue;const n=NA("div.hover-row.markdown-hover"),o=Mu(n,NA("div.hover-contents")),s=i.add(new EA({editor:this._editor},this._modeService,this._openerService));i.add(s.onDidRenderAsync(()=>{o.className="hover-contents code-hover-contents",this._hover.onContentsChanged()}));const r=i.add(s.render(e));o.appendChild(r.element),t.appendChild(n)}return i}};TA=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([kA(2,nT),kA(3,vT)],TA);var AA=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class MA{constructor(e,t,i){this.range=e,this.color=t,this.provider=i}equals(e){return!1}}class OA{constructor(e,t){this.owner=e,this.data=t}}class RA{constructor(e,t,i){this._markerHoverParticipant=t,this._markdownHoverParticipant=i,this._editor=e,this._result=[],this._range=null}setRange(e){this._range=e,this._result=[]}setContext(e){this._context=e,this._result=[]}clearResult(){this._result=[]}computeAsync(e){return AA(this,void 0,void 0,(function*(){return this._editor.hasModel()&&this._range?(yield this._markdownHoverParticipant.computeAsync(this._range,e,this._context)).map(e=>new OA(this._markdownHoverParticipant,e)):Promise.resolve([])}))}computeSync(){if(!this._editor.hasModel()||!this._range)return[];const e=this._editor.getModel(),t=this._range,i=t.startLineNumber;if(i>this._editor.getModel().getLineCount())return[];const n=e.getLineMaxColumn(i),o=this._editor.getLineDecorations(i).filter(e=>!!e.options.isWholeLine||!((e.range.startLineNumber===i?e.range.startColumn:1)>t.startColumn||t.endColumn>(e.range.endLineNumber===i?e.range.endColumn:n)));let s=[];const r=$L.get(this._editor);for(const e of o){const t=r.getColorData(e.range.getStartPosition());if(t){const{color:e,range:i}=t.colorInfo;s.push(new OA(null,new MA(ro.lift(i),e,t.provider)));break}}const a=this._markdownHoverParticipant.computeSync(this._range,o);s=s.concat(a.map(e=>new OA(this._markdownHoverParticipant,e)));const l=this._markerHoverParticipant.computeSync(this._range,o);return ta(s=s.concat(l.map(e=>new OA(this._markerHoverParticipant,e))))}onResult(e,t){this._result=t?e.concat(this._result):this._result.concat(e)}getResult(){return this._result.slice(0)}getResultWithLoadingMessage(){if(this._range){const e=new OA(this._markdownHoverParticipant,this._markdownHoverParticipant.createLoadingMessage(this._range));return this._result.slice(0).concat([e])}return this._result.slice(0)}}class PA extends bb{constructor(e,t,i,n){super(),this._hoverVisibleKey=t,this._themeService=n,this.allowEditorOverflow=!0,this._lastKeyModifiers=[],this._sticky=!1,this._onBlur=this._register(new oe),this.onBlur=this._onBlur.event,this._markerHoverParticipant=i.createInstance(ZT,e,this),this._markdownHoverParticipant=i.createInstance(TA,e,this),this._hover=this._register(new _T),this._id=PA.ID,this._editor=e,this._isVisible=!1,this._stoleFocus=!1,this._renderDisposable=null,this.onkeydown(this._hover.containerDomNode,e=>{e.equals(9)&&this.hide()}),this._register(this._editor.onDidChangeConfiguration(e=>{e.hasChanged(38)&&this._updateFont()})),this._editor.onDidLayoutChange(()=>this.layout()),this.layout(),this._editor.addContentWidget(this),this._showAtPosition=null,this._showAtRange=null,this._stoleFocus=!1,this._messages=[],this._lastRange=null,this._computer=new RA(this._editor,this._markerHoverParticipant,this._markdownHoverParticipant),this._highlightDecorations=[],this._currentDecorations=[],this._isChangingDecorations=!1,this._shouldFocus=!1,this._colorPicker=null,this._hoverOperation=new gT(this._computer,e=>this._withResult(e,!0),null,e=>this._withResult(e,!1),this._editor.getOption(48).delay);const o=e=>{const t=e.relatedTarget;if(t&&t instanceof HTMLElement&&this.getDomNode().contains(t)){const e=this.onblur(t,t=>{e.dispose(),o(t)})}else this._onBlur.fire()};this.onfocus(this.getDomNode(),()=>{this._colorPicker&&this.getDomNode().classList.add("colorpicker-hover")}),this.onblur(this.getDomNode(),e=>{this.getDomNode().classList.remove("colorpicker-hover"),this._sticky&&o(e)}),this._register(e.onDidChangeConfiguration(()=>{this._hoverOperation.setHoverTime(this._editor.getOption(48).delay)})),this._register(th.onDidChange(()=>{this._isVisible&&this._lastRange&&this._messages.length>0&&(this._messages=this._messages.map(e=>{var t,i;if(e.data instanceof MA&&(null===(t=this._lastRange)||void 0===t?void 0:t.intersectRanges(e.data.range))&&(null===(i=this._colorPicker)||void 0===i?void 0:i.model.color)){const t=this._colorPicker.model.color;return new OA(e.owner,new MA(e.data.range,{red:t.rgba.r/255,green:t.rgba.g/255,blue:t.rgba.b/255,alpha:t.rgba.a},e.data.provider))}return e}),this._hover.contentsDomNode.textContent="",this._renderMessages(this._lastRange,this._messages))}))}get resizable(){return this._hover.resizable}dispose(){this._hoverOperation.cancel(),this._editor.removeContentWidget(this),super.dispose()}getId(){return this._id}getDomNode(){return this._hover.containerDomNode}showAt(e,t,i){this._showAtPosition=e,this._showAtRange=t,this._hoverVisibleKey.set(!0),this._isVisible=!0,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._editor.layoutContentWidget(this),this._editor.render(),this._stoleFocus=i,i&&this._hover.containerDomNode.focus()}getPosition(){return this._isVisible?{position:this._showAtPosition,range:this._showAtRange,preference:[1,2]}:null}_updateFont(){Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName("code")).forEach(e=>this._editor.applyFontInfo(e))}_updateContents(e){this._hover.contentsDomNode.textContent="",this._hover.contentsDomNode.appendChild(e),this._updateFont(),this._editor.layoutContentWidget(this),this._hover.onContentsChanged()}layout(){const e=Math.max(this._editor.getLayoutInfo().height/4,250),t=Math.max(.66*this._editor.getLayoutInfo().width,500),{fontSize:i,lineHeight:n}=this._editor.getOption(38);this._hover.contentsDomNode.style.fontSize=`${i}px`,this._hover.contentsDomNode.style.lineHeight=`${n}px`,this._hover.contentsDomNode.style.maxHeight=`${e}px`,this._hover.contentsDomNode.style.maxWidth=`${t}px`}onModelDecorationsChanged(){this._isChangingDecorations||this._isVisible&&(this._hoverOperation.cancel(),this._computer.clearResult(),this._colorPicker||this._hoverOperation.start(0))}startShowingAt(e,t,i,n,o,s){const r=Zr(this._lastKeyModifiers,o);if(!(this._lastRange&&this._lastRange.equalsRange(e)&&r&&this._sticky===!!s)){if(this._hoverOperation.cancel(),this._isVisible)if(this._showAtPosition&&this._showAtPosition.lineNumber===e.startLineNumber){let t=[];for(let i=0,n=this._messages.length;i=e.endColumn&&t.push(n)}if(t.length>0&&r){if(function a(e,t){if(e.length!==t.length)return!1;for(let i=0;i{this._isVisible||this._hoverVisibleKey.set(!1)},0),this._isVisible=!1,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._editor.layoutContentWidget(this),this._stoleFocus&&this._editor.focus(),this._hover.resizable.clearResize()),this._isChangingDecorations=!0,this._currentDecorations=[],this._highlightDecorations=this._editor.deltaDecorations(this._highlightDecorations,[]),this._isChangingDecorations=!1,this._renderDisposable&&(this._renderDisposable.dispose(),this._renderDisposable=null),this._colorPicker=null}isColorPickerVisible(){return!!this._colorPicker}onContentsChanged(){this._hover.onContentsChanged()}addAdditionalDecorations(e){this._currentDecorations.push(...e)}_withResult(e,t){this._messages=e,this._lastRange&&this._messages.length>0?this._renderMessages(this._lastRange,this._messages):t&&this.hide()}_renderMessages(e,t){this._renderDisposable&&(this._renderDisposable.dispose(),this._renderDisposable=null),this._colorPicker=null;let i=1073741824,n=t[0].data.range?ro.lift(t[0].data.range):null,o=document.createDocumentFragment(),s=!1;const r=new v,a=[],l=[];t.forEach(e=>{const t=e.data;if(t.range)if(i=Math.min(i,t.range.startColumn),n=n?ro.plusRange(n,t.range):ro.lift(t.range),t instanceof MA){s=!0;const{red:e,green:i,blue:n,alpha:a}=t.color,l=new hc(Math.round(255*e),Math.round(255*i),Math.round(255*n),a),h=new uc(l);if(!this._editor.hasModel())return;const c=this._editor.getModel();let d=new ro(t.range.startLineNumber,t.range.startColumn,t.range.endLineNumber,t.range.endColumn),u={range:t.range,color:t.color};const g=new oT(h,[],0),p=new uT(o,g,this._editor.getOption(127),this._themeService);VL(c,u,t.provider,Aa.None).then(e=>{if(g.colorPresentations=e||[],!this._editor.hasModel())return;const i=this._editor.getModel().getValueInRange(t.range);g.guessColorPresentation(h,i);const n=()=>{let e,t;if(g.presentation.textEdit){e=[g.presentation.textEdit],t=new ro(g.presentation.textEdit.range.startLineNumber,g.presentation.textEdit.range.startColumn,g.presentation.textEdit.range.endLineNumber,g.presentation.textEdit.range.endColumn);const i=this._editor.getModel()._setTrackedRange(null,t,3);this._editor.pushUndoStop(),this._editor.executeEdits("colorpicker",e),t=this._editor.getModel()._getTrackedRange(i)||t}else e=[{identifier:null,range:d,text:g.presentation.label,forceMoveMarkers:!1}],t=d.setEndPosition(d.endLineNumber,d.startColumn+g.presentation.label.length),this._editor.pushUndoStop(),this._editor.executeEdits("colorpicker",e);g.presentation.additionalTextEdits&&(e=[...g.presentation.additionalTextEdits],this._editor.executeEdits("colorpicker",e),this.hide()),this._editor.pushUndoStop(),d=t},s=e=>VL(c,{range:d,color:{red:e.rgba.r/255,green:e.rgba.g/255,blue:e.rgba.b/255,alpha:e.rgba.a}},t.provider,Aa.None).then(e=>{g.colorPresentations=e||[]}),a=g.onColorFlushed(e=>{s(e).then(n)}),l=g.onDidChangeColor(s);this._colorPicker=p,this.showAt(d.getStartPosition(),d,this._shouldFocus),this._updateContents(o),this._colorPicker.layout(),this._renderDisposable=_(a,l,p,r)})}else t instanceof GT?a.push(t):t instanceof IA&&l.push(t)}),this._editor.getOption(84)?(a.length&&r.add(this._markerHoverParticipant.renderHoverParts(a,o)),l.length>0&&r.add(this._markdownHoverParticipant.renderHoverParts(l,o))):(l.length>0&&r.add(this._markdownHoverParticipant.renderHoverParts(l,o)),a.length&&r.add(this._markerHoverParticipant.renderHoverParts(a,o))),this._renderDisposable=r,!s&&o.hasChildNodes()&&(this.showAt(new Tt(e.startLineNumber,i),n,this._shouldFocus),this._updateContents(o)),this._isChangingDecorations=!0,n&&this._currentDecorations.push({range:n,options:PA._DECORATION_OPTIONS}),this._highlightDecorations=this._editor.deltaDecorations(this._highlightDecorations,this._currentDecorations),this._isChangingDecorations=!1}}PA.ID="editor.contrib.modesContentHoverWidget",PA._DECORATION_OPTIONS=xc.register({className:"hoverHighlight"}),Cn((e,t)=>{const i=e.getColor(am);i&&t.addRule(`.monaco-hover .hover-contents a.code-link span:hover { color: ${i}; }`)});class FA extends bb{constructor(e,t){super(),this._id=e,this._editor=t,this._isVisible=!1,this._domNode=document.createElement("div"),this._domNode.className="monaco-hover hidden",this._domNode.setAttribute("aria-hidden","true"),this._domNode.setAttribute("role","tooltip"),this._showAtLineNumber=-1,this._register(this._editor.onDidChangeConfiguration(e=>{e.hasChanged(38)&&this.updateFont()})),this._editor.addOverlayWidget(this)}get isVisible(){return this._isVisible}set isVisible(e){this._isVisible=e,this._domNode.classList.toggle("hidden",!this._isVisible)}getId(){return this._id}getDomNode(){return this._domNode}showAt(e){this._showAtLineNumber=e,this.isVisible||(this.isVisible=!0);const t=this._editor.getLayoutInfo(),i=this._editor.getTopForLineNumber(this._showAtLineNumber),n=this._editor.getScrollTop(),o=this._editor.getOption(54),s=i-n-(this._domNode.clientHeight-o)/2;this._domNode.style.left=`${t.glyphMarginLeft+t.glyphMarginWidth}px`,this._domNode.style.top=`${Math.max(Math.round(s),0)}px`}hide(){this.isVisible&&(this.isVisible=!1)}getPosition(){return null}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}updateFont(){[...Array.prototype.slice.call(this._domNode.getElementsByTagName("code")),...Array.prototype.slice.call(this._domNode.getElementsByClassName("code"))].forEach(e=>this._editor.applyFontInfo(e))}updateContents(e){this._domNode.textContent="",this._domNode.appendChild(e),this.updateFont()}}class BA{constructor(e){this._editor=e,this._lineNumber=-1,this._result=[]}setLineNumber(e){this._lineNumber=e,this._result=[]}clearResult(){this._result=[]}computeSync(){const e=e=>({value:e}),t=this._editor.getLineDecorations(this._lineNumber),i=[];if(!t)return i;for(const n of t){if(!n.options.glyphMarginClassName)continue;const t=n.options.glyphMarginHoverMessage;t&&!sA(t)&&i.push(...ua(t).map(e))}return i}onResult(e,t){this._result=this._result.concat(e)}getResult(){return this._result}getResultWithLoadingMessage(){return this.getResult()}}class WA extends FA{constructor(e,t,i=CT){super(WA.ID,e),this._renderDisposeables=this._register(new v),this._messages=[],this._lastLineNumber=-1,this._markdownRenderer=this._register(new EA({editor:this._editor},t,i)),this._computer=new BA(this._editor),this._hoverOperation=new gT(this._computer,e=>this._withResult(e),void 0,e=>this._withResult(e),300)}dispose(){this._hoverOperation.cancel(),super.dispose()}onModelDecorationsChanged(){this.isVisible&&(this._hoverOperation.cancel(),this._computer.clearResult(),this._hoverOperation.start(0))}startShowingAt(e){this._lastLineNumber!==e&&(this._hoverOperation.cancel(),this.hide(),this._lastLineNumber=e,this._computer.setLineNumber(e),this._hoverOperation.start(0))}hide(){this._lastLineNumber=-1,this._hoverOperation.cancel(),super.hide()}_withResult(e){this._messages=e,this._messages.length>0?this._renderMessages(this._lastLineNumber,this._messages):this.hide()}_renderMessages(e,t){this._renderDisposeables.clear();const i=document.createDocumentFragment();for(const e of t){const t=this._markdownRenderer.render(e.value);this._renderDisposeables.add(t),i.appendChild(Bu("div.hover-row",void 0,t.element))}this.updateContents(i),this.showAt(e)}}function VA(e,t){return!!e[t]}WA.ID="editor.contrib.modesGlyphHoverWidget";class zA{constructor(e,t){this.target=e.target,this.hasTriggerModifier=VA(e.event,t.triggerModifier),this.hasSideBySideModifier=VA(e.event,t.triggerSideBySideModifier),this.isNoneOrSingleMouseDown=e.event.detail<=1}}class HA{constructor(e,t){this.keyCodeIsTriggerKey=e.keyCode===t.triggerKey,this.keyCodeIsSideBySideKey=e.keyCode===t.triggerSideBySideKey,this.hasTriggerModifier=VA(e,t.triggerModifier)}}class UA{constructor(e,t,i,n){this.triggerKey=e,this.triggerModifier=t,this.triggerSideBySideKey=i,this.triggerSideBySideModifier=n}equals(e){return this.triggerKey===e.triggerKey&&this.triggerModifier===e.triggerModifier&&this.triggerSideBySideKey===e.triggerSideBySideKey&&this.triggerSideBySideModifier===e.triggerSideBySideModifier}}function KA(e){return"altKey"===e?H?new UA(57,"metaKey",6,"altKey"):new UA(5,"ctrlKey",6,"altKey"):H?new UA(6,"altKey",57,"metaKey"):new UA(6,"altKey",5,"ctrlKey")}class $A extends C{constructor(e){super(),this._onMouseMoveOrRelevantKeyDown=this._register(new oe),this.onMouseMoveOrRelevantKeyDown=this._onMouseMoveOrRelevantKeyDown.event,this._onExecute=this._register(new oe),this.onExecute=this._onExecute.event,this._onCancel=this._register(new oe),this.onCancel=this._onCancel.event,this._editor=e,this._opts=KA(this._editor.getOption(65)),this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._register(this._editor.onDidChangeConfiguration(e=>{if(e.hasChanged(65)){const e=KA(this._editor.getOption(65));if(this._opts.equals(e))return;this._opts=e,this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._onCancel.fire()}})),this._register(this._editor.onMouseMove(e=>this._onEditorMouseMove(new zA(e,this._opts)))),this._register(this._editor.onMouseDown(e=>this._onEditorMouseDown(new zA(e,this._opts)))),this._register(this._editor.onMouseUp(e=>this._onEditorMouseUp(new zA(e,this._opts)))),this._register(this._editor.onKeyDown(e=>this._onEditorKeyDown(new HA(e,this._opts)))),this._register(this._editor.onKeyUp(e=>this._onEditorKeyUp(new HA(e,this._opts)))),this._register(this._editor.onMouseDrag(()=>this._resetHandler())),this._register(this._editor.onDidChangeCursorSelection(e=>this._onDidChangeCursorSelection(e))),this._register(this._editor.onDidChangeModel(e=>this._resetHandler())),this._register(this._editor.onDidChangeModelContent(()=>this._resetHandler())),this._register(this._editor.onDidScrollChange(e=>{(e.scrollTopChanged||e.scrollLeftChanged)&&this._resetHandler()}))}_onDidChangeCursorSelection(e){e.selection&&e.selection.startColumn!==e.selection.endColumn&&this._resetHandler()}_onEditorMouseMove(e){this._lastMouseMoveEvent=e,this._onMouseMoveOrRelevantKeyDown.fire([e,null])}_onEditorMouseDown(e){this._hasTriggerKeyOnMouseDown=e.hasTriggerModifier,this._lineNumberOnMouseDown=e.target.position?e.target.position.lineNumber:0}_onEditorMouseUp(e){this._hasTriggerKeyOnMouseDown&&this._lineNumberOnMouseDown&&this._lineNumberOnMouseDown===(e.target.position?e.target.position.lineNumber:0)&&this._onExecute.fire(e)}_onEditorKeyDown(e){this._lastMouseMoveEvent&&(e.keyCodeIsTriggerKey||e.keyCodeIsSideBySideKey&&e.hasTriggerModifier)?this._onMouseMoveOrRelevantKeyDown.fire([this._lastMouseMoveEvent,e]):e.hasTriggerModifier&&this._onCancel.fire()}_onEditorKeyUp(e){e.keyCodeIsTriggerKey&&this._onCancel.fire()}_resetHandler(){this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._onCancel.fire()}}var jA=function(e,t){return function(i,n){t(i,n,e)}};let qA=class e{constructor(e,t,i){this.textModelResolverService=t,this.modeService=i,this.toUnhook=new v,this.toUnhookForKeyboard=new v,this.linkDecorations=[],this.currentWordAtPosition=null,this.previousPromise=null,this.editor=e;let o=new $A(e);this.toUnhook.add(o),this.editor.getOption(98)&&this.toUnhook.add(o.onMouseMoveOrRelevantKeyDown(([e,t])=>{this.startFindDefinitionFromMouse(e,Re(t))})),this.toUnhook.add(o.onExecute(e=>{this.isEnabled(e)&&this.gotoDefinition(e.target.position,e.hasSideBySideModifier).then(()=>{this.removeLinkDecorations()},e=>{this.removeLinkDecorations(),n(e)})})),this.toUnhook.add(o.onCancel(()=>{this.removeLinkDecorations(),this.currentWordAtPosition=null}))}static get(t){return t.getContribution(e.ID)}startFindDefinitionFromCursor(e){return this.startFindDefinition(e).then(()=>{this.toUnhookForKeyboard.add(this.editor.onDidChangeCursorPosition(()=>{this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear()})),this.toUnhookForKeyboard.add(this.editor.onKeyDown(e=>{e&&(this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear())}))})}startFindDefinitionFromMouse(e,t){if(!(9===e.target.type&&this.linkDecorations.length>0))return this.editor.hasModel()&&this.isEnabled(e,t)?void this.startFindDefinition(e.target.position):(this.currentWordAtPosition=null,void this.removeLinkDecorations())}startFindDefinition(e){var i;this.toUnhookForKeyboard.clear();const o=e?null===(i=this.editor.getModel())||void 0===i?void 0:i.getWordAtPosition(e):null;if(!o)return this.currentWordAtPosition=null,this.removeLinkDecorations(),Promise.resolve(0);if(this.currentWordAtPosition&&this.currentWordAtPosition.startColumn===o.startColumn&&this.currentWordAtPosition.endColumn===o.endColumn&&this.currentWordAtPosition.word===o.word)return Promise.resolve(0);this.currentWordAtPosition=o;let s=new Jw(this.editor,15);return this.previousPromise&&(this.previousPromise.cancel(),this.previousPromise=null),this.previousPromise=Pa(t=>this.findDefinition(e,t)),this.previousPromise.then(i=>{if(i&&i.length&&s.validate(this.editor))if(i.length>1)this.addDecoration(new ro(e.lineNumber,o.startColumn,e.lineNumber,o.endColumn),(new oA).appendText(t(0,"Click to show {0} definitions.",i.length)));else{let t=i[0];if(!t.uri)return;this.textModelResolverService.createModelReference(t.uri).then(i=>{if(!i.object||!i.object.textEditorModel)return void i.dispose();const{object:{textEditorModel:n}}=i,{startLineNumber:s}=t.range;if(s<1||s>n.getLineCount())return void i.dispose();const r=this.getPreviewValue(n,s,t);let a;a=t.originSelectionRange?ro.lift(t.originSelectionRange):new ro(e.lineNumber,o.startColumn,e.lineNumber,o.endColumn);const l=this.modeService.getModeIdByFilepathOrFirstLine(n.uri);this.addDecoration(a,(new oA).appendCodeblock(l||"",r)),i.dispose()})}else this.removeLinkDecorations()}).then(void 0,n)}getPreviewValue(t,i,n){let o=n.targetSelectionRange?n.range:this.getPreviewRangeBasedOnBrackets(t,i);return o.endLineNumber-o.startLineNumber>=e.MAX_SOURCE_PREVIEW_LINES&&(o=this.getPreviewRangeBasedOnIndentation(t,i)),this.stripIndentationFromPreviewRange(t,i,o)}stripIndentationFromPreviewRange(e,t,i){let n=e.getLineFirstNonWhitespaceColumn(t);for(let o=t+1;on)return new ro(i,1,n+1,1);r=t.findNextBracket(new Tt(a,l))}return new ro(i,1,n+1,1)}addDecoration(e,t){this.linkDecorations=this.editor.deltaDecorations(this.linkDecorations,[{range:e,options:{inlineClassName:"goto-definition-link",hoverMessage:t}}])}removeLinkDecorations(){this.linkDecorations.length>0&&(this.linkDecorations=this.editor.deltaDecorations(this.linkDecorations,[]))}isEnabled(e,t){return this.editor.hasModel()&&e.isNoneOrSingleMouseDown&&6===e.target.type&&(e.hasTriggerModifier||!!t&&t.keyCodeIsTriggerKey)&&Wl.has(this.editor.getModel())}findDefinition(e,t){const i=this.editor.getModel();return i?NI(i,e,t):Promise.resolve(null)}gotoDefinition(e,t){return this.editor.setPosition(e),this.editor.invokeWithinContext(e=>{const i=!t&&this.editor.getOption(74)&&!this.isInPeekEditor(e);return new ZI({openToSide:t,openInPeek:i,muteMessage:!0},{alias:"",label:"",id:"",precondition:void 0}).run(e,this.editor)})}isInPeekEditor(e){const t=e.get(en);return WD.inPeekEditor.getValue(t)}dispose(){this.toUnhook.dispose()}};qA.ID="editor.contrib.gotodefinitionatposition",qA.MAX_SOURCE_PREVIEW_LINES=8,Jn((qA=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([jA(1,Ot),jA(2,nT)],qA)).ID,qA),Cn((e,t)=>{const i=e.getColor(pf);i&&t.addRule(`.monaco-editor .goto-definition-link { color: ${i} !important; }`)});var GA=function(e,t){return function(i,n){t(i,n,e)}};let YA=class e{constructor(e,t,i,n,o,s){this._editor=e,this._instantiationService=t,this._openerService=i,this._modeService=n,this._themeService=o,this._toUnhook=new v,this._isCurrentSticky=!1,this._isMouseDown=!1,this._hoverClicked=!1,this._contentWidget=null,this._glyphWidget=null,this._hoverVisibleKey=cd.hoverVisible.bindTo(s),this._onWidgetResizeEnd=null,this.onWidgetResizeEnd(null),this.addAdditionalDecorations([]),this._hookEvents(),this._didChangeConfigurationHandler=this._editor.onDidChangeConfiguration(e=>{e.hasChanged(48)&&(this._unhookEvents(),this._hookEvents())})}static get(t){return t.getContribution(e.ID)}_hookEvents(){const e=()=>{this._isCurrentSticky||this._hideWidgets()},t=this._editor.getOption(48);this._isHoverEnabled=t.enabled,this._isHoverSticky=t.sticky,this._isHoverEnabled?(this._toUnhook.add(this._editor.onMouseDown(e=>this._onEditorMouseDown(e))),this._toUnhook.add(this._editor.onMouseUp(e=>this._onEditorMouseUp(e))),this._toUnhook.add(this._editor.onMouseMove(e=>this._onEditorMouseMove(e))),this._toUnhook.add(this._editor.onKeyDown(e=>this._onKeyDown(e))),this._toUnhook.add(this._editor.onDidChangeModelDecorations(()=>this._onModelDecorationsChanged()))):(this._toUnhook.add(this._editor.onMouseMove(e=>this._onEditorMouseMove(e))),this._toUnhook.add(this._editor.onKeyDown(e=>this._onKeyDown(e)))),this._toUnhook.add(this._editor.onMouseLeave(()=>{var t,i;this._isCurrentSticky||(null===(i=null===(t=this._contentWidget)||void 0===t?void 0:t.resizable)||void 0===i?void 0:i.isResizing)||e()})),this._toUnhook.add(this._editor.onDidChangeModel(e)),this._toUnhook.add(this._editor.onDidScrollChange(e=>this._onEditorScrollChanged(e)))}_unhookEvents(){this._toUnhook.clear()}_onModelDecorationsChanged(){var e,t;null===(e=this._contentWidget)||void 0===e||e.onModelDecorationsChanged(),null===(t=this._glyphWidget)||void 0===t||t.onModelDecorationsChanged()}_onEditorScrollChanged(e){(e.scrollTopChanged||e.scrollLeftChanged)&&this._hideWidgets()}_onEditorMouseDown(e){this._isMouseDown=!0;const t=e.target.type;9!==t||e.target.detail!==PA.ID?12===t&&e.target.detail===WA.ID||(12!==t&&e.target.detail!==WA.ID&&(this._hoverClicked=!1),this._hideWidgets()):this._hoverClicked=!0}_onEditorMouseUp(e){this._isMouseDown=!1}_onEditorMouseMove(t){var i,n,o,s,r,a,l,h,c;let d=t.target.type;if((null===(n=null===(i=this._contentWidget)||void 0===i?void 0:i.resizable.isResizing)||void 0===n||!n)&&(!this._isMouseDown||!this._hoverClicked)&&(!this._isHoverSticky||9!==d||t.target.detail!==PA.ID)&&(!this._isHoverSticky||(null===(s=null===(o=t.event.browserEvent.view)||void 0===o?void 0:o.getSelection())||void 0===s?void 0:s.isCollapsed))&&(this._isHoverSticky||9!==d||t.target.detail!==PA.ID||null===(r=this._contentWidget)||void 0===r||!r.isColorPickerVisible())&&!(this._isHoverSticky&&12===d&&t.target.detail===WA.ID||this._isCurrentSticky)){if(7===d){const e=this._editor.getOption(38).typicalHalfwidthCharacterWidth/2,i=t.target.detail;i&&!i.isAfterLines&&"number"==typeof i.horizontalDistanceToText&&i.horizontalDistanceToTexte.startsWith("ced-colorBox"))&&t.target.range.endColumn-t.target.range.startColumn==1?new ro(t.target.range.startLineNumber,t.target.range.startColumn+1,t.target.range.endLineNumber,t.target.range.endColumn+1):t.target.range;this._contentWidget||this._initContentWidget();const n=e.getModifiers(t);null===(h=this._contentWidget)||void 0===h||h.startShowingAt(i,0,!1,Sl.Mouse,n)}}else 2===d?(null===(c=this._contentWidget)||void 0===c||c.hide(),this._isHoverEnabled&&t.target.position&&(this._glyphWidget||(this._glyphWidget=new WA(this._editor,this._modeService,this._openerService)),this._glyphWidget.startShowingAt(t.target.position.lineNumber))):this._hideWidgets()}}static getModifiers(e){const t=[],i=e.event;return i.altKey&&t.push(512),i.ctrlKey&&t.push(256),i.metaKey&&t.push(2048),i.shiftKey&&t.push(1024),t}_onKeyDown(e){this._isCurrentSticky&&9!==e.keyCode||e.toKeybinding().isModifierKey()||this._hideWidgets()}_onWidgetBlur(){this._isCurrentSticky&&this._hideWidgets()}_hideWidgets(){var e,t,i;this._isMouseDown&&this._hoverClicked&&(null===(e=this._contentWidget)||void 0===e?void 0:e.isColorPickerVisible())||(this._hoverClicked=!1,this._isCurrentSticky=!1,null===(t=this._glyphWidget)||void 0===t||t.hide(),null===(i=this._contentWidget)||void 0===i||i.hide())}isColorPickerVisible(){var e;return(null===(e=this._contentWidget)||void 0===e?void 0:e.isColorPickerVisible())||!1}showContentHover(e,t,i,n){var o;this._isCurrentSticky=!!n,this._contentWidget||this._initContentWidget(),null===(o=this._contentWidget)||void 0===o||o.startShowingAt(e,t,i,Sl.Action,[],this._isCurrentSticky)}addAdditionalDecorations(e){var t;null===(t=this._contentWidget)||void 0===t||t.addAdditionalDecorations(e)}_initContentWidget(){this._contentWidget=new PA(this._editor,this._hoverVisibleKey,this._instantiationService,this._themeService),this._toUnhook.add(this._contentWidget.onBlur(()=>this._onWidgetBlur())),this._onWidgetResizeEnd&&(this._toUnhook.add(this._contentWidget.resizable.onResizeEnd(this._onWidgetResizeEnd)),this._onWidgetResizeEnd=null)}onWidgetResizeEnd(e){e&&this._contentWidget?this._toUnhook.add(this._contentWidget.resizable.onResizeEnd(e)):this._onWidgetResizeEnd=e}dispose(){var e,t;this._unhookEvents(),this._toUnhook.dispose(),this._didChangeConfigurationHandler.dispose(),null===(e=this._glyphWidget)||void 0===e||e.dispose(),null===(t=this._contentWidget)||void 0===t||t.dispose()}};YA.ID="editor.contrib.hover",Jn((YA=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([GA(1,Et),GA(2,vT),GA(3,nT),GA(4,pn),GA(5,en)],YA)).ID,YA),Qn(class extends Yn{constructor(){super({id:"editor.action.showHover",label:t(0,"Show Hover"),alias:"Show Hover",precondition:void 0,kbOpts:{kbExpr:cd.editorTextFocus,primary:On(2089,2087),weight:100}})}run(e,t,i){var n,o,s;if(!t.hasModel())return;let r=t;if(i.uri){const t=e.get(It),n=e.get(At).getModel(mt.parse(i.uri));if(null==n?void 0:n.isAttachedToEditor())for(const e of t.listCodeEditors())if(e.hasModel()&&e.getModel()===n&&e.hasTextFocus()){r=e;break}}let a=YA.get(r);if(!a)return;const l=null!==(n=i.position)&&void 0!==n?n:r.getPosition(),h=new ro(l.lineNumber,l.column,l.lineNumber,l.column),c=null!==(o=i.sticky)&&void 0!==o?o:2===r.getOption(2),d=null!==(s=i.mode)&&void 0!==s?s:1;a.showContentHover(h,d,c,i.sticky)}}),Qn(class extends Yn{constructor(){super({id:"editor.action.showDefinitionPreviewHover",label:t(0,"Show Definition Preview Hover"),alias:"Show Definition Preview Hover",precondition:void 0})}run(e,t){let i=YA.get(t);if(!i)return;const n=t.getPosition();if(!n)return;const o=new ro(n.lineNumber,n.column,n.lineNumber,n.column),s=qA.get(t).startFindDefinitionFromCursor(n);s?s.then(()=>{i.showContentHover(o,1,!0)}):i.showContentHover(o,1,!0)}}),Cn((e,t)=>{const i=e.getColor(hf);i&&t.addRule(`.monaco-editor .hoverHighlight { background-color: ${i}; }`);const n=e.getColor(cf);n&&t.addRule(`.monaco-editor .monaco-hover { background-color: ${n}; }`);const o=e.getColor(uf);o&&(t.addRule(`.monaco-editor .monaco-hover { border: 1px solid ${o}; }`),t.addRule(`.monaco-editor .monaco-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${o.transparent(.5)}; }`),t.addRule(`.monaco-editor .monaco-hover hr { border-top: 1px solid ${o.transparent(.5)}; }`),t.addRule(`.monaco-editor .monaco-hover hr { border-bottom: 0px solid ${o.transparent(.5)}; }`));const s=e.getColor(am);s&&t.addRule(`.monaco-editor .monaco-hover a { color: ${s}; }`);const r=e.getColor(df);r&&t.addRule(`.monaco-editor .monaco-hover { color: ${r}; }`);const a=e.getColor(gf);a&&t.addRule(`.monaco-editor .monaco-hover .hover-row .actions { background-color: ${a}; }`);const l=e.getColor(lm);l&&t.addRule(`.monaco-editor .monaco-hover code { background-color: ${l}; }`)});class ZA{constructor(e,t,i){this._editRange=e,this._originalSelection=t,this._text=i}getEditOperations(e,t){t.addTrackedEditOperation(this._editRange,this._text)}computeCursorState(e,t){const i=t.getInverseEditOperations()[0].range;return this._originalSelection.isEmpty()?new ao(i.endLineNumber,Math.min(this._originalSelection.positionColumn,i.endColumn),i.endLineNumber,Math.min(this._originalSelection.positionColumn,i.endColumn)):new ao(i.endLineNumber,i.endColumn-this._text.length,i.endLineNumber,i.endColumn)}}let XA=class e{constructor(e,t){this.decorationIds=[],this.editor=e,this.editorWorkerService=t}static get(t){return t.getContribution(e.ID)}dispose(){}run(t,i){this.currentRequest&&this.currentRequest.cancel();const o=this.editor.getSelection(),s=this.editor.getModel();if(!s||!o)return;let r=o;if(r.startLineNumber!==r.endLineNumber)return;const a=new Jw(this.editor,5),l=s.uri;return this.editorWorkerService.canNavigateValueSet(l)?(this.currentRequest=Pa(e=>this.editorWorkerService.navigateValueSet(l,r,i)),this.currentRequest.then(i=>{if(!i||!i.range||!i.value)return;if(!a.validate(this.editor))return;let o=ro.lift(i.range),s=i.range,l=i.value.length-(r.endColumn-r.startColumn);s={startLineNumber:s.startLineNumber,startColumn:s.startColumn,endLineNumber:s.endLineNumber,endColumn:s.startColumn+i.value.length},l>1&&(r=new ao(r.startLineNumber,r.startColumn,r.endLineNumber,r.endColumn+l-1));const h=new ZA(o,r,i.value);this.editor.pushUndoStop(),this.editor.executeCommand(t,h),this.editor.pushUndoStop(),this.decorationIds=this.editor.deltaDecorations(this.decorationIds,[{range:s,options:e.DECORATION}]),this.decorationRemover&&this.decorationRemover.cancel(),this.decorationRemover=za(350),this.decorationRemover.then(()=>this.decorationIds=this.editor.deltaDecorations(this.decorationIds,[])).catch(n)}).catch(n)):Promise.resolve(void 0)}};XA.ID="editor.contrib.inPlaceReplaceController",XA.DECORATION=xc.register({className:"valueSetReplacement"}),Jn((XA=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,1)}}(0,Sy)],XA)).ID,XA),Qn(class extends Yn{constructor(){super({id:"editor.action.inPlaceReplace.up",label:t(0,"Replace with Previous Value"),alias:"Replace with Previous Value",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:3154,weight:100}})}run(e,t){const i=XA.get(t);return i?i.run(this.id,!0):Promise.resolve(void 0)}}),Qn(class extends Yn{constructor(){super({id:"editor.action.inPlaceReplace.down",label:t(0,"Replace with Next Value"),alias:"Replace with Next Value",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:3156,weight:100}})}run(e,t){const i=XA.get(t);return i?i.run(this.id,!1):Promise.resolve(void 0)}}),Cn((e,t)=>{const i=e.getColor(P_);i&&t.addRule(`.monaco-editor.vs .valueSetReplacement { outline: solid 2px ${i}; }`)});class QA{constructor(e,t){this._selection=e,this._cursors=t,this._selectionId=null}getEditOperations(e,t){let i=function n(e,t){t.sort((e,t)=>e.lineNumber===t.lineNumber?e.column-t.column:e.lineNumber-t.lineNumber);for(let e=t.length-2;e>=0;e--)t[e].lineNumber===t[e+1].lineNumber&&t.splice(e,1);let i=[],n=0,o=0,s=t.length;for(let r=1,a=e.getLineCount();r<=a;r++){let a=e.getLineContent(r),l=a.length+1,h=0;if(oe.getLineTokens(t),getLanguageIdentifier:()=>e.getLanguageIdentifier(),getLanguageIdAtPosition:(t,i)=>e.getLanguageIdAtPosition(t,i),getLineContent:null};if(n.startLineNumber===n.endLineNumber&&1===e.getLineMaxColumn(n.startLineNumber)){let i=n.startLineNumber,o=this._isMovingDown?i+1:i-1;1===e.getLineMaxColumn(o)?t.addEditOperation(new ro(1,1,1,1),null):(t.addEditOperation(new ro(i,1,i,1),e.getLineContent(o)),t.addEditOperation(new ro(o,1,o,e.getLineMaxColumn(o)),null)),n=new ao(o,1,o,1)}else{let i,s;if(this._isMovingDown){s=e.getLineContent(i=n.endLineNumber+1),t.addEditOperation(new ro(i-1,e.getLineMaxColumn(i-1),i,e.getLineMaxColumn(i)),null);let h=s;if(this.shouldAutoIndent(e,n)){let c=this.matchEnterRule(e,a,o,i,n.startLineNumber-1);if(null!==c){let t=tM(c+eM(Xt(e.getLineContent(i)),o),o,r);h=t+this.trimLeft(s)}else{l.getLineContent=t=>e.getLineContent(t===n.startLineNumber?i:t);let t=ac.getGoodIndentForLine(this._autoIndent,l,e.getLanguageIdAtPosition(i,1),n.startLineNumber,a);if(null!==t){let n=Xt(e.getLineContent(i)),a=eM(t,o);if(a!==eM(n,o)){let e=tM(a,o,r);h=e+this.trimLeft(s)}}}t.addEditOperation(new ro(n.startLineNumber,1,n.startLineNumber,1),h+"\n");let d=this.matchEnterRuleMovingDown(e,a,o,n.startLineNumber,i,h);if(null!==d)0!==d&&this.getIndentEditsOfMovingBlock(e,t,n,o,r,d);else{l.getLineContent=t=>t===n.startLineNumber?h:e.getLineContent(t>=n.startLineNumber+1&&t<=n.endLineNumber+1?t-1:t);let s=ac.getGoodIndentForLine(this._autoIndent,l,e.getLanguageIdAtPosition(i,1),n.startLineNumber+1,a);if(null!==s){const i=Xt(e.getLineContent(n.startLineNumber)),a=eM(s,o),l=eM(i,o);a!==l&&this.getIndentEditsOfMovingBlock(e,t,n,o,r,a-l)}}}else t.addEditOperation(new ro(n.startLineNumber,1,n.startLineNumber,1),h+"\n")}else if(s=e.getLineContent(i=n.startLineNumber-1),t.addEditOperation(new ro(i,1,i+1,1),null),t.addEditOperation(new ro(n.endLineNumber,e.getLineMaxColumn(n.endLineNumber),n.endLineNumber,e.getLineMaxColumn(n.endLineNumber)),"\n"+s),this.shouldAutoIndent(e,n)){l.getLineContent=t=>e.getLineContent(t===i?n.startLineNumber:t);let s=this.matchEnterRule(e,a,o,n.startLineNumber,n.startLineNumber-2);if(null!==s)0!==s&&this.getIndentEditsOfMovingBlock(e,t,n,o,r,s);else{let s=ac.getGoodIndentForLine(this._autoIndent,l,e.getLanguageIdAtPosition(n.startLineNumber,1),i,a);if(null!==s){let i=Xt(e.getLineContent(n.startLineNumber)),a=eM(s,o),l=eM(i,o);a!==l&&this.getIndentEditsOfMovingBlock(e,t,n,o,r,a-l)}}}}this._selectionId=t.trackSelection(n)}buildIndentConverter(e,t,i){return{shiftIndent:n=>sd.shiftIndent(n,n.length+1,e,t,i),unshiftIndent:n=>sd.unshiftIndent(n,n.length+1,e,t,i)}}parseEnterResult(e,t,i,n,o){if(o){let s=o.indentation;o.indentAction===Ph.None?s=o.indentation+o.appendText:o.indentAction===Ph.Indent?s=o.indentation+o.appendText:o.indentAction===Ph.IndentOutdent?s=o.indentation:o.indentAction===Ph.Outdent&&(s=t.unshiftIndent(o.indentation)+o.appendText);let r=e.getLineContent(n);if(this.trimLeft(r).indexOf(this.trimLeft(s))>=0){let o=Xt(e.getLineContent(n)),r=Xt(s),a=ac.getIndentMetadata(e,n);return null!==a&&2&a&&(r=t.unshiftIndent(r)),eM(r,i)-eM(o,i)}}return null}matchEnterRuleMovingDown(e,t,i,n,o,s){if(Qt(s)>=0){let s=e.getLineMaxColumn(o),r=ac.getEnterAction(this._autoIndent,e,new ro(o,s,o,s));return this.parseEnterResult(e,t,i,n,r)}{let o=n-1;for(;o>=1&&!(Qt(e.getLineContent(o))>=0);)o--;if(o<1||n>e.getLineCount())return null;let s=e.getLineMaxColumn(o),r=ac.getEnterAction(this._autoIndent,e,new ro(o,s,o,s));return this.parseEnterResult(e,t,i,n,r)}}matchEnterRule(e,t,i,n,o,s){let r=o;for(;r>=1;){let t;if(Qt(t=r===o&&void 0!==s?s:e.getLineContent(r))>=0)break;r--}if(r<1||n>e.getLineCount())return null;let a=e.getLineMaxColumn(r),l=ac.getEnterAction(this._autoIndent,e,new ro(r,a,r,a));return this.parseEnterResult(e,t,i,n,l)}trimLeft(e){return e.replace(/^\s+/,"")}shouldAutoIndent(e,t){if(this._autoIndent<4)return!1;if(!e.isCheapToTokenize(t.startLineNumber))return!1;let i=e.getLanguageIdAtPosition(t.startLineNumber,1);return i===e.getLanguageIdAtPosition(t.endLineNumber,1)&&null!==ac.getIndentRulesSupport(i)}getIndentEditsOfMovingBlock(e,t,i,n,o,s){for(let r=i.startLineNumber;r<=i.endLineNumber;r++){let a=Xt(e.getLineContent(r)),l=tM(eM(a,n)+s,n,o);l!==a&&(t.addEditOperation(new ro(r,1,r,a.length+1),l),r===i.endLineNumber&&i.endColumn<=a.length+1&&""===l&&(this._moveEndLineSelectionShrink=!0))}}computeCursorState(e,t){let i=t.getTrackedSelection(this._selectionId);return this._moveEndPositionDown&&(i=i.setEndPosition(i.endLineNumber+1,1)),this._moveEndLineSelectionShrink&&i.startLineNumber=o)return null;let s=[];for(let t=n;t<=o;t++)s.push(e.getLineContent(t));let r=s.slice(0);return r.sort(nM.getCollator().compare),!0===i&&(r=r.reverse()),{startLineNumber:n,endLineNumber:o,before:s,after:r}}nM._COLLATOR=null;class sM extends Yn{constructor(e,t){super(t),this.down=e}run(e,t){if(!t.hasModel())return;const i=t.getSelections().map((e,t)=>({selection:e,index:t,ignore:!1}));i.sort((e,t)=>ro.compareRangesUsingStarts(e.selection,t.selection));let n=i[0];for(let e=1;enew Tt(e.positionLineNumber,e.positionColumn)));let o=t.getSelection();if(null===o)return;let s=new QA(o,n);t.pushUndoStop(),t.executeCommands(this.id,[s]),t.pushUndoStop()}}lM.ID="editor.action.trimTrailingWhitespace";class hM extends Yn{run(e,t){if(!t.hasModel())return;const i=t.getSelection();let n=this._getRangesToDelete(t),o=[];for(let e=0,t=n.length-1;ejL.replace(e,""));t.pushUndoStop(),t.executeEdits(this.id,r,s),t.pushUndoStop()}}class cM extends Yn{run(e,t){const i=t.getSelections();if(null===i)return;const n=t.getModel();if(null===n)return;const o=t.getOption(115),s=[];for(const e of i)if(e.isEmpty()){const i=e.getStartPosition(),r=t.getConfiguredWordAtPosition(i);if(!r)continue;const a=new ro(i.lineNumber,r.startColumn,i.lineNumber,r.endColumn),l=n.getValueInRange(a);s.push(jL.replace(a,this._modifyText(l,o)))}else{const t=n.getValueInRange(e);s.push(jL.replace(e,this._modifyText(t,o)))}t.pushUndoStop(),t.executeEdits(this.id,s),t.pushUndoStop()}}Qn(class extends sM{constructor(){super(!1,{id:"editor.action.copyLinesUpAction",label:t(0,"Copy Line Up"),alias:"Copy Line Up",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:1552,linux:{primary:3600},weight:100},menuOpts:{menuId:Ln.MenubarSelectionMenu,group:"2_line",title:t(0,"&&Copy Line Up"),order:1}})}}),Qn(class extends sM{constructor(){super(!0,{id:"editor.action.copyLinesDownAction",label:t(0,"Copy Line Down"),alias:"Copy Line Down",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:1554,linux:{primary:3602},weight:100},menuOpts:{menuId:Ln.MenubarSelectionMenu,group:"2_line",title:t(0,"Co&&py Line Down"),order:2}})}}),Qn(class extends Yn{constructor(){super({id:"editor.action.duplicateSelection",label:t(0,"Duplicate Selection"),alias:"Duplicate Selection",precondition:cd.writable,menuOpts:{menuId:Ln.MenubarSelectionMenu,group:"2_line",title:t(0,"&&Duplicate Selection"),order:5}})}run(e,t,i){if(!t.hasModel())return;const n=[],o=t.getSelections(),s=t.getModel();for(const e of o)if(e.isEmpty())n.push(new JA(e,!0));else{const t=new ao(e.endLineNumber,e.endColumn,e.endLineNumber,e.endColumn);n.push(new jc(t,s.getValueInRange(e)))}t.pushUndoStop(),t.executeCommands(this.id,n),t.pushUndoStop()}}),Qn(class extends rM{constructor(){super(!1,{id:"editor.action.moveLinesUpAction",label:t(0,"Move Line Up"),alias:"Move Line Up",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:528,linux:{primary:528},weight:100},menuOpts:{menuId:Ln.MenubarSelectionMenu,group:"2_line",title:t(0,"Mo&&ve Line Up"),order:3}})}}),Qn(class extends rM{constructor(){super(!0,{id:"editor.action.moveLinesDownAction",label:t(0,"Move Line Down"),alias:"Move Line Down",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:530,linux:{primary:530},weight:100},menuOpts:{menuId:Ln.MenubarSelectionMenu,group:"2_line",title:t(0,"Move &&Line Down"),order:4}})}}),Qn(class extends aM{constructor(){super(!1,{id:"editor.action.sortLinesAscending",label:t(0,"Sort Lines Ascending"),alias:"Sort Lines Ascending",precondition:cd.writable})}}),Qn(class extends aM{constructor(){super(!0,{id:"editor.action.sortLinesDescending",label:t(0,"Sort Lines Descending"),alias:"Sort Lines Descending",precondition:cd.writable})}}),Qn(lM),Qn(class extends Yn{constructor(){super({id:"editor.action.deleteLines",label:t(0,"Delete Line"),alias:"Delete Line",precondition:cd.writable,kbOpts:{kbExpr:cd.textInputFocus,primary:3113,weight:100}})}run(e,t){if(!t.hasModel())return;let i=this._getLinesToRemove(t),n=t.getModel();if(1===n.getLineCount()&&1===n.getLineMaxColumn(1))return;let o=0,s=[],r=[];for(let e=0,t=i.length;e1&&(h=n.getLineMaxColumn(a-=1)),s.push(jL.replace(new ao(a,h,l,c),"")),r.push(new ao(a-o,t.positionColumn,a-o,t.positionColumn)),o+=t.endLineNumber-t.startLineNumber+1}t.pushUndoStop(),t.executeEdits(this.id,s,r),t.pushUndoStop()}_getLinesToRemove(e){let t=e.getSelections().map(e=>{let t=e.endLineNumber;return e.startLineNumbere.startLineNumber===t.startLineNumber?e.endLineNumber-t.endLineNumber:e.startLineNumber-t.startLineNumber);let i=[],n=t[0];for(let e=1;e=t[e].startLineNumber?n.endLineNumber=t[e].endLineNumber:(i.push(n),n=t[e]);return i.push(n),i}}),Qn(class extends Yn{constructor(){super({id:"editor.action.indentLines",label:t(0,"Indent Line"),alias:"Indent Line",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:2137,weight:100}})}run(e,t){const i=t._getViewModel();i&&(t.pushUndoStop(),t.executeCommands(this.id,ld.indent(i.cursorConfig,t.getModel(),t.getSelections())),t.pushUndoStop())}}),Qn(class extends Yn{constructor(){super({id:"editor.action.outdentLines",label:t(0,"Outdent Line"),alias:"Outdent Line",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:2135,weight:100}})}run(e,t){Cd.Outdent.runEditorCommand(e,t,null)}}),Qn(class extends Yn{constructor(){super({id:"editor.action.insertLineBefore",label:t(0,"Insert Line Above"),alias:"Insert Line Above",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:3075,weight:100}})}run(e,t){const i=t._getViewModel();i&&(t.pushUndoStop(),t.executeCommands(this.id,ld.lineInsertBefore(i.cursorConfig,t.getModel(),t.getSelections())))}}),Qn(class extends Yn{constructor(){super({id:"editor.action.insertLineAfter",label:t(0,"Insert Line Below"),alias:"Insert Line Below",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:2051,weight:100}})}run(e,t){const i=t._getViewModel();i&&(t.pushUndoStop(),t.executeCommands(this.id,ld.lineInsertAfter(i.cursorConfig,t.getModel(),t.getSelections())))}}),Qn(class extends hM{constructor(){super({id:"deleteAllLeft",label:t(0,"Delete All Left"),alias:"Delete All Left",precondition:cd.writable,kbOpts:{kbExpr:cd.textInputFocus,primary:0,mac:{primary:2049},weight:100}})}_getEndCursorState(e,t){let i=null,n=[],o=0;return t.forEach(t=>{let s;if(1===t.endColumn&&o>0){let e=t.startLineNumber-o;s=new ao(e,t.startColumn,e,t.startColumn)}else s=new ao(t.startLineNumber,t.startColumn,t.startLineNumber,t.startColumn);o+=t.endLineNumber-t.startLineNumber,t.intersectRanges(e)?i=s:n.push(s)}),i&&n.unshift(i),n}_getRangesToDelete(e){let t=e.getSelections();if(null===t)return[];let i=t,n=e.getModel();return null===n?[]:(i.sort(ro.compareRangesUsingStarts),i=i.map(e=>{if(e.isEmpty()){if(1===e.startColumn){let t=Math.max(1,e.startLineNumber-1),i=1===e.startLineNumber?1:n.getLineContent(t).length+1;return new ro(t,i,e.startLineNumber,1)}return new ro(e.startLineNumber,1,e.startLineNumber,e.startColumn)}return new ro(e.startLineNumber,1,e.endLineNumber,e.endColumn)}))}}),Qn(class extends hM{constructor(){super({id:"deleteAllRight",label:t(0,"Delete All Right"),alias:"Delete All Right",precondition:cd.writable,kbOpts:{kbExpr:cd.textInputFocus,primary:0,mac:{primary:297,secondary:[2068]},weight:100}})}_getEndCursorState(e,t){let i=null,n=[];for(let o=0,s=t.length,r=0;o{if(e.isEmpty()){const i=t.getLineMaxColumn(e.startLineNumber);return e.startColumn===i?new ro(e.startLineNumber,e.startColumn,e.startLineNumber+1,1):new ro(e.startLineNumber,e.startColumn,e.startLineNumber,i)}return e});return n.sort(ro.compareRangesUsingStarts),n}}),Qn(class extends Yn{constructor(){super({id:"editor.action.joinLines",label:t(0,"Join Lines"),alias:"Join Lines",precondition:cd.writable,kbOpts:{kbExpr:cd.editorTextFocus,primary:0,mac:{primary:296},weight:100}})}run(e,t){let i=t.getSelections();if(null===i)return;let n=t.getSelection();if(null===n)return;i.sort(ro.compareRangesUsingStarts);let o=[],s=i.reduce((e,t)=>e.isEmpty()?e.endLineNumber===t.startLineNumber?(n.equalsSelection(e)&&(n=t),t):t.startLineNumber>e.endLineNumber+1?(o.push(e),t):new ao(e.startLineNumber,e.startColumn,t.endLineNumber,t.endColumn):t.startLineNumber>e.endLineNumber?(o.push(e),t):new ao(e.startLineNumber,e.startColumn,t.endLineNumber,t.endColumn));o.push(s);let r=t.getModel();if(null===r)return;let a=[],l=[],h=n,c=0;for(let e=0,t=o.length;e=1){let e=!0;""===m&&(e=!1),!e||" "!==m.charAt(m.length-1)&&"\t"!==m.charAt(m.length-1)||(e=!1,m=m.replace(/[\s\uFEFF\xA0]+$/g," "));let n=t.substr(i-1);m+=(e?" ":"")+n,g=e?n.length+1:n.length}else g=0}let f=new ro(d,u,t,i);if(!f.isEmpty()){let e;s.isEmpty()?(a.push(jL.replace(f,m)),e=new ao(f.startLineNumber-c,m.length-g+1,d-c,m.length-g+1)):s.startLineNumber===s.endLineNumber?(a.push(jL.replace(f,m)),e=new ao(s.startLineNumber-c,s.startColumn,s.endLineNumber-c,s.endColumn)):(a.push(jL.replace(f,m)),e=new ao(s.startLineNumber-c,s.startColumn,s.startLineNumber-c,m.length-p)),null!==ro.intersectRanges(f,n)?h=e:l.push(e)}c+=f.endLineNumber-f.startLineNumber}l.unshift(h),t.pushUndoStop(),t.executeEdits(this.id,a,l),t.pushUndoStop()}}),Qn(class extends Yn{constructor(){super({id:"editor.action.transpose",label:t(0,"Transpose characters around the cursor"),alias:"Transpose characters around the cursor",precondition:cd.writable})}run(e,t){let i=t.getSelections();if(null===i)return;let n=t.getModel();if(null===n)return;let o=[];for(let e=0,t=i.length;e=r){if(s.lineNumber===n.getLineCount())continue;let e=new ro(s.lineNumber,Math.max(1,s.column-1),s.lineNumber+1,1),t=n.getValueInRange(e).split("").reverse().join("");o.push(new $c(new ao(s.lineNumber,Math.max(1,s.column-1),s.lineNumber+1,1),t))}else{let e=new ro(s.lineNumber,Math.max(1,s.column-1),s.lineNumber,s.column+1),t=n.getValueInRange(e).split("").reverse().join("");o.push(new Yc(e,t,new ao(s.lineNumber,s.column+1,s.lineNumber,s.column+1)))}}t.pushUndoStop(),t.executeCommands(this.id,o),t.pushUndoStop()}}),Qn(class extends cM{constructor(){super({id:"editor.action.transformToUppercase",label:t(0,"Transform to Uppercase"),alias:"Transform to Uppercase",precondition:cd.writable})}_modifyText(e,t){return e.toLocaleUpperCase()}}),Qn(class extends cM{constructor(){super({id:"editor.action.transformToLowercase",label:t(0,"Transform to Lowercase"),alias:"Transform to Lowercase",precondition:cd.writable})}_modifyText(e,t){return e.toLocaleLowerCase()}}),Qn(class extends cM{constructor(){super({id:"editor.action.transformToTitlecase",label:t(0,"Transform to Title Case"),alias:"Transform to Title Case",precondition:cd.writable})}_modifyText(e,t){const i=("\r\n\t "+t).split("");let n="",o=!0;for(let t=0;t=0?(o=!0,n+=s):o?(o=!1,n+=s.toLocaleUpperCase()):n+=s.toLocaleLowerCase()}return n}}),Qn(class extends cM{constructor(){super({id:"editor.action.transformToSnakecase",label:t(0,"Transform to Snake Case"),alias:"Transform to Snake Case",precondition:cd.writable})}_modifyText(e,t){return e.replace(/(\p{Ll})(\p{Lu})/gmu,"$1_$2").replace(/([^\b_])(\p{Lu})(\p{Ll})/gmu,"$1_$2$3").toLocaleLowerCase()}});var dM=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class uM{constructor(e,t){this._link=e,this._provider=t}toJSON(){return{range:this.range,url:this.url,tooltip:this.tooltip}}get range(){return this._link.range}get url(){return this._link.url}get tooltip(){return this._link.tooltip}resolve(e){return dM(this,void 0,void 0,(function*(){return this._link.url?this._link.url:"function"==typeof this._provider.resolveLink?Promise.resolve(this._provider.resolveLink(this._link,e)).then(t=>(this._link=t||this._link,this._link.url?this.resolve(e):Promise.reject(new Error("missing")))):Promise.reject(new Error("missing"))}))}}class gM{constructor(e){this._disposables=new v;let t=[];for(const[i,n]of e){const e=i.links.map(e=>new uM(e,n));t=gM._union(t,e),m(i)&&this._disposables.add(i)}this.links=t}dispose(){this._disposables.dispose(),this.links.length=0}static _union(e,t){let i,n,o,s,r=[];for(i=0,o=0,n=e.length,s=t.length;iPromise.resolve(n.provideLinks(e,t)).then(e=>{e&&(i[s]=[e,n])},o));return Promise.all(n).then(()=>{const e=new gM(ta(i));return t.isCancellationRequested?(e.dispose(),new gM([])):e})}sn.registerCommand("_executeLinkProvider",(e,...t)=>dM(void 0,void 0,void 0,(function*(){let[i,n]=t;Ne(i instanceof mt),"number"!=typeof n&&(n=0);const o=e.get(At).getModel(i);if(!o)return[];const s=yield pM(o,Aa.None);if(!s)return[];for(let e=0;e{this._onEditorMouseMove(e,t)})),this.listenersToRemove.add(n.onExecute(e=>{this.onEditorMouseUp(e)})),this.listenersToRemove.add(n.onCancel(e=>{this.cleanUpActiveLinkDecoration()})),this.enabled=e.getOption(58),this.listenersToRemove.add(e.onDidChangeConfiguration(t=>{const i=e.getOption(58);this.enabled!==i&&(this.enabled=i,this.updateDecorations([]),this.stop(),this.beginCompute())})),this.listenersToRemove.add(e.onDidChangeModelContent(e=>this.onChange())),this.listenersToRemove.add(e.onDidChangeModel(e=>this.onModelChanged())),this.listenersToRemove.add(e.onDidChangeModelLanguage(e=>this.onModelModeChanged())),this.listenersToRemove.add(Yl.onDidChange(e=>this.onModelModeChanged())),this.timeout=new Ua,this.computePromise=null,this.activeLinksList=null,this.currentOccurrences={},this.activeLinkDecorationId=null,this.beginCompute()}static get(t){return t.getContribution(e.ID)}onModelChanged(){this.currentOccurrences={},this.activeLinkDecorationId=null,this.stop(),this.beginCompute()}onModelModeChanged(){this.stop(),this.beginCompute()}onChange(){this.timeout.setIfNotSet(()=>this.beginCompute(),e.RECOMPUTE_TIME)}beginCompute(){return e=this,void 0,i=function*(){if(!this.editor.hasModel()||!this.enabled)return;const e=this.editor.getModel();if(Yl.has(e)){this.activeLinksList&&(this.activeLinksList.dispose(),this.activeLinksList=null),this.computePromise=Pa(t=>pM(e,t));try{this.activeLinksList=yield this.computePromise,this.updateDecorations(this.activeLinksList.links)}catch(e){n(e)}finally{this.computePromise=null}}},new((t=void 0)||(t=Promise))((function(n,o){function s(e){try{a(i.next(e))}catch(e){o(e)}}function r(e){try{a(i.throw(e))}catch(e){o(e)}}function a(e){e.done?n(e.value):function i(e){return e instanceof t?e:new t((function(t){t(e)}))}(e.value).then(s,r)}a((i=i.apply(e,[])).next())}));var e,t,i}updateDecorations(e){const t="altKey"===this.editor.getOption(65);let i=[],n=Object.keys(this.currentOccurrences);for(let e=0,t=n.length;e{t.activate(e,i),this.activeLinkDecorationId=t.decorationId})}else this.cleanUpActiveLinkDecoration()}cleanUpActiveLinkDecoration(){const e="altKey"===this.editor.getOption(65);if(this.activeLinkDecorationId){const t=this.currentOccurrences[this.activeLinkDecorationId];t&&this.editor.changeDecorations(i=>{t.deactivate(i,e)}),this.activeLinkDecorationId=null}}onEditorMouseUp(e){if(!this.isEnabled(e))return;const t=this.getLinkOccurrence(e.target.position);t&&this.openLinkOccurrence(t,e.hasSideBySideModifier,!0)}openLinkOccurrence(e,i,o=!1){if(!this.openerService)return;const{link:s}=e;s.resolve(Aa.None).then(e=>{if("string"==typeof e&&this.editor.hasModel()){const t=this.editor.getModel().uri;if(t.scheme===Cs.file&&e.startsWith(`${Cs.file}:`)){const i=mt.parse(e);if(i.scheme===Cs.file){const n=Ss(i);let o=null;n.startsWith("/./")?o=`.${n.substr(1)}`:n.startsWith("//./")&&(o=`.${n.substr(2)}`),o&&(e=Ns(t,o))}}}return this.openerService.open(e,{openToSide:i,fromUserGesture:o,allowContributedOpeners:!0})},e=>{const i=e instanceof Error?e.message:e;"invalid"===i?this.notificationService.warn(t(0,"Failed to open this link because it is not well-formed: {0}",s.url.toString())):"missing"===i?this.notificationService.warn(t(0,"Failed to open this link because its target is missing.")):n(e)})}getLinkOccurrence(e){if(!this.editor.hasModel()||!e)return null;const t=this.editor.getModel().getDecorationsInRange({startLineNumber:e.lineNumber,startColumn:e.column,endLineNumber:e.lineNumber,endColumn:e.column},0,!0);for(const e of t){const t=this.currentOccurrences[e.id];if(t)return t}return null}isEnabled(e,t){return Boolean(6===e.target.type&&(e.hasTriggerModifier||t&&t.keyCodeIsTriggerKey))}stop(){var e;this.timeout.cancel(),this.activeLinksList&&(null===(e=this.activeLinksList)||void 0===e||e.dispose(),this.activeLinksList=null),this.computePromise&&(this.computePromise.cancel(),this.computePromise=null)}dispose(){this.listenersToRemove.dispose(),this.stop(),this.timeout.dispose()}};bM.ID="editor.linkDetector",bM.RECOMPUTE_TIME=1e3,Jn((bM=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([mM(1,vT),mM(2,cw)],bM)).ID,bM),Qn(class extends Yn{constructor(){super({id:"editor.action.openLink",label:t(0,"Open Link"),alias:"Open Link",precondition:void 0})}run(e,t){let i=bM.get(t);if(!i)return;if(!t.hasModel())return;let n=t.getSelections();for(let e of n){let t=i.getLinkOccurrence(e.getEndPosition());t&&i.openLinkOccurrence(t,!1)}}}),Cn((e,t)=>{const i=e.getColor(pf);i&&t.addRule(`.monaco-editor .detected-link-active { color: ${i} !important; }`)});var vM=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const CM={Visible:new Ji("parameterHintsVisible",!1),MultipleSignatures:new Ji("parameterHintsMultipleSignatures",!1)};function wM(e,t,i,n){return vM(this,void 0,void 0,(function*(){const s=Ol.ordered(e);for(const r of s)try{const o=yield r.provideSignatureHelp(e,t,n,i);if(o)return o}catch(e){o(e)}}))}sn.registerCommand("_executeSignatureHelpProvider",(e,...t)=>vM(void 0,void 0,void 0,(function*(){const[i,n,o]=t;Ne(mt.isUri(i)),Ne(Tt.isIPosition(n)),Ne("string"==typeof o||!o);const s=yield e.get(Ot).createModelReference(i);try{const e=yield wM(s.object.textEditorModel,Tt.lift(n),{triggerKind:El.Invoke,isRetrigger:!1,triggerCharacter:o},Aa.None);if(!e)return;return setTimeout(()=>e.dispose(),0),e.value}finally{s.dispose()}})));var yM,SM=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};!function(e){e.Default={type:0},e.Pending=class{constructor(e,t){this.request=e,this.previouslyActiveHints=t,this.type=2}},e.Active=class{constructor(e){this.hints=e,this.type=1}}}(yM||(yM={}));class LM extends C{constructor(e,t=LM.DEFAULT_DELAY){super(),this._onChangedHints=this._register(new oe),this.onChangedHints=this._onChangedHints.event,this.triggerOnType=!1,this.verbose=!1,this._state=yM.Default,this._pendingTriggers=[],this._lastSignatureHelpResult=this._register(new w),this.triggerChars=new kr,this.retriggerChars=new kr,this.triggerId=0,this.editor=e,this.throttledDelayer=new Wa(t),this.showLoadingDelayer=new Wa(LM.LOADING_DELAY),this._register(this.editor.onDidChangeConfiguration(()=>this.onEditorConfigurationChange())),this._register(this.editor.onDidChangeModel(e=>this.onModelChanged())),this._register(this.editor.onDidChangeModelLanguage(e=>this.onModelChanged())),this._register(this.editor.onDidChangeCursorSelection(e=>this.onCursorChange(e))),this._register(this.editor.onDidChangeModelContent(e=>this.onModelContentChange())),this._register(Ol.onDidChange(this.onModelChanged,this)),this._register(this.editor.onDidType(e=>this.onDidType(e))),this.onEditorConfigurationChange(),this.onModelChanged()}get state(){return this._state}set state(e){2===this._state.type&&this._state.request.cancel(),this._state=e}cancel(e=!1,t=!0){this.state=yM.Default,this.throttledDelayer.cancel(),t&&this.showLoadingDelayer.cancel(),e||this._onChangedHints.fire(void 0)}trigger(e,t){const i=this.editor.getModel();if(!i||!Ol.has(i))return;const o=++this.triggerId;this._pendingTriggers.push(e),this.throttledDelayer.trigger(()=>this.doTrigger(o),t).catch(n),this.shouldShowVerbose(e)&&this.showLoadingDelayer.trigger(()=>this.showLoadingMessage()).catch(n)}shouldShowVerbose(e){return this.verbose&&!e.auto&&e.triggerKind===El.Invoke}next(){if(1!==this.state.type)return;const e=this.state.hints.signatures.length,t=this.state.hints.activeSignature,i=t%e==e-1,n=this.editor.getOption(72).cycle;!(e<2||i)||n?this.updateActiveSignature(i&&n?0:t+1):this.cancel()}previous(){if(1!==this.state.type)return;const e=this.state.hints.signatures.length,t=this.state.hints.activeSignature,i=0===t,n=this.editor.getOption(72).cycle;!(e<2||i)||n?this.updateActiveSignature(i&&n?e-1:t-1):this.cancel()}updateActiveSignature(e){1===this.state.type&&(this.state=new yM.Active(Object.assign(Object.assign({},this.state.hints),{activeSignature:e})),this._onChangedHints.fire(this.state.hints))}doTrigger(e){return SM(this,void 0,void 0,(function*(){const t=1===this.state.type||2===this.state.type,i=this.getLastActiveHints();if(this.cancel(!0,!1),0===this._pendingTriggers.length)return!1;const o=this._pendingTriggers.reduce(DM);this._pendingTriggers=[];const s={triggerKind:o.triggerKind,triggerCharacter:o.triggerCharacter,isRetrigger:t,activeSignatureHelp:i};if(!this.editor.hasModel())return!1;const r=this.editor.getModel(),a=this.editor.getPosition();this.state=new yM.Pending(Pa(e=>wM(r,a,s,e)),i);try{let t=yield this.state.request;return this.showLoadingDelayer.cancel(),e!==this.triggerId?(null==t||t.dispose(),!1):t&&t.value.signatures&&0!==t.value.signatures.length||this.shouldShowVerbose(o)?(this.state=new yM.Active((t=null!=t?t:LM.MISSING_SIGNATURE_HELP_RESULT).value),this._lastSignatureHelpResult.value=t,this._onChangedHints.fire(this.state.hints),!0):(null==t||t.dispose(),this._lastSignatureHelpResult.clear(),this.cancel(),!1)}catch(t){return e===this.triggerId&&(this.state=yM.Default),n(t),!1}}))}getLastActiveHints(){switch(this.state.type){case 1:return this.state.hints;case 2:return this.state.previouslyActiveHints;default:return}}showLoadingMessage(){return this._onChangedHints.fire(LM.LOADING_SIGNATURE_HELP_VALUE),!0}get isTriggered(){return 1===this.state.type||2===this.state.type||this.throttledDelayer.isTriggered()}onModelChanged(){this.cancel(),this.triggerChars=new kr,this.retriggerChars=new kr;const e=this.editor.getModel();if(e)for(const t of Ol.ordered(e)){for(const e of t.signatureHelpTriggerCharacters||[])this.triggerChars.add(e.charCodeAt(0)),this.retriggerChars.add(e.charCodeAt(0));for(const e of t.signatureHelpRetriggerCharacters||[])this.retriggerChars.add(e.charCodeAt(0))}}onDidType(e){if(!this.triggerOnType)return;const t=e.length-1,i=e.charCodeAt(t);(this.triggerChars.has(i)||this.isTriggered&&this.retriggerChars.has(i))&&this.trigger({triggerKind:El.TriggerCharacter,triggerCharacter:e.charAt(t),auto:!0})}onCursorChange(e){"mouse"===e.source?this.cancel():this.isTriggered&&this.trigger({triggerKind:El.ContentChange})}onModelContentChange(){this.isTriggered&&this.trigger({triggerKind:El.ContentChange})}onEditorConfigurationChange(){this.triggerOnType=this.editor.getOption(72).enabled,this.verbose=this.editor.getOption(72).verbose,this.triggerOnType||this.cancel()}dispose(){this.cancel(!0),super.dispose()}}function DM(e,t){switch(t.triggerKind){case El.Invoke:return t;case El.ContentChange:return e;case El.TriggerCharacter:default:return t}}LM.DEFAULT_DELAY=120,LM.LOADING_DELAY=1e3,LM.MISSING_SIGNATURE_HELP_RESULT={value:{signatures:[{label:"No parameter info found",parameters:[]}],activeSignature:0,activeParameter:0},dispose:()=>{}},LM.LOADING_SIGNATURE_HELP_VALUE={signatures:[{label:"Loading...",parameters:[]}],activeSignature:0,activeParameter:0};var EM=function(e,t){return function(i,n){t(i,n,e)}};const xM=Bu,kM=cy("parameter-hints-next",un.chevronDown,t(0,"Icon for show next parameter hint.")),NM=cy("parameter-hints-previous",un.chevronUp,t(0,"Icon for show previous parameter hint."));let IM=class e extends C{constructor(e,t,i,n){super(),this.editor=e,this.renderDisposeables=this._register(new v),this.visible=!1,this.announcedLabel=null,this.allowEditorOverflow=!0,this.markdownRenderer=this._register(new EA({editor:e},n,i)),this.model=this._register(new LM(e)),this.keyVisible=CM.Visible.bindTo(t),this.keyMultipleSignatures=CM.MultipleSignatures.bindTo(t),this._register(this.model.onChangedHints(e=>{e?(this.show(),this.editor.getOption(99)?this.renderAsList(e):this.render(e)):this.hide()}))}createParamaterHintDOMNodes(){const e=xM(".editor-widget.parameter-hints-widget"),t=Mu(e,xM(".phwrapper"));t.tabIndex=-1;const i=Mu(t,xM(".controls")),n=Mu(i,xM(".button"+fn.asCSSSelector(NM))),o=Mu(i,xM(".overloads")),s=Mu(i,xM(".button"+fn.asCSSSelector(kM))),r=kd(Ed(n,"click"));this._register(r(this.previous,this));const a=kd(Ed(s,"click"));this._register(a(this.next,this));const l=xM(".body"),h=new Kb(l,{});this._register(h),t.appendChild(h.getDomNode());const c=this.editor.getOption(99)?".signature.signature-list":".signature",d=Mu(l,xM(c)),u=Mu(l,xM(".docs"));e.style.userSelect="text",this.domNodes={element:e,signature:d,overloads:o,docs:u,scrollbar:h},this.editor.addContentWidget(this),this.hide(),this._register(this.editor.onDidChangeCursorSelection(e=>{this.visible&&this.editor.layoutContentWidget(this)}));const g=()=>{if(!this.domNodes)return;const e=this.editor.getOption(38);this.domNodes.element.style.fontSize=`${e.fontSize}px`};g(),this._register(ie.chain(this.editor.onDidChangeConfiguration.bind(this.editor)).filter(e=>e.hasChanged(38)).on(g,null)),this._register(this.editor.onDidLayoutChange(e=>this.updateMaxHeight())),this.updateMaxHeight()}show(){this.visible||(this.domNodes||this.createParamaterHintDOMNodes(),this.keyVisible.set(!0),this.visible=!0,setTimeout(()=>{this.domNodes&&this.domNodes.element.classList.add("visible")},100),this.editor.layoutContentWidget(this))}hide(){this.renderDisposeables.clear(),this.visible&&(this.keyVisible.reset(),this.visible=!1,this.announcedLabel=null,this.domNodes&&this.domNodes.element.classList.remove("visible"),this.editor.layoutContentWidget(this))}getPosition(){return this.visible?{position:this.editor.getPosition(),preference:[1,2]}:null}renderSignature(e,t,i){const n=Mu(e,xM(".code")),o=this.editor.getOption(38);n.style.fontSize=`${o.fontSize}px`,n.style.fontFamily=o.fontFamily,t.parameters.length>0?this.renderParameters(n,t,i):Mu(n,xM("span")).textContent=t.label}renderAsList(e){this.renderDisposeables.clear();const t=this.domNodes;t&&(t.signature.innerHTML="",t.docs.innerHTML="",e.signatures.forEach((i,n)=>{var o;0!==n&&Mu(t.signature,xM("hr"));const s=null!==(o=i.activeParameter)&&void 0!==o?o:e.activeParameter;this.renderSignature(t.signature,i,s)}),this.editor.layoutContentWidget(this),t.scrollbar.scanDomNode())}render(e){var i;if(this.renderDisposeables.clear(),!this.domNodes)return;const n=e.signatures.length>1;this.domNodes.element.classList.toggle("multiple",n),this.keyMultipleSignatures.set(n),this.domNodes.signature.innerText="",this.domNodes.docs.innerText="";const o=e.signatures[e.activeSignature];if(!o)return;const s=null!==(i=o.activeParameter)&&void 0!==i?i:e.activeParameter;this.renderSignature(this.domNodes.signature,o,s);const r=o.parameters[s];if(null==r?void 0:r.documentation){const e=xM("span.documentation");if("string"==typeof r.documentation)e.textContent=r.documentation;else{const t=this.renderMarkdownDocs(r.documentation);e.appendChild(t.element)}Mu(this.domNodes.docs,xM("p",{},e))}if(void 0===o.documentation);else if("string"==typeof o.documentation)Mu(this.domNodes.docs,xM("p",{},o.documentation));else{const e=this.renderMarkdownDocs(o.documentation);Mu(this.domNodes.docs,e.element)}const a=this.hasDocs(o,r);if(this.domNodes.signature.classList.toggle("has-docs",a),this.domNodes.docs.classList.toggle("empty",!a),this.domNodes.overloads.textContent=String(e.activeSignature+1).padStart(e.signatures.length.toString().length,"0")+"/"+e.signatures.length,r){const e=this.getParameterLabel(o,s);this.announcedLabel!==e&&(MS(t(0,"{0}, hint",e)),this.announcedLabel=e)}this.editor.layoutContentWidget(this),this.domNodes.scrollbar.scanDomNode()}renderMarkdownDocs(e){const t=this.renderDisposeables.add(this.markdownRenderer.render(e,{asyncRenderCallback:()=>{var e;null===(e=this.domNodes)||void 0===e||e.scrollbar.scanDomNode()}}));return t.element.classList.add("markdown-docs"),t}hasDocs(e,t){return!!(t&&"string"==typeof t.documentation&&Ie(t.documentation).length>0||t&&"object"==typeof t.documentation&&Ie(t.documentation).value.length>0||e.documentation&&"string"==typeof e.documentation&&Ie(e.documentation).length>0||e.documentation&&"object"==typeof e.documentation&&Ie(e.documentation.value).length>0)}renderParameters(e,t,i){const[n,o]=this.getParameterLabelOffsets(t,i),s=document.createElement("span");s.textContent=t.label.substring(0,n);const r=document.createElement("span");r.textContent=t.label.substring(n,o),r.className="parameter active";const a=document.createElement("span");a.textContent=t.label.substring(o),Mu(e,s,r,a)}getParameterLabel(e,t){const i=e.parameters[t];return Array.isArray(i.label)?e.label.substring(i.label[0],i.label[1]):i.label}getParameterLabelOffsets(e,t){const i=e.parameters[t];if(i){if(Array.isArray(i.label))return i.label;if(i.label.length){const t=new RegExp(`(\\W|^)${$t(i.label)}(?=\\W|$)`,"g");t.test(e.label);const n=t.lastIndex-i.label.length;return n>=0?[n,t.lastIndex]:[0,0]}return[0,0]}return[0,0]}next(){this.editor.focus(),this.model.next()}previous(){this.editor.focus(),this.model.previous()}cancel(){this.model.cancel()}getDomNode(){return this.domNodes||this.createParamaterHintDOMNodes(),this.domNodes.element}getId(){return e.ID}trigger(e){this.model.trigger(e,0)}updateMaxHeight(){if(!this.domNodes)return;const e=`${Math.max(this.editor.getLayoutInfo().height/4,250)}px`;this.domNodes.element.style.maxHeight=e;const t=this.domNodes.element.getElementsByClassName("phwrapper");t.length&&(t[0].style.maxHeight=e)}};IM.ID="editor.widget.parameterHintsWidget",IM=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([EM(1,en),EM(2,vT),EM(3,nT)],IM),Cn((e,t)=>{const i=e.getColor(uf);i&&(t.addRule(`.monaco-editor .parameter-hints-widget { border: ${e.type===ln.HIGH_CONTRAST?2:1}px solid ${i}; }`),t.addRule(`.monaco-editor .parameter-hints-widget.multiple .body { border-left: 1px solid ${i.transparent(.5)}; }`),t.addRule(`.monaco-editor .parameter-hints-widget .signature.has-docs { border-bottom: 1px solid ${i.transparent(.5)}; }`));const n=e.getColor(cf);n&&t.addRule(`.monaco-editor .parameter-hints-widget { background-color: ${n}; }`);const o=e.getColor(am);o&&t.addRule(`.monaco-editor .parameter-hints-widget a { color: ${o}; }`);const s=e.getColor(df);s&&t.addRule(`.monaco-editor .parameter-hints-widget { color: ${s}; }`);const r=e.getColor(lm);r&&t.addRule(`.monaco-editor .parameter-hints-widget code { background-color: ${r}; }`)});let TM=class e extends C{constructor(e,t){super(),this.editor=e,this.widget=this._register(t.createInstance(IM,this.editor))}static get(t){return t.getContribution(e.ID)}cancel(){this.widget.cancel()}previous(){this.widget.previous()}next(){this.widget.next()}trigger(e){this.widget.trigger(e)}};TM.ID="editor.controller.parameterHints",Jn((TM=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,1)}}(0,Et)],TM)).ID,TM),Qn(class extends Yn{constructor(){super({id:"editor.action.triggerParameterHints",label:t(0,"Trigger Parameter Hints"),alias:"Trigger Parameter Hints",precondition:cd.hasSignatureHelpProvider,kbOpts:{kbExpr:cd.editorTextFocus,primary:3082,weight:100}})}run(e,t,i){const n=TM.get(t);n&&n.trigger({triggerKind:El.Invoke,auto:i.auto})}});const AM=Gn.bindToContribution(TM.get);Xn(new AM({id:"closeParameterHints",precondition:CM.Visible,handler:e=>e.cancel(),kbOpts:{weight:175,kbExpr:cd.focus,primary:9,secondary:[1033]}})),Xn(new AM({id:"showPrevParameterHint",precondition:Ri.and(CM.Visible,CM.MultipleSignatures),handler:e=>e.previous(),kbOpts:{weight:175,kbExpr:cd.focus,primary:16,secondary:[528],mac:{primary:16,secondary:[528,302]}}})),Xn(new AM({id:"showNextParameterHint",precondition:Ri.and(CM.Visible,CM.MultipleSignatures),handler:e=>e.next(),kbOpts:{weight:175,kbExpr:cd.focus,primary:18,secondary:[530],mac:{primary:18,secondary:[530,300]}}}));var MM=function(e,t){return function(i,n){t(i,n,e)}};const OM=new Ji("renameInputVisible",!1);let RM=class{constructor(e,t,i,n,o){this._editor=e,this._acceptKeybindings=t,this._themeService=i,this._keybindingService=n,this._disposables=new v,this.allowEditorOverflow=!0,this._visibleContextKey=OM.bindTo(o),this._editor.addContentWidget(this),this._disposables.add(this._editor.onDidChangeConfiguration(e=>{e.hasChanged(38)&&this._updateFont()})),this._disposables.add(i.onDidColorThemeChange(this._updateStyles,this))}dispose(){this._disposables.dispose(),this._editor.removeContentWidget(this)}getId(){return"__renameInputWidget"}getDomNode(){if(!this._domNode){this._domNode=document.createElement("div"),this._domNode.className="monaco-editor rename-box",this._input=document.createElement("input"),this._input.className="rename-input",this._input.type="text",this._input.setAttribute("aria-label",t(0,"Rename input. Type new name and press Enter to commit.")),this._domNode.appendChild(this._input),this._label=document.createElement("div"),this._label.className="rename-label",this._domNode.appendChild(this._label);const e=()=>{var e,i;const[n,o]=this._acceptKeybindings;this._keybindingService.lookupKeybinding(n),this._label.innerText=t(0,"{0} to Rename, {1} to Preview",null===(e=this._keybindingService.lookupKeybinding(n))||void 0===e?void 0:e.getLabel(),null===(i=this._keybindingService.lookupKeybinding(o))||void 0===i?void 0:i.getLabel())};e(),this._disposables.add(this._keybindingService.onDidUpdateKeybindings(e)),this._updateFont(),this._updateStyles(this._themeService.getColorTheme())}return this._domNode}_updateStyles(e){var t,i,n,o;if(!this._input||!this._domNode)return;const s=e.getColor(hm);this._domNode.style.backgroundColor=String(null!==(t=e.getColor(qm))&&void 0!==t?t:""),this._domNode.style.boxShadow=s?` 0 0 8px 2px ${s}`:"",this._domNode.style.color=String(null!==(i=e.getColor(dm))&&void 0!==i?i:""),this._input.style.backgroundColor=String(null!==(n=e.getColor(cm))&&void 0!==n?n:"");const r=e.getColor(um);this._input.style.borderWidth=r?"1px":"0px",this._input.style.borderStyle=r?"solid":"none",this._input.style.borderColor=null!==(o=null==r?void 0:r.toString())&&void 0!==o?o:"none"}_updateFont(){if(!this._input||!this._label)return;const e=this._editor.getOption(38);this._input.style.fontFamily=e.fontFamily,this._input.style.fontWeight=e.fontWeight,this._input.style.fontSize=`${e.fontSize}px`,this._label.style.fontSize=`${.8*e.fontSize}px`}getPosition(){return this._visible?{position:this._position,preference:[2,1]}:null}afterRender(e){e||this.cancelInput(!0)}acceptInput(e){this._currentAcceptInput&&this._currentAcceptInput(e)}cancelInput(e){this._currentCancelInput&&this._currentCancelInput(e)}getInput(e,t,i,n,o,s){this._domNode.classList.toggle("preview",o),this._position=new Tt(e.startLineNumber,e.startColumn),this._input.value=t,this._input.setAttribute("selectionStart",i.toString()),this._input.setAttribute("selectionEnd",n.toString()),this._input.size=Math.max(1.1*(e.endColumn-e.startColumn),20);const r=new v;return new Promise(e=>{this._currentCancelInput=t=>(this._currentAcceptInput=void 0,this._currentCancelInput=void 0,e(t),!0),this._currentAcceptInput=i=>{0!==this._input.value.trim().length&&this._input.value!==t?(this._currentAcceptInput=void 0,this._currentCancelInput=void 0,e({newName:this._input.value,wantsPreview:o&&i})):this.cancelInput(!0)},s.onCancellationRequested(()=>this.cancelInput(!0)),r.add(this._editor.onDidBlurEditorWidget(()=>this.cancelInput(!1))),this._show()}).finally(()=>{r.dispose(),this._hide()})}_show(){this._editor.revealLineInCenterIfOutsideViewport(this._position.lineNumber,0),this._visible=!0,this._visibleContextKey.set(!0),this._editor.layoutContentWidget(this),setTimeout(()=>{this._input.focus(),this._input.setSelectionRange(parseInt(this._input.getAttribute("selectionStart")),parseInt(this._input.getAttribute("selectionEnd")))},100)}_hide(){this._visible=!1,this._visibleContextKey.reset(),this._editor.layoutContentWidget(this)}};RM=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([MM(2,pn),MM(3,FS),MM(4,en)],RM);const PM=kt("logService");var FM;!function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Info=2]="Info",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.Off=6]="Off"}(FM||(FM={}));const BM=FM.Info;class WM extends C{constructor(){super(...arguments),this.level=BM,this._onDidChangeLogLevel=this._register(new oe)}setLevel(e){this.level!==e&&(this.level=e,this._onDidChangeLogLevel.fire(this.level))}getLevel(){return this.level}}class VM extends WM{constructor(e=BM){super(),this.setLevel(e)}trace(e,...t){this.getLevel()<=FM.Trace&&console.log("%cTRACE","color: #888",e,...t)}debug(e,...t){this.getLevel()<=FM.Debug&&console.log("%cDEBUG","background: #eee; color: #888",e,...t)}info(e,...t){this.getLevel()<=FM.Info&&console.log("%c INFO","color: #33f",e,...t)}error(e,...t){this.getLevel()<=FM.Error&&console.log("%c ERR","color: #f33",e,...t)}dispose(){}}class zM extends C{constructor(e){super(),this.logger=e,this._register(e)}getLevel(){return this.logger.getLevel()}trace(e,...t){this.logger.trace(e,...t)}debug(e,...t){this.logger.debug(e,...t)}info(e,...t){this.logger.info(e,...t)}error(e,...t){this.logger.error(e,...t)}}const HM=kt("textResourceConfigurationService"),UM=kt("textResourcePropertiesService");var KM=function(e,t){return function(i,n){t(i,n,e)}},$M=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class jM{constructor(e,t){this.model=e,this.position=t,this._providerRenameIdx=0,this._providers=Al.ordered(e)}hasProvider(){return this._providers.length>0}resolveRenameLocation(e){return $M(this,void 0,void 0,(function*(){const t=[];for(this._providerRenameIdx=0;this._providerRenameIdx0?t.join("\n"):void 0}:{range:ro.fromPositions(this.position),text:"",rejectReason:t.length>0?t.join("\n"):void 0}}))}provideRenameEdits(e,t){return $M(this,void 0,void 0,(function*(){return this._provideRenameEdits(e,this._providerRenameIdx,[],t)}))}_provideRenameEdits(e,i,n,o){return $M(this,void 0,void 0,(function*(){const s=this._providers[i];if(!s)return{edits:[],rejectReason:n.join("\n")};const r=yield s.provideRenameEdits(this.model,this.position,e,o);return r?r.rejectReason?this._provideRenameEdits(e,i+1,n.concat(r.rejectReason),o):r:this._provideRenameEdits(e,i+1,n.concat(t(0,"No result.")),o)}))}}let qM=class e{constructor(e,t,i,n,o,s,r){this.editor=e,this._instaService=t,this._notificationService=i,this._bulkEditService=n,this._progressService=o,this._logService=s,this._configService=r,this._dispoableStore=new v,this._cts=new Oa,this._renameInputField=this._dispoableStore.add(new qa(()=>this._dispoableStore.add(this._instaService.createInstance(RM,this.editor,["acceptRenameInput","acceptRenameInputWithPreview"]))))}static get(t){return t.getContribution(e.ID)}dispose(){this._dispoableStore.dispose(),this._cts.dispose(!0)}run(){return $M(this,void 0,void 0,(function*(){if(this._cts.dispose(!0),!this.editor.hasModel())return;const e=this.editor.getPosition(),i=new jM(this.editor.getModel(),e);if(!i.hasProvider())return;let n;this._cts=new ey(this.editor,5);try{const e=i.resolveRenameLocation(this._cts.token);this._progressService.showWhile(e,250),n=yield e}catch(i){return void RS.get(this.editor).showMessage(i||t(0,"An unknown error occurred while resolving rename location"),e)}if(!n)return;if(n.rejectReason)return void RS.get(this.editor).showMessage(n.rejectReason,e);if(this._cts.token.isCancellationRequested)return;this._cts.dispose(),this._cts=new ey(this.editor,5,n.range);let o=this.editor.getSelection(),s=0,r=n.text.length;ro.isEmpty(o)||ro.spansMultipleLines(o)||!ro.containsRange(n.range,o)||(s=Math.max(0,o.startColumn-n.range.startColumn),r=Math.min(n.range.endColumn,o.endColumn)-n.range.startColumn);const a=this._bulkEditService.hasPreviewHandler()&&this._configService.getValue(this.editor.getModel().uri,"editor.rename.enablePreview"),l=yield this._renameInputField.value.getInput(n.range,n.text,s,r,a,this._cts.token);if("boolean"==typeof l)return void(l&&this.editor.focus());this.editor.focus();const h=Fa(i.provideRenameEdits(l.newName,this._cts.token),this._cts.token).then(e=>$M(this,void 0,void 0,(function*(){e&&this.editor.hasModel()&&(e.rejectReason?this._notificationService.info(e.rejectReason):this._bulkEditService.apply(pS.convert(e),{editor:this.editor,showPreview:l.wantsPreview,label:t(0,"Renaming '{0}'",null==n?void 0:n.text),quotableLabel:t(0,"Renaming {0}",null==n?void 0:n.text)}).then(e=>{e.ariaSummary&&MS(t(0,"Successfully renamed '{0}' to '{1}'. Summary: {2}",n.text,l.newName,e.ariaSummary))}).catch(e=>{this._notificationService.error(t(0,"Rename failed to apply edits")),this._logService.error(e)}))})),e=>{this._notificationService.error(t(0,"Rename failed to compute edits")),this._logService.error(e)});return this._progressService.showWhile(h,250),h}))}acceptRenameInput(e){this._renameInputField.value.acceptInput(e)}cancelRenameInput(){this._renameInputField.value.cancelInput(!0)}};qM.ID="editor.contrib.renameController",Jn((qM=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([KM(1,Et),KM(2,cw),KM(3,gS),KM(4,Iy),KM(5,PM),KM(6,HM)],qM)).ID,qM),Qn(class extends Yn{constructor(){super({id:"editor.action.rename",label:t(0,"Rename Symbol"),alias:"Rename Symbol",precondition:Ri.and(cd.writable,cd.hasRenameProvider),kbOpts:{kbExpr:cd.editorTextFocus,primary:60,weight:100},contextMenuOpts:{group:"1_modification",order:1.1}})}runCommand(e,t){const i=e.get(It),[o,s]=Array.isArray(t)&&t||[void 0,void 0];return mt.isUri(o)&&Tt.isIPosition(s)?i.openCodeEditor({resource:o},i.getActiveCodeEditor()).then(e=>{e&&(e.setPosition(s),e.invokeWithinContext(t=>(this.reportTelemetry(t,e),this.run(t,e))))},n):super.runCommand(e,t)}run(e,t){const i=qM.get(t);return i?i.run():Promise.resolve()}});const GM=Gn.bindToContribution(qM.get);Xn(new GM({id:"acceptRenameInput",precondition:OM,handler:e=>e.acceptRenameInput(!1),kbOpts:{weight:199,kbExpr:cd.focus,primary:3}})),Xn(new GM({id:"acceptRenameInputWithPreview",precondition:Ri.and(OM,Ri.has("config.editor.rename.enablePreview")),handler:e=>e.acceptRenameInput(!0),kbOpts:{weight:199,kbExpr:cd.focus,primary:1027}})),Xn(new GM({id:"cancelRenameInput",precondition:OM,handler:e=>e.cancelRenameInput(),kbOpts:{weight:199,kbExpr:cd.focus,primary:9,secondary:[1033]}})),Zn("_executeDocumentRenameProvider",(function(e,t,...i){const[n]=i;return Ne("string"==typeof n),function o(e,t,i){return $M(this,void 0,void 0,(function*(){const n=new jM(e,t),o=yield n.resolveRenameLocation(Aa.None);return(null==o?void 0:o.rejectReason)?{edits:[],rejectReason:o.rejectReason}:n.provideRenameEdits(i,Aa.None)}))}(e,t,n)})),an.as(lg.Configuration).registerConfiguration({id:"editor",properties:{"editor.rename.enablePreview":{scope:5,description:t(0,"Enable/disable the ability to preview changes before renaming"),default:!0,type:"boolean"}}});var YM=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class ZM{provideSelectionRanges(e,t){return YM(this,void 0,void 0,(function*(){const i=[];for(const n of t){const t=[];i.push(t);const o=new Map;yield new Promise(t=>ZM._bracketsRightYield(t,0,e,n,o)),yield new Promise(i=>ZM._bracketsLeftYield(i,0,e,n,o,t))}return i}))}static _bracketsRightYield(e,t,i,n,o){const s=new Map,r=Date.now();for(;;){if(t>=ZM._maxRounds){e();break}if(!n){e();break}let a=i.findNextBracket(n);if(!a){e();break}if(Date.now()-r>ZM._maxDuration){setTimeout(()=>ZM._bracketsRightYield(e,t+1,i,n,o));break}const l=a.close[0];if(a.isOpen){let e=s.has(l)?s.get(l):0;s.set(l,e+1)}else{let e=s.has(l)?s.get(l):0;if(e-=1,s.set(l,Math.max(0,e)),e<0){let e=o.get(l);e||(e=new L,o.set(l,e)),e.push(a.range)}}n=a.range.getEndPosition()}}static _bracketsLeftYield(e,t,i,n,o,s){const r=new Map,a=Date.now();for(;;){if(t>=ZM._maxRounds&&0===o.size){e();break}if(!n){e();break}let l=i.findPrevBracket(n);if(!l){e();break}if(Date.now()-a>ZM._maxDuration){setTimeout(()=>ZM._bracketsLeftYield(e,t+1,i,n,o,s));break}const h=l.close[0];if(l.isOpen){let e=r.has(h)?r.get(h):0;if(e-=1,r.set(h,Math.max(0,e)),e<0){let e=o.get(h);if(e){let t=e.shift();0===e.size&&o.delete(h);const n=ro.fromPositions(l.range.getEndPosition(),t.getStartPosition()),r=ro.fromPositions(l.range.getStartPosition(),t.getEndPosition());s.push({range:n}),s.push({range:r}),ZM._addBracketLeading(i,r,s)}}}else{let e=r.has(h)?r.get(h):0;r.set(h,e+1)}n=l.range.getStartPosition()}}static _addBracketLeading(e,t,i){if(t.startLineNumber===t.endLineNumber)return;const n=t.startLineNumber,o=e.getLineFirstNonWhitespaceColumn(n);0!==o&&o!==t.startColumn&&(i.push({range:ro.fromPositions(new Tt(n,o),t.getEndPosition())}),i.push({range:ro.fromPositions(new Tt(n,1),t.getEndPosition())}));const s=n-1;if(s>0){const n=e.getLineFirstNonWhitespaceColumn(s);n===t.startColumn&&n!==e.getLineLastNonWhitespaceColumn(s)&&(i.push({range:ro.fromPositions(new Tt(s,n),t.getEndPosition())}),i.push({range:ro.fromPositions(new Tt(s,1),t.getEndPosition())}))}}}ZM._maxDuration=30,ZM._maxRounds=2;var XM=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class QM{constructor(e,t){this.index=e,this.ranges=t}mov(e){let t=this.index+(e?1:-1);if(t<0||t>=this.ranges.length)return this;const i=new QM(t,this.ranges);return i.ranges[t].equalsRange(this.ranges[this.index])?i.mov(e):i}}class JM{constructor(e){this._editor=e,this._ignoreSelection=!1}static get(e){return e.getContribution(JM.ID)}dispose(){var e;null===(e=this._selectionListener)||void 0===e||e.dispose()}run(e){return XM(this,void 0,void 0,(function*(){if(!this._editor.hasModel())return;const t=this._editor.getSelections(),i=this._editor.getModel();if(!Xl.has(i))return;if(this._state||(yield tO(i,t.map(e=>e.getPosition()),this._editor.getOption(102),Aa.None).then(e=>{var i;if(na(e)&&e.length===t.length&&this._editor.hasModel()&&Zr(this._editor.getSelections(),t,(e,t)=>e.equalsSelection(t))){for(let i=0;ie.containsPosition(t[i].getStartPosition())&&e.containsPosition(t[i].getEndPosition())),e[i].unshift(t[i]);this._state=e.map(e=>new QM(0,e)),null===(i=this._selectionListener)||void 0===i||i.dispose(),this._selectionListener=this._editor.onDidChangeCursorPosition(()=>{var e;this._ignoreSelection||(null===(e=this._selectionListener)||void 0===e||e.dispose(),this._state=void 0)})}})),!this._state)return;this._state=this._state.map(t=>t.mov(e));const n=this._state.map(e=>ao.fromPositions(e.ranges[e.index].getStartPosition(),e.ranges[e.index].getEndPosition()));this._ignoreSelection=!0;try{this._editor.setSelections(n)}finally{this._ignoreSelection=!1}}))}}JM.ID="editor.contrib.smartSelectController";class eO extends Yn{constructor(e,t){super(t),this._forward=e}run(e,t){return XM(this,void 0,void 0,(function*(){let e=JM.get(t);e&&(yield e.run(this._forward))}))}}function tO(e,t,i,n){return XM(this,void 0,void 0,(function*(){const s=Xl.all(e);1===s.length&&s.unshift(new ZM);let r=[],a=[];for(const i of s)r.push(Promise.resolve(i.provideSelectionRanges(e,t,n)).then(e=>{if(na(e)&&e.length===t.length)for(let i=0;i{if(0===t.length)return[];t.sort((e,t)=>Tt.isBefore(e.getStartPosition(),t.getStartPosition())?1:Tt.isBefore(t.getStartPosition(),e.getStartPosition())?-1:Tt.isBefore(e.getEndPosition(),t.getEndPosition())?-1:Tt.isBefore(t.getEndPosition(),e.getEndPosition())?1:0);let n,o=[];for(const e of t)(!n||ro.containsRange(e,n)&&!ro.equalsRange(e,n))&&(o.push(e),n=e);if(!i.selectLeadingAndTrailingWhitespace)return o;let s=[o[0]];for(let t=1;t=0;a--){let e=o.charCodeAt(a);if(a!==r&&(95===e||45===e))break;if(ni(e)&&oi(h))break;h=e}for(a+=1;l0&&0===t.getLineFirstNonWhitespaceColumn(i.lineNumber)&&0===t.getLineLastNonWhitespaceColumn(i.lineNumber)&&e.push({range:new ro(i.lineNumber,1,i.lineNumber,t.getLineMaxColumn(i.lineNumber))})}}),function iO(e,t){sn.registerCommand(e,(function(e,...i){const[n]=i;Ne(mt.isUri(n));const o=e.get(At).getModel(n);return o?t(o,...i.slice(1)):e.get(Ot).createModelReference(n).then(e=>new Promise((n,o)=>{try{n(t(e.object.textEditorModel,i.slice(1)))}catch(e){o(e)}}).finally(()=>{e.dispose()}))}))}("_executeSelectionRangeProvider",(function(e,...t){const[i]=t;return tO(e,i,{selectLeadingAndTrailingWhitespace:!0},Aa.None)}));class nO{constructor(){this.value="",this.pos=0}static isDigitCharacter(e){return e>=48&&e<=57}static isVariableCharacter(e){return 95===e||e>=97&&e<=122||e>=65&&e<=90}text(e){this.value=e,this.pos=0}tokenText(e){return this.value.substr(e.pos,e.len)}next(){if(this.pos>=this.value.length)return{type:14,pos:this.pos,len:0};let e,t=this.pos,i=0,n=this.value.charCodeAt(t);if("number"==typeof(e=nO._table[n]))return this.pos+=1,{type:e,pos:t,len:1};if(nO.isDigitCharacter(n)){e=8;do{n=this.value.charCodeAt(t+(i+=1))}while(nO.isDigitCharacter(n));return this.pos+=i,{type:e,pos:t,len:i}}if(nO.isVariableCharacter(n)){e=9;do{n=this.value.charCodeAt(t+ ++i)}while(nO.isVariableCharacter(n)||nO.isDigitCharacter(n));return this.pos+=i,{type:e,pos:t,len:i}}e=10;do{n=this.value.charCodeAt(t+(i+=1))}while(!isNaN(n)&&void 0===nO._table[n]&&!nO.isDigitCharacter(n)&&!nO.isVariableCharacter(n));return this.pos+=i,{type:e,pos:t,len:i}}}nO._table={36:0,58:1,44:2,123:3,125:4,92:5,47:6,124:7,43:11,45:12,63:13};class oO{constructor(){this._children=[]}appendChild(e){return e instanceof sO&&this._children[this._children.length-1]instanceof sO?this._children[this._children.length-1].value+=e.value:(e.parent=this,this._children.push(e)),this}replace(e,t){const{parent:i}=e,n=i.children.indexOf(e),o=i.children.slice(0);o.splice(n,1,...t),i._children=o,function e(t,i){for(const n of t)n.parent=i,e(n.children,n)}(t,i)}get children(){return this._children}get snippet(){let e=this;for(;;){if(!e)return;if(e instanceof gO)return e;e=e.parent}}toString(){return this.children.reduce((e,t)=>e+t.toString(),"")}len(){return 0}}class sO extends oO{constructor(e){super(),this.value=e}toString(){return this.value}len(){return this.value.length}clone(){return new sO(this.value)}}class rO extends oO{}class aO extends rO{constructor(e){super(),this.index=e}static compareByIndex(e,t){return e.index===t.index?0:e.isFinalTabstop?1:t.isFinalTabstop?-1:e.indext.index?1:0}get isFinalTabstop(){return 0===this.index}get choice(){return 1===this._children.length&&this._children[0]instanceof lO?this._children[0]:void 0}clone(){let e=new aO(this.index);return this.transform&&(e.transform=this.transform.clone()),e._children=this.children.map(e=>e.clone()),e}}class lO extends oO{constructor(){super(...arguments),this.options=[]}appendChild(e){return e instanceof sO&&(e.parent=this,this.options.push(e)),this}toString(){return this.options[0].value}len(){return this.options[0].len()}clone(){let e=new lO;return this.options.forEach(e.appendChild,e),e}}class hO extends oO{constructor(){super(...arguments),this.regexp=new RegExp("")}resolve(e){const t=this;let i=!1,n=e.replace(this.regexp,(function(){return i=!0,t._replace(Array.prototype.slice.call(arguments,0,-2))}));return!i&&this._children.some(e=>e instanceof cO&&Boolean(e.elseValue))&&(n=this._replace([])),n}_replace(e){let t="";for(const i of this._children)if(i instanceof cO){let n=e[i.index]||"";t+=n=i.resolve(n)}else t+=i.toString();return t}toString(){return""}clone(){let e=new hO;return e.regexp=new RegExp(this.regexp.source,(this.regexp.ignoreCase?"i":"")+(this.regexp.global?"g":"")),e._children=this.children.map(e=>e.clone()),e}}class cO extends oO{constructor(e,t,i,n){super(),this.index=e,this.shorthandName=t,this.ifValue=i,this.elseValue=n}resolve(e){return"upcase"===this.shorthandName?e?e.toLocaleUpperCase():"":"downcase"===this.shorthandName?e?e.toLocaleLowerCase():"":"capitalize"===this.shorthandName?e?e[0].toLocaleUpperCase()+e.substr(1):"":"pascalcase"===this.shorthandName?e?this._toPascalCase(e):"":Boolean(e)&&"string"==typeof this.ifValue?this.ifValue:Boolean(e)||"string"!=typeof this.elseValue?e||"":this.elseValue}_toPascalCase(e){const t=e.match(/[a-z]+/gi);return t?t.map((function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})).join(""):e}clone(){return new cO(this.index,this.shorthandName,this.ifValue,this.elseValue)}}class dO extends rO{constructor(e){super(),this.name=e}resolve(e){let t=e.resolve(this);return this.transform&&(t=this.transform.resolve(t||"")),void 0!==t&&(this._children=[new sO(t)],!0)}clone(){const e=new dO(this.name);return this.transform&&(e.transform=this.transform.clone()),e._children=this.children.map(e=>e.clone()),e}}function uO(e,t){const i=[...e];for(;i.length>0;){const e=i.shift();if(!t(e))break;i.unshift(...e.children)}}class gO extends oO{get placeholderInfo(){if(!this._placeholders){let e,t=[];this.walk((function(i){return i instanceof aO&&(t.push(i),e=!e||e.indexn===e?(i=!0,!1):(t+=n.len(),!0)),i?t:-1}fullLen(e){let t=0;return uO([e],e=>(t+=e.len(),!0)),t}enclosingPlaceholders(e){let t=[],{parent:i}=e;for(;i;)i instanceof aO&&t.push(i),i=i.parent;return t}resolveVariables(e){return this.walk(t=>(t instanceof dO&&t.resolve(e)&&(this._placeholders=void 0),!0)),this}appendChild(e){return this._placeholders=void 0,super.appendChild(e)}replace(e,t){return this._placeholders=void 0,super.replace(e,t)}clone(){let e=new gO;return this._children=this.children.map(e=>e.clone()),e}walk(e){uO(this.children,e)}}class pO{constructor(){this._scanner=new nO,this._token={type:14,pos:0,len:0}}static escape(e){return e.replace(/\$|}|\\/g,"\\$&")}static guessNeedsClipboard(e){return/\${?CLIPBOARD/.test(e)}parse(e,t,i){this._scanner.text(e),this._token=this._scanner.next();const n=new gO;for(;this._parse(n););const o=new Map,s=[];let r=0;n.walk(e=>(e instanceof aO&&(r+=1,e.isFinalTabstop?o.set(0,void 0):!o.has(e.index)&&e.children.length>0?o.set(e.index,e.children):s.push(e)),!0));for(const e of s){const t=o.get(e.index);if(t){const i=new aO(e.index);i.transform=e.transform;for(const e of t)i.appendChild(e.clone());n.replace(e,[i])}}return i||(i=r>0&&t),!o.has(0)&&i&&n.appendChild(new aO(0)),n}_accept(e,t){if(void 0===e||this._token.type===e){let e=!t||this._scanner.tokenText(this._token);return this._token=this._scanner.next(),e}return!1}_backTo(e){return this._scanner.pos=e.pos+e.len,this._token=e,!1}_until(e){const t=this._token;for(;this._token.type!==e;){if(14===this._token.type)return!1;if(5===this._token.type){const e=this._scanner.next();if(0!==e.type&&4!==e.type&&5!==e.type)return!1}this._token=this._scanner.next()}const i=this._scanner.value.substring(t.pos,this._token.pos).replace(/\\(\$|}|\\)/g,"$1");return this._token=this._scanner.next(),i}_parse(e){return this._parseEscaped(e)||this._parseTabstopOrVariableName(e)||this._parseComplexPlaceholder(e)||this._parseComplexVariable(e)||this._parseAnything(e)}_parseEscaped(e){let t;return!!(t=this._accept(5,!0))&&(t=this._accept(0,!0)||this._accept(4,!0)||this._accept(5,!0)||t,e.appendChild(new sO(t)),!0)}_parseTabstopOrVariableName(e){let t;const i=this._token;return this._accept(0)&&(t=this._accept(9,!0)||this._accept(8,!0))?(e.appendChild(/^\d+$/.test(t)?new aO(Number(t)):new dO(t)),!0):this._backTo(i)}_parseComplexPlaceholder(e){let t;const i=this._token;if(!(this._accept(0)&&this._accept(3)&&(t=this._accept(8,!0))))return this._backTo(i);const n=new aO(Number(t));if(this._accept(1))for(;;){if(this._accept(4))return e.appendChild(n),!0;if(!this._parse(n))return e.appendChild(new sO("${"+t+":")),n.children.forEach(e.appendChild,e),!0}else{if(!(n.index>0&&this._accept(7)))return this._accept(6)?this._parseTransform(n)?(e.appendChild(n),!0):(this._backTo(i),!1):this._accept(4)?(e.appendChild(n),!0):this._backTo(i);{const t=new lO;for(;;){if(this._parseChoiceElement(t)){if(this._accept(2))continue;if(this._accept(7)&&(n.appendChild(t),this._accept(4)))return e.appendChild(n),!0}return this._backTo(i),!1}}}}_parseChoiceElement(e){const t=this._token,i=[];for(;2!==this._token.type&&7!==this._token.type;){let e;if(!(e=(e=this._accept(5,!0))?this._accept(2,!0)||this._accept(7,!0)||this._accept(5,!0)||e:this._accept(void 0,!0)))return this._backTo(t),!1;i.push(e)}return 0===i.length?(this._backTo(t),!1):(e.appendChild(new sO(i.join(""))),!0)}_parseComplexVariable(e){let t;const i=this._token;if(!(this._accept(0)&&this._accept(3)&&(t=this._accept(9,!0))))return this._backTo(i);const n=new dO(t);if(!this._accept(1))return this._accept(6)?this._parseTransform(n)?(e.appendChild(n),!0):(this._backTo(i),!1):this._accept(4)?(e.appendChild(n),!0):this._backTo(i);for(;;){if(this._accept(4))return e.appendChild(n),!0;if(!this._parse(n))return e.appendChild(new sO("${"+t+":")),n.children.forEach(e.appendChild,e),!0}}_parseTransform(e){let t=new hO,i="",n="";for(;!this._accept(6);){let e;if(e=this._accept(5,!0))i+=e=this._accept(6,!0)||e;else{if(14===this._token.type)return!1;i+=this._accept(void 0,!0)}}for(;!this._accept(6);){let e;if(e=this._accept(5,!0))e=this._accept(5,!0)||this._accept(6,!0)||e,t.appendChild(new sO(e));else if(!this._parseFormatString(t)&&!this._parseAnything(t))return!1}for(;!this._accept(4);){if(14===this._token.type)return!1;n+=this._accept(void 0,!0)}try{t.regexp=new RegExp(i,n)}catch(e){return!1}return e.transform=t,!0}_parseFormatString(e){const t=this._token;if(!this._accept(0))return!1;let i=!1;this._accept(3)&&(i=!0);let n=this._accept(8,!0);if(!n)return this._backTo(t),!1;if(!i)return e.appendChild(new cO(Number(n))),!0;if(this._accept(4))return e.appendChild(new cO(Number(n))),!0;if(!this._accept(1))return this._backTo(t),!1;if(this._accept(6)){let i=this._accept(9,!0);return i&&this._accept(4)?(e.appendChild(new cO(Number(n),i)),!0):(this._backTo(t),!1)}if(this._accept(11)){let t=this._until(4);if(t)return e.appendChild(new cO(Number(n),void 0,t,void 0)),!0}else if(this._accept(12)){let t=this._until(4);if(t)return e.appendChild(new cO(Number(n),void 0,void 0,t)),!0}else if(this._accept(13)){let t=this._until(1);if(t){let i=this._until(4);if(i)return e.appendChild(new cO(Number(n),void 0,t,i)),!0}}else{let t=this._until(4);if(t)return e.appendChild(new cO(Number(n),void 0,void 0,t)),!0}return this._backTo(t),!1}_parseAnything(e){return 14!==this._token.type&&(e.appendChild(new sO(this._scanner.tokenText(this._token))),this._accept(void 0),!0)}}var mO=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const fO={Visible:new Ji("suggestWidgetVisible",!1),DetailsVisible:new Ji("suggestWidgetDetailsVisible",!1),MultipleSuggestions:new Ji("suggestWidgetMultipleSuggestions",!1),MakesTextEdit:new Ji("suggestionMakesTextEdit",!0),AcceptSuggestionsOnEnter:new Ji("acceptSuggestionOnEnter",!0),HasInsertAndReplaceRange:new Ji("suggestionHasInsertAndReplaceRange",!1),InsertMode:new Ji("suggestionInsertMode",void 0),CanResolve:new Ji("suggestionCanResolve",!1)},_O=new Ln("suggestWidgetStatusBar");class bO{constructor(e,t,i,n){this.position=e,this.completion=t,this.container=i,this.provider=n,this.isInvalid=!1,this.score=nx.Default,this.distance=0,this.textLabel="string"==typeof t.label?t.label:t.label.name,this.labelLow=this.textLabel.toLowerCase(),this.isInvalid=!this.textLabel,this.sortTextLow=t.sortText&&t.sortText.toLowerCase(),this.filterTextLow=t.filterText&&t.filterText.toLowerCase(),ro.isIRange(t.range)?(this.editStart=new Tt(t.range.startLineNumber,t.range.startColumn),this.editInsertEnd=new Tt(t.range.endLineNumber,t.range.endColumn),this.editReplaceEnd=new Tt(t.range.endLineNumber,t.range.endColumn),this.isInvalid=this.isInvalid||ro.spansMultipleLines(t.range)||t.range.startLineNumber!==e.lineNumber):(this.editStart=new Tt(t.range.insert.startLineNumber,t.range.insert.startColumn),this.editInsertEnd=new Tt(t.range.insert.endLineNumber,t.range.insert.endColumn),this.editReplaceEnd=new Tt(t.range.replace.endLineNumber,t.range.replace.endColumn),this.isInvalid=this.isInvalid||ro.spansMultipleLines(t.range.insert)||ro.spansMultipleLines(t.range.replace)||t.range.insert.startLineNumber!==e.lineNumber||t.range.replace.startLineNumber!==e.lineNumber||t.range.insert.startColumn!==t.range.replace.startColumn),"function"!=typeof n.resolveCompletionItem&&(this._resolveCache=Promise.resolve(),this._isResolved=!0)}get isResolved(){return!!this._isResolved}resolve(e){return mO(this,void 0,void 0,(function*(){if(!this._resolveCache){const t=e.onCancellationRequested(()=>{this._resolveCache=void 0,this._isResolved=!1});this._resolveCache=Promise.resolve(this.provider.resolveCompletionItem(this.completion,e)).then(e=>{Object.assign(this.completion,e),this._isResolved=!0,t.dispose()},e=>{a(e)&&(this._resolveCache=void 0,this._isResolved=!1)})}return this._resolveCache}))}}class vO{constructor(e=2,t=new Set,i=new Set){this.snippetSortOrder=e,this.kindFilter=t,this.providerFilter=i}}vO.default=new vO;class CO{constructor(e,t,i,n){this.items=e,this.needsClipboard=t,this.durations=i,this.disposable=n}}function wO(e,t,i=vO.default,n={triggerKind:0,auto:!1},s=Aa.None){return mO(this,void 0,void 0,(function*(){const r=new te(!0);t=t.clone();const a=e.getWordAtPosition(t),h=a?new ro(t.lineNumber,a.startColumn,t.lineNumber,a.endColumn):ro.fromPositions(t),c={replace:h,insert:h.setEndPosition(t.lineNumber,t.column)},d=[],u=new v,g=[];let p=!1;const f=(e,n,o)=>{var s,r;if(n){for(let o of n.suggestions)i.kindFilter.has(o.kind)||(o.range||(o.range=c),o.sortText||(o.sortText="string"==typeof o.label?o.label:o.label.name),!p&&o.insertTextRules&&4&o.insertTextRules&&(p=pO.guessNeedsClipboard(o.insertText)),d.push(new bO(t,o,n,e)));m(n)&&u.add(n),g.push({providerName:null!==(s=e._debugDisplayName)&&void 0!==s?s:"unkown_provider",elapsedProvider:null!==(r=n.duration)&&void 0!==r?r:-1,elapsedOverall:o.elapsed()})}},_=(()=>mO(this,void 0,void 0,(function*(){})))();for(let r of Ml.orderedGroups(e)){let a=d.length;if(yield Promise.all(r.map(r=>mO(this,void 0,void 0,(function*(){if(!(i.providerFilter.size>0)||i.providerFilter.has(r))try{const i=new te(!0),o=yield r.provideCompletionItems(e,t,n,s);f(r,o,i)}catch(e){o(e)}})))),a!==d.length||s.isCancellationRequested)break}return yield _,s.isCancellationRequested?(u.dispose(),Promise.reject(l())):new CO(d.sort(LO(i.snippetSortOrder)),p,{entries:g,elapsed:r.elapsed()},u)}))}function yO(e,t){if(e.sortTextLow&&t.sortTextLow){if(e.sortTextLowt.sortTextLow)return 1}return e.completion.labelt.completion.label?1:e.completion.kind-t.completion.kind}const SO=new Map;function LO(e){return SO.get(e)}SO.set(0,(function DO(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return-1;if(27===t.completion.kind)return 1}return yO(e,t)})),SO.set(2,(function EO(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return 1;if(27===t.completion.kind)return-1}return yO(e,t)})),SO.set(1,yO),sn.registerCommand("_executeCompletionItemProvider",(e,...t)=>mO(void 0,void 0,void 0,(function*(){const[i,n,o,s]=t;Ne(mt.isUri(i)),Ne(Tt.isIPosition(n)),Ne("string"==typeof o||!o),Ne("number"==typeof s||!s);const r=yield e.get(Ot).createModelReference(i);try{const e={incomplete:!1,suggestions:[]},t=[],i=o?1:0,a=1===i,l=yield wO(r.object.textEditorModel,Tt.lift(n),void 0,{triggerCharacter:o,triggerKind:i,auto:a});for(const i of l.items)t.length<(null!=s?s:0)&&t.push(i.resolve(Aa.None)),e.incomplete=e.incomplete||i.container.incomplete,e.suggestions.push(i.completion);try{return yield Promise.all(t),e}finally{setTimeout(()=>l.disposable.dispose(),100)}}finally{r.dispose()}})));const xO=new class{constructor(){this.onlyOnceSuggestions=[]}provideCompletionItems(){let e={suggestions:this.onlyOnceSuggestions.slice(0)};return this.onlyOnceSuggestions.length=0,e}};Ml.register("*",xO);const kO=kt("contextService");class NO{constructor(e,t){this.raw=t,this.uri=e.uri,this.index=e.index,this.name=e.name}toJSON(){return{uri:this.uri,name:this.name,index:this.index}}}const IO="code-workspace";function TO(e){return"string"==typeof(null==e?void 0:e.id)&&mt.isUri(e.uri)}const AO=new Uint8Array(16),MO=[];for(let e=0;e<256;e++)MO.push(e.toString(16).padStart(2,"0"));let OO;OO="object"==typeof crypto&&"function"==typeof crypto.getRandomValues?crypto.getRandomValues.bind(crypto):function(e){for(let t=0;tt!==e&&(t instanceof sO&&(n=Xt(Yt(t.value).pop())),!0));const o=hi(n,i);t=t.replace(/(\r\n|\r|\n)(.*)/g,(e,t,i)=>`${t}${n.substr(o)}${i}`)}return t}if("TM_CURRENT_LINE"===t)return this._model.getLineContent(this._selection.positionLineNumber);if("TM_CURRENT_WORD"===t){const e=this._model.getWordAtPosition({lineNumber:this._selection.positionLineNumber,column:this._selection.positionColumn});return e&&e.word||void 0}return"TM_LINE_INDEX"===t?String(this._selection.positionLineNumber-1):"TM_LINE_NUMBER"===t?String(this._selection.positionLineNumber):void 0}}class FO{constructor(e,t){this._labelService=e,this._model=t}resolve(e){const{name:t}=e;if("TM_FILENAME"===t)return rt(this._model.uri.fsPath);if("TM_FILENAME_BASE"===t){const e=rt(this._model.uri.fsPath),t=e.lastIndexOf(".");return t<=0?e:e.slice(0,t)}return"TM_DIRECTORY"===t&&this._labelService?"."===st(this._model.uri.fsPath)?"":this._labelService.getUriLabel(ks(this._model.uri)):"TM_FILEPATH"===t&&this._labelService?this._labelService.getUriLabel(this._model.uri):"RELATIVE_FILEPATH"===t&&this._labelService?this._labelService.getUriLabel(this._model.uri,{relative:!0,noPrefix:!0}):void 0}}class BO{constructor(e,t,i,n){this._readClipboardText=e,this._selectionIdx=t,this._selectionCount=i,this._spread=n}resolve(e){if("CLIPBOARD"!==e.name)return;const t=this._readClipboardText();if(t){if(this._spread){const e=t.split(/\r\n|\n|\r/).filter(e=>!zt(e));if(e.length===this._selectionCount)return e[this._selectionIdx]}return t}}}class WO{constructor(e,t){this._model=e,this._selection=t}resolve(e){const{name:t}=e,i=this._model.getLanguageIdAtPosition(this._selection.selectionStartLineNumber,this._selection.selectionStartColumn),n=ac.getComments(i);if(n)return"LINE_COMMENT"===t?n.lineCommentToken||void 0:"BLOCK_COMMENT_START"===t?n.blockCommentStartToken||void 0:"BLOCK_COMMENT_END"===t&&n.blockCommentEndToken||void 0}}class VO{resolve(e){const{name:t}=e;return"CURRENT_YEAR"===t?String((new Date).getFullYear()):"CURRENT_YEAR_SHORT"===t?String((new Date).getFullYear()).slice(-2):"CURRENT_MONTH"===t?String((new Date).getMonth().valueOf()+1).padStart(2,"0"):"CURRENT_DATE"===t?String((new Date).getDate().valueOf()).padStart(2,"0"):"CURRENT_HOUR"===t?String((new Date).getHours().valueOf()).padStart(2,"0"):"CURRENT_MINUTE"===t?String((new Date).getMinutes().valueOf()).padStart(2,"0"):"CURRENT_SECOND"===t?String((new Date).getSeconds().valueOf()).padStart(2,"0"):"CURRENT_DAY_NAME"===t?VO.dayNames[(new Date).getDay()]:"CURRENT_DAY_NAME_SHORT"===t?VO.dayNamesShort[(new Date).getDay()]:"CURRENT_MONTH_NAME"===t?VO.monthNames[(new Date).getMonth()]:"CURRENT_MONTH_NAME_SHORT"===t?VO.monthNamesShort[(new Date).getMonth()]:"CURRENT_SECONDS_UNIX"===t?String(Math.floor(Date.now()/1e3)):void 0}}VO.dayNames=[t(0,"Sunday"),t(0,"Monday"),t(0,"Tuesday"),t(0,"Wednesday"),t(0,"Thursday"),t(0,"Friday"),t(0,"Saturday")],VO.dayNamesShort=[t(0,"Sun"),t(0,"Mon"),t(0,"Tue"),t(0,"Wed"),t(0,"Thu"),t(0,"Fri"),t(0,"Sat")],VO.monthNames=[t(0,"January"),t(0,"February"),t(0,"March"),t(0,"April"),t(0,"May"),t(0,"June"),t(0,"July"),t(0,"August"),t(0,"September"),t(0,"October"),t(0,"November"),t(0,"December")],VO.monthNamesShort=[t(0,"Jan"),t(0,"Feb"),t(0,"Mar"),t(0,"Apr"),t(0,"May"),t(0,"Jun"),t(0,"Jul"),t(0,"Aug"),t(0,"Sep"),t(0,"Oct"),t(0,"Nov"),t(0,"Dec")];class zO{constructor(e){this._workspaceService=e}resolve(e){if(!this._workspaceService)return;const t=function i(e){return e.configuration?{id:e.id,configPath:e.configuration}:1===e.folders.length?{id:e.id,uri:e.folders[0].uri}:void 0}(this._workspaceService.getWorkspace());return t?"WORKSPACE_NAME"===e.name?this._resolveWorkspaceName(t):"WORKSPACE_FOLDER"===e.name?this._resoveWorkspacePath(t):void 0:void 0}_resolveWorkspaceName(e){if(TO(e))return rt(e.uri.path);let t=rt(e.configPath.path);return t.endsWith(IO)&&(t=t.substr(0,t.length-IO.length-1)),t}_resoveWorkspacePath(e){if(TO(e))return LE(e.uri.fsPath);let t=rt(e.configPath.path),i=e.configPath.fsPath;return i.endsWith(t)&&(i=i.substr(0,i.length-t.length-1)),i?LE(i):"/"}}class HO{resolve(e){const{name:t}=e;return"RANDOM"===t?Math.random().toString().slice(-6):"RANDOM_HEX"===t?Math.random().toString(16).slice(-6):"UUID"===t?function i(){OO(AO),AO[6]=15&AO[6]|64,AO[8]=63&AO[8]|128;let e=0,t="";return t+=MO[AO[e++]],t+=MO[AO[e++]],t+=MO[AO[e++]],t+=MO[AO[e++]],t+="-",t+=MO[AO[e++]],t+=MO[AO[e++]],t+="-",t+=MO[AO[e++]],t+=MO[AO[e++]],t+="-",t+=MO[AO[e++]],t+=MO[AO[e++]],t+="-",t+=MO[AO[e++]],t+=MO[AO[e++]],t+=MO[AO[e++]],t+=MO[AO[e++]],(t+=MO[AO[e++]])+MO[AO[e++]]}():void 0}}Cn((e,t)=>{function i(t){const i=e.getColor(t);return i?i.toString():"transparent"}t.addRule(`.monaco-editor .snippet-placeholder { background-color: ${i(Zf)}; outline-color: ${i(Xf)}; }`),t.addRule(`.monaco-editor .finish-snippet-placeholder { background-color: ${i(Qf)}; outline-color: ${i(Jf)}; }`)});class UO{constructor(e,t,i,n){this._editor=e,this._snippet=t,this._offset=i,this._snippetLineLeadingWhitespace=n,this._nestingLevel=1,this._placeholderGroups=ea(t.placeholders,aO.compareByIndex),this._placeholderGroupsIdx=-1}dispose(){this._placeholderDecorations&&this._editor.deltaDecorations([...this._placeholderDecorations.values()],[]),this._placeholderGroups.length=0}_initDecorations(){if(this._placeholderDecorations)return;this._placeholderDecorations=new Map;const e=this._editor.getModel();this._editor.changeDecorations(t=>{for(const i of this._snippet.placeholders){const n=this._snippet.offset(i),o=this._snippet.fullLen(i),s=ro.fromPositions(e.getPositionAt(this._offset+n),e.getPositionAt(this._offset+n+o)),r=t.addDecoration(s,i.isFinalTabstop?UO._decor.inactiveFinal:UO._decor.inactive);this._placeholderDecorations.set(i,r)}})}move(e){if(!this._editor.hasModel())return[];if(this._initDecorations(),this._placeholderGroupsIdx>=0){let e=[];for(const t of this._placeholderGroups[this._placeholderGroupsIdx])if(t.transform){const i=this._placeholderDecorations.get(t),n=this._editor.getModel().getDecorationRange(i),o=this._editor.getModel().getValueInRange(n),s=t.transform.resolve(o).split(/\r\n|\r|\n/);for(let e=1;e0&&this._editor.executeEdits("snippet.placeholderTransform",e)}let t=!1;!0===e&&this._placeholderGroupsIdx0&&(this._placeholderGroupsIdx-=1,t=!0);const i=this._editor.getModel().changeDecorations(e=>{const i=new Set,n=[];for(const o of this._placeholderGroups[this._placeholderGroupsIdx]){const s=this._placeholderDecorations.get(o),r=this._editor.getModel().getDecorationRange(s);n.push(new ao(r.startLineNumber,r.startColumn,r.endLineNumber,r.endColumn)),t=t&&this._hasPlaceholderBeenCollapsed(o),e.changeDecorationOptions(s,o.isFinalTabstop?UO._decor.activeFinal:UO._decor.active),i.add(o);for(const t of this._snippet.enclosingPlaceholders(o)){const n=this._placeholderDecorations.get(t);e.changeDecorationOptions(n,t.isFinalTabstop?UO._decor.activeFinal:UO._decor.active),i.add(t)}}for(const[t,n]of this._placeholderDecorations)i.has(t)||e.changeDecorationOptions(n,t.isFinalTabstop?UO._decor.inactiveFinal:UO._decor.inactive);return n});return t?this.move(e):null!=i?i:[]}_hasPlaceholderBeenCollapsed(e){let t=e;for(;t;){if(t instanceof aO){const e=this._placeholderDecorations.get(t);if(this._editor.getModel().getDecorationRange(e).isEmpty()&&t.toString().length>0)return!0}t=t.parent}return!1}get isAtFirstPlaceholder(){return this._placeholderGroupsIdx<=0||0===this._placeholderGroups.length}get isAtLastPlaceholder(){return this._placeholderGroupsIdx===this._placeholderGroups.length-1}get hasPlaceholder(){return this._snippet.placeholders.length>0}computePossibleSelections(){const e=new Map;for(const t of this._placeholderGroups){let i;for(const n of t){if(n.isFinalTabstop)break;i||e.set(n.index,i=[]);const t=this._placeholderDecorations.get(n),o=this._editor.getModel().getDecorationRange(t);if(!o){e.delete(n.index);break}i.push(o)}}return e}get choice(){return this._placeholderGroups[this._placeholderGroupsIdx][0].choice}merge(e){const t=this._editor.getModel();this._nestingLevel*=10,this._editor.changeDecorations(i=>{for(const n of this._placeholderGroups[this._placeholderGroupsIdx]){const o=e.shift();console.assert(!o._placeholderDecorations);const s=o._snippet.placeholderInfo.last.index;for(const e of o._snippet.placeholderInfo.all)e.index=e.isFinalTabstop?n.index+(s+1)/this._nestingLevel:n.index+e.index/this._nestingLevel;this._snippet.replace(n,o._snippet.children);const r=this._placeholderDecorations.get(n);i.removeDecoration(r),this._placeholderDecorations.delete(n);for(const e of o._snippet.placeholders){const n=o._snippet.offset(e),s=o._snippet.fullLen(e),r=ro.fromPositions(t.getPositionAt(o._offset+n),t.getPositionAt(o._offset+n+s)),a=i.addDecoration(r,UO._decor.inactive);this._placeholderDecorations.set(e,a)}}this._placeholderGroups=ea(this._snippet.placeholders,aO.compareByIndex)})}}UO._decor={active:xc.register({stickiness:0,className:"snippet-placeholder"}),inactive:xc.register({stickiness:1,className:"snippet-placeholder"}),activeFinal:xc.register({stickiness:1,className:"finish-snippet-placeholder"}),inactiveFinal:xc.register({stickiness:1,className:"finish-snippet-placeholder"})};const KO={overwriteBefore:0,overwriteAfter:0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};class $O{constructor(e,t,i=KO){this._templateMerges=[],this._snippets=[],this._editor=e,this._template=t,this._options=i}static adjustWhitespace(e,t,i,n,o){const s=Xt(e.getLineContent(t.lineNumber),0,t.column-1);let r;return i.walk(t=>{if(!(t instanceof sO)||t.parent instanceof lO)return!0;const o=t.value.split(/\r\n|\r|\n/);if(n){const n=i.offset(t);if(0===n)o[0]=e.normalizeIndentation(o[0]);else{let t=(r=null!=r?r:i.toString()).charCodeAt(n-1);10!==t&&13!==t||(o[0]=e.normalizeIndentation(s+o[0]))}for(let t=1;te.get(kO,Nt)),u=e.invokeWithinContext(e=>new FO(e.get(_E,Nt),c)),g=()=>r;let p=0,m=c.getValueInRange($O.adjustSelection(c,e.getSelection(),i,0)),f=c.getValueInRange($O.adjustSelection(c,e.getSelection(),0,n)),_=c.getLineFirstNonWhitespaceColumn(e.getSelection().positionLineNumber);const b=e.getSelections().map((e,t)=>({selection:e,idx:t})).sort((e,t)=>ro.compareRangesUsingStarts(e.selection,t.selection));for(const{selection:r,idx:v}of b){let C=$O.adjustSelection(c,r,i,0),w=$O.adjustSelection(c,r,0,n);m!==c.getValueInRange(C)&&(C=r),f!==c.getValueInRange(w)&&(w=r);const y=r.setStartPosition(C.startLineNumber,C.startColumn).setEndPosition(w.endLineNumber,w.endColumn),S=(new pO).parse(t,!0,o),L=y.getStartPosition(),D=$O.adjustWhitespace(c,L,S,s||v>0&&_!==c.getLineFirstNonWhitespaceColumn(r.positionLineNumber),!0);S.resolveVariables(new RO([u,new BO(g,v,b.length,"spread"===e.getOption(66)),new PO(c,r,v,a),new WO(c,r),new VO,new zO(d),new HO]));const E=c.getOffsetAt(L)+p;p+=S.toString().length-c.getValueLengthInRange(y),l[v]=jL.replace(y,S.toString()),l[v].identifier={major:v,minor:0},h[v]=new UO(e,S,E,D)}return{edits:l,snippets:h}}dispose(){f(this._snippets)}_logInfo(){return`template="${this._template}", merged_templates="${this._templateMerges.join(" -> ")}"`}insert(){if(!this._editor.hasModel())return;const{edits:e,snippets:t}=$O.createEditsAndSnippets(this._editor,this._template,this._options.overwriteBefore,this._options.overwriteAfter,!1,this._options.adjustWhitespace,this._options.clipboardText,this._options.overtypingCapturer);this._snippets=t,this._editor.executeEdits("snippet",e,e=>this._snippets[0].hasPlaceholder?this._move(!0):e.filter(e=>!!e.identifier).map(e=>ao.fromPositions(e.range.getEndPosition()))),this._editor.revealRange(this._editor.getSelections()[0])}merge(e,t=KO){if(!this._editor.hasModel())return;this._templateMerges.push([this._snippets[0]._nestingLevel,this._snippets[0]._placeholderGroupsIdx,e]);const{edits:i,snippets:n}=$O.createEditsAndSnippets(this._editor,e,t.overwriteBefore,t.overwriteAfter,!0,t.adjustWhitespace,t.clipboardText,t.overtypingCapturer);this._editor.executeEdits("snippet",i,e=>{for(const e of this._snippets)e.merge(n);return console.assert(0===n.length),this._snippets[0].hasPlaceholder?this._move(void 0):e.filter(e=>!!e.identifier).map(e=>ao.fromPositions(e.range.getEndPosition()))})}next(){const e=this._move(!0);this._editor.setSelections(e),this._editor.revealPositionInCenterIfOutsideViewport(e[0].getPosition())}prev(){const e=this._move(!1);this._editor.setSelections(e),this._editor.revealPositionInCenterIfOutsideViewport(e[0].getPosition())}_move(e){const t=[];for(const i of this._snippets){const n=i.move(e);t.push(...n)}return t}get isAtFirstPlaceholder(){return this._snippets[0].isAtFirstPlaceholder}get isAtLastPlaceholder(){return this._snippets[0].isAtLastPlaceholder}get hasPlaceholder(){return this._snippets[0].hasPlaceholder}get choice(){return this._snippets[0].choice}isSelectionWithinPlaceholders(){if(!this.hasPlaceholder)return!1;const e=this._editor.getSelections();if(e.length{e.push(...n.get(t))})}e.sort(ro.compareRangesUsingStarts);for(let[i,n]of t)if(n.length===e.length){n.sort(ro.compareRangesUsingStarts);for(let o=0;o0}}var jO=function(e,t){return function(i,n){t(i,n,e)}};const qO={overwriteBefore:0,overwriteAfter:0,undoStopBefore:!0,undoStopAfter:!0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};let GO=class e{constructor(t,i,n){this._editor=t,this._logService=i,this._snippetListener=new v,this._modelVersionId=-1,this._inSnippet=e.InSnippetMode.bindTo(n),this._hasNextTabstop=e.HasNextTabstop.bindTo(n),this._hasPrevTabstop=e.HasPrevTabstop.bindTo(n)}static get(t){return t.getContribution(e.ID)}dispose(){var e;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),null===(e=this._session)||void 0===e||e.dispose(),this._snippetListener.dispose()}insert(e,t){try{this._doInsert(e,void 0===t?qO:Object.assign(Object.assign({},qO),t))}catch(t){this.cancel(),this._logService.error(t),this._logService.error("snippet_error"),this._logService.error("insert_template=",e),this._logService.error("existing_template=",this._session?this._session._logInfo():"")}}_doInsert(e,t){this._editor.hasModel()&&(this._snippetListener.clear(),t.undoStopBefore&&this._editor.getModel().pushStackElement(),this._session?this._session.merge(e,t):(this._modelVersionId=this._editor.getModel().getAlternativeVersionId(),this._session=new $O(this._editor,e,t),this._session.insert()),t.undoStopAfter&&this._editor.getModel().pushStackElement(),this._updateState(),this._snippetListener.add(this._editor.onDidChangeModelContent(e=>e.isFlush&&this.cancel())),this._snippetListener.add(this._editor.onDidChangeModel(()=>this.cancel())),this._snippetListener.add(this._editor.onDidChangeCursorSelection(()=>this._updateState())))}_updateState(){if(this._session&&this._editor.hasModel()){if(this._modelVersionId===this._editor.getModel().getAlternativeVersionId())return this.cancel();if(!this._session.hasPlaceholder)return this.cancel();if(this._session.isAtLastPlaceholder||!this._session.isSelectionWithinPlaceholders())return this.cancel();this._inSnippet.set(!0),this._hasPrevTabstop.set(!this._session.isAtFirstPlaceholder),this._hasNextTabstop.set(!this._session.isAtLastPlaceholder),this._handleChoice()}}_handleChoice(){if(!this._session||!this._editor.hasModel())return void(this._currentChoice=void 0);const{choice:e}=this._session;if(e){if(this._currentChoice!==e){this._currentChoice=e,this._editor.setSelections(this._editor.getSelections().map(e=>ao.fromPositions(e.getStartPosition())));const[t]=e.options;!function t(e,i){setTimeout(()=>{xO.onlyOnceSuggestions.push(...i),e.getContribution("editor.contrib.suggestController").triggerSuggest((new Set).add(xO))},0)}(this._editor,e.options.map((e,i)=>({kind:13,label:e.value,insertText:e.value,sortText:"a".repeat(i+1),range:ro.fromPositions(this._editor.getPosition(),this._editor.getPosition().delta(0,t.value.length))})))}}else this._currentChoice=void 0}finish(){for(;this._inSnippet.get();)this.next()}cancel(e=!1){var t;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),this._snippetListener.clear(),null===(t=this._session)||void 0===t||t.dispose(),this._session=void 0,this._modelVersionId=-1,e&&this._editor.setSelections([this._editor.getSelection()])}prev(){this._session&&this._session.prev(),this._updateState()}next(){this._session&&this._session.next(),this._updateState()}isInSnippet(){return Boolean(this._inSnippet.get())}};GO.ID="snippetController2",GO.InSnippetMode=new Ji("inSnippetMode",!1),GO.HasNextTabstop=new Ji("hasNextTabstop",!1),GO.HasPrevTabstop=new Ji("hasPrevTabstop",!1),Jn((GO=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([jO(1,PM),jO(2,en)],GO)).ID,GO);const YO=Gn.bindToContribution(GO.get);Xn(new YO({id:"jumpToNextSnippetPlaceholder",precondition:Ri.and(GO.InSnippetMode,GO.HasNextTabstop),handler:e=>e.next(),kbOpts:{weight:130,kbExpr:cd.editorTextFocus,primary:2}})),Xn(new YO({id:"jumpToPrevSnippetPlaceholder",precondition:Ri.and(GO.InSnippetMode,GO.HasPrevTabstop),handler:e=>e.prev(),kbOpts:{weight:130,kbExpr:cd.editorTextFocus,primary:1026}})),Xn(new YO({id:"leaveSnippet",precondition:GO.InSnippetMode,handler:e=>e.cancel(!0),kbOpts:{weight:130,kbExpr:cd.editorTextFocus,primary:9,secondary:[1033]}})),Xn(new YO({id:"acceptSnippet",precondition:GO.InSnippetMode,handler:e=>e.finish()}));var ZO=function(e,t){return function(i,n){t(i,n,e)}};class XO{constructor(e){this.name=e}select(e,t,i){if(0===i.length)return 0;let n=i[0].score[0];for(let e=0;ethis._saveState(),500),this._disposables.add(e.onWillSaveState(e=>{e.reason===NL.SHUTDOWN&&this._saveState()}))}dispose(){this._disposables.dispose(),this._persistSoon.dispose()}memorize(e,t,i){this._withStrategy(e,t).memorize(e,t,i),this._persistSoon.schedule()}select(e,t,i){return this._withStrategy(e,t).select(e,t,i)}_withStrategy(t,i){var n,o;const s=this._configService.getValue("editor.suggestSelection",{overrideIdentifier:null===(n=this._modeService.getLanguageIdentifier(t.getLanguageIdAtPosition(i.lineNumber,i.column)))||void 0===n?void 0:n.language,resource:t.uri});if((null===(o=this._strategy)||void 0===o?void 0:o.name)!==s){this._saveState();const t=e._strategyCtors.get(s)||QO;this._strategy=new t;try{const t=this._configService.getValue("editor.suggest.shareSuggestSelections"),i=this._storageService.get(`${e._storagePrefix}/${s}`,t?0:1);i&&this._strategy.fromJSON(JSON.parse(i))}catch(e){}}return this._strategy}_saveState(){if(this._strategy){const t=this._configService.getValue("editor.suggest.shareSuggestSelections")?0:1,i=JSON.stringify(this._strategy);this._storageService.store(`${e._storagePrefix}/${this._strategy.name}`,i,t,1)}}};JO._strategyCtors=new Map([["recentlyUsedByPrefix",class extends XO{constructor(){super("recentlyUsedByPrefix"),this._trie=Da.forStrings(),this._seq=0}memorize(e,t,i){const{word:n}=e.getWordUntilPosition(t),o=`${e.getLanguageIdentifier().language}/${n}`;this._trie.set(o,{type:i.completion.kind,insertText:i.completion.insertText,touch:this._seq++})}select(e,t,i){let{word:n}=e.getWordUntilPosition(t);if(!n)return super.select(e,t,i);let o=`${e.getLanguageIdentifier().language}/${n}`,s=this._trie.get(o);if(s||(s=this._trie.findSubstr(o)),s)for(let e=0;ee.push([i,t])),e.sort((e,t)=>-(e[1].touch-t[1].touch)).forEach((e,t)=>e[1].touch=t),e.slice(0,200)}fromJSON(e){if(this._trie.clear(),e.length>0){this._seq=e[0][1].touch+1;for(const[t,i]of e)i.type="number"==typeof i.type?i.type:Dl(i.type),this._trie.set(t,i)}}}],["recentlyUsed",class extends XO{constructor(){super("recentlyUsed"),this._cache=new ka(300,.66),this._seq=0}memorize(e,t,i){const n=`${e.getLanguageIdentifier().language}/${i.textLabel}`;this._cache.set(n,{touch:this._seq++,type:i.completion.kind,insertText:i.completion.insertText})}select(e,t,i){if(0===i.length)return 0;const n=e.getLineContent(t.lineNumber).substr(t.column-10,t.column-1);if(/\s$/.test(n))return super.select(e,t,i);let o=i[0].score[0],s=-1,r=-1;for(let t=0;tr&&o.type===i[t].completion.kind&&o.insertText===i[t].completion.insertText&&(r=o.touch,s=t),i[t].completion.preselect)return t}return-1!==s?s:0}toJSON(){return this._cache.toJSON()}fromJSON(e){this._cache.clear();for(const[t,i]of e)i.touch=0,i.type="number"==typeof i.type?i.type:Dl(i.type),this._cache.set(t,i);this._seq=this._cache.size}}],["first",QO]]),JO._storagePrefix="suggest/memories",JO=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([ZO(0,kL),ZO(1,nT),ZO(2,zL)],JO);const eR=kt("ISuggestMemories");Yw(eR,JO,!0);let tR=class e{constructor(t,i){this._editor=t,this._index=0,this._ckOtherSuggestions=e.OtherSuggestions.bindTo(i)}dispose(){this.reset()}reset(){var e;this._ckOtherSuggestions.reset(),null===(e=this._listener)||void 0===e||e.dispose(),this._model=void 0,this._acceptNext=void 0,this._ignore=!1}set({model:t,index:i},n){0!==t.items.length&&e._moveIndex(!0,t,i)!==i?(this._acceptNext=n,this._model=t,this._index=i,this._listener=this._editor.onDidChangeCursorPosition(()=>{this._ignore||this.reset()}),this._ckOtherSuggestions.set(!0)):this.reset()}static _moveIndex(e,t,i){let n=i;for(;(n=(n+t.items.length+(e?1:-1))%t.items.length)!==i&&t.items[n].completion.additionalTextEdits;);return n}next(){this._move(!0)}prev(){this._move(!1)}_move(t){if(this._model)try{this._ignore=!0,this._index=e._moveIndex(t,this._model,this._index),this._acceptNext({index:this._index,item:this._model.items[this._index],model:this._model})}finally{this._ignore=!1}}};tR.OtherSuggestions=new Ji("hasOtherSuggestions",!1),tR=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,1)}}(0,en)],tR);class iR{constructor(e,t,i,n,o,s,r){this.clipboardText=r,this._snippetCompareFn=iR._compareCompletionItems,this._items=e,this._column=t,this._wordDistance=n,this._options=o,this._refilterKind=1,this._lineContext=i,"top"===s?this._snippetCompareFn=iR._compareCompletionItemsSnippetsUp:"bottom"===s&&(this._snippetCompareFn=iR._compareCompletionItemsSnippetsDown)}get lineContext(){return this._lineContext}set lineContext(e){this._lineContext.leadingLineContent===e.leadingLineContent&&this._lineContext.characterCountDelta===e.characterCountDelta||(this._refilterKind=this._lineContext.characterCountDelta2e3?ox:rx;for(let l=0;l=d)h.score=nx.Default;else if("string"==typeof h.completion.filterText){let t=a(n,o,e,h.completion.filterText,h.filterTextLow,0,!1);if(!t)continue;0===ti(h.completion.filterText,u)?h.score=t:(h.score=KE(n,o,0,u,h.labelLow,0),h.score[0]=t[0])}else{let t=a(n,o,e,u,h.labelLow,0,!1);if(!t)continue;h.score=t}}h.idx=l,h.distance=this._wordDistance.distance(h.position,h.completion),r.push(h),e.push(u.length)}this._filteredItems=r.sort(this._snippetCompareFn),this._refilterKind=0,this._stats={pLabelLen:e.length?Qr(e.length-.85,e,(e,t)=>e-t):0}}static _compareCompletionItems(e,t){return e.score[0]>t.score[0]?-1:e.score[0]t.distance?1:e.idxt.idx?1:0}static _compareCompletionItemsSnippetsDown(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return 1;if(27===t.completion.kind)return-1}return iR._compareCompletionItems(e,t)}static _compareCompletionItemsSnippetsUp(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return-1;if(27===t.completion.kind)return 1}return iR._compareCompletionItems(e,t)}}var nR=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class oR{static create(e,t){return nR(this,void 0,void 0,(function*(){if(!t.getOption(106).localityBonus)return oR.None;if(!t.hasModel())return oR.None;const i=t.getModel(),n=t.getPosition();if(!e.canComputeWordRanges(i.uri))return oR.None;const[o]=yield(new ZM).provideSelectionRanges(i,[n]);if(0===o.length)return oR.None;const s=yield e.computeWordRanges(i.uri,o[0].range);if(!s)return oR.None;const r=i.getWordUntilPosition(n);return delete s[r.word],new class extends oR{distance(e,i){if(!n.equals(t.getPosition()))return 0;if(17===i.kind)return 2<<20;let r=s["string"==typeof i.label?i.label:i.label.name];if(ia(r))return 2<<20;let a=Xr(r,ro.fromPositions(e),ro.compareRangesUsingStarts),l=a>=0?r[a]:r[Math.max(0,~a-1)],h=o.length;for(const e of o){if(!ro.containsRange(e.range,l))break;h-=1}return h}}}))}}oR.None=new class extends oR{distance(){return 0}};var sR=function(e,t){return function(i,n){t(i,n,e)}};class rR{constructor(e,t,i,n){this.leadingLineContent=e.getLineContent(t.lineNumber).substr(0,t.column-1),this.leadingWord=e.getWordUntilPosition(t),this.lineNumber=t.lineNumber,this.column=t.column,this.auto=i,this.shy=n}static shouldAutoTrigger(e){if(!e.hasModel())return!1;const t=e.getModel(),i=e.getPosition();t.tokenizeIfCheap(i.lineNumber);const n=t.getWordAtPosition(i);return!!n&&n.endColumn===i.column&&!!isNaN(Number(n.word))}}let aR=class e{constructor(e,t,i,n,o){this._editor=e,this._editorWorkerService=t,this._clipboardService=i,this._telemetryService=n,this._logService=o,this._toDispose=new v,this._quickSuggestDelay=10,this._triggerCharacterListener=new v,this._triggerQuickSuggest=new Ua,this._state=0,this._completionDisposables=new v,this._onDidCancel=new oe,this._onDidTrigger=new oe,this._onDidSuggest=new oe,this.onDidCancel=this._onDidCancel.event,this.onDidTrigger=this._onDidTrigger.event,this.onDidSuggest=this._onDidSuggest.event,this._telemetryGate=0,this._currentSelection=this._editor.getSelection()||new ao(1,1,1,1),this._toDispose.add(this._editor.onDidChangeModel(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeModelLanguage(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeConfiguration(()=>{this._updateTriggerCharacters(),this._updateQuickSuggest()})),this._toDispose.add(Ml.onDidChange(()=>{this._updateTriggerCharacters(),this._updateActiveSuggestSession()})),this._toDispose.add(this._editor.onDidChangeCursorSelection(e=>{this._onCursorChange(e)}));let s=!1;this._toDispose.add(this._editor.onDidCompositionStart(()=>{s=!0})),this._toDispose.add(this._editor.onDidCompositionEnd(()=>{s=!1,this._refilterCompletionItems()})),this._toDispose.add(this._editor.onDidChangeModelContent(()=>{s||this._refilterCompletionItems()})),this._updateTriggerCharacters(),this._updateQuickSuggest()}dispose(){f(this._triggerCharacterListener),f([this._onDidCancel,this._onDidSuggest,this._onDidTrigger,this._triggerQuickSuggest]),this._toDispose.dispose(),this._completionDisposables.dispose(),this.cancel()}_updateQuickSuggest(){this._quickSuggestDelay=this._editor.getOption(76),(isNaN(this._quickSuggestDelay)||!this._quickSuggestDelay&&0!==this._quickSuggestDelay||this._quickSuggestDelay<0)&&(this._quickSuggestDelay=10)}_updateTriggerCharacters(){if(this._triggerCharacterListener.clear(),this._editor.getOption(77)||!this._editor.hasModel()||!this._editor.getOption(109))return;const e=new Map;for(const t of Ml.all(this._editor.getModel()))for(const i of t.triggerCharacters||[]){let n=e.get(i);n||((n=new Set).add(void 0),e.set(i,n)),n.add(t)}const t=t=>{if(!t){const e=this._editor.getPosition();t=this._editor.getModel().getLineContent(e.lineNumber).substr(0,e.column-1)}let i="";ui(t.charCodeAt(t.length-1))?di(t.charCodeAt(t.length-2))&&(i=t.substr(t.length-2)):i=t.charAt(t.length-1);const n=e.get(i);if(n){const e=this._completionModel?{items:this._completionModel.adopt(n),clipboardText:this._completionModel.clipboardText}:void 0;this.trigger({auto:!0,shy:!1,triggerCharacter:i},Boolean(this._completionModel),n,e)}};this._triggerCharacterListener.add(this._editor.onDidType(t)),this._triggerCharacterListener.add(this._editor.onDidCompositionEnd(t))}get state(){return this._state}cancel(e=!1){var t;0!==this._state&&(this._triggerQuickSuggest.cancel(),null===(t=this._requestToken)||void 0===t||t.cancel(),this._requestToken=void 0,this._state=0,this._completionModel=void 0,this._context=void 0,this._onDidCancel.fire({retrigger:e}))}clear(){this._completionDisposables.clear()}_updateActiveSuggestSession(){0!==this._state&&(this._editor.hasModel()&&Ml.has(this._editor.getModel())?this.trigger({auto:2===this._state,shy:!1},!0):this.cancel())}_onCursorChange(e){if(!this._editor.hasModel())return;const t=this._editor.getModel(),i=this._currentSelection;if(this._currentSelection=this._editor.getSelection(),!e.selection.isEmpty()||0!==e.reason&&3!==e.reason||"keyboard"!==e.source&&"deleteLeft"!==e.source)this.cancel();else if(Ml.has(t))if(0===this._state&&0===e.reason){if(!1===this._editor.getOption(75))return;if(!i.containsRange(this._currentSelection)&&!i.getEndPosition().isBeforeOrEqual(this._currentSelection.getPosition()))return;if(this._editor.getOption(106).snippetsPreventQuickSuggestions&&GO.get(this._editor).isInSnippet())return;this.cancel(),this._triggerQuickSuggest.cancelAndSet(()=>{if(0!==this._state)return;if(!rR.shouldAutoTrigger(this._editor))return;if(!this._editor.hasModel())return;const e=this._editor.getModel(),t=this._editor.getPosition(),i=this._editor.getOption(75);if(!1!==i){if(!0===i);else{e.tokenizeIfCheap(t.lineNumber);const n=e.getLineTokens(t.lineNumber),o=n.getStandardTokenType(n.findTokenIndexAtOffset(Math.max(t.column-1-1,0)));if(!(i.other&&0===o||i.comments&&1===o||i.strings&&2===o))return}this.trigger({auto:!0,shy:!1})}},this._quickSuggestDelay)}else 0!==this._state&&3===e.reason&&this._refilterCompletionItems()}_refilterCompletionItems(){Promise.resolve().then(()=>{if(0===this._state)return;if(!this._editor.hasModel())return;const e=this._editor.getModel(),t=this._editor.getPosition(),i=new rR(e,t,2===this._state,!1);this._onNewContext(i)})}trigger(t,i=!1,o,s){var r;if(!this._editor.hasModel())return;const a=this._editor.getModel(),l=t.auto,h=new rR(a,this._editor.getPosition(),l,t.shy);this.cancel(i),this._state=l?2:1,this._onDidTrigger.fire({auto:l,shy:t.shy,position:this._editor.getPosition()}),this._context=h;let c=null!==(r=t.triggerKind)&&void 0!==r?r:0;t.triggerCharacter?c=1:t.updateSuggestions&&(c=3);const d={triggerKind:c,triggerCharacter:t.triggerCharacter,auto:t.auto};d.auto=t.auto,this._requestToken=new Oa;const u=this._editor.getOption(101);let g=1;switch(u){case"top":g=0;break;case"bottom":g=2}const p=e._createItemKindFilter(this._editor),m=oR.create(this._editorWorkerService,this._editor),f=wO(a,this._editor.getPosition(),new vO(g,p,o),d,this._requestToken.token);Promise.all([f,m]).then(([e,i])=>(function(e,t,i,n){return new(i||(i=Promise))((function(t,o){function s(e){try{a(n.next(e))}catch(e){o(e)}}function r(e){try{a(n.throw(e))}catch(e){o(e)}}function a(e){e.done?t(e.value):function n(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(s,r)}a((n=n.apply(e,[])).next())}))})(this,0,void 0,(function*(){var n;if(null===(n=this._requestToken)||void 0===n||n.dispose(),!this._editor.hasModel())return;let o=null==s?void 0:s.clipboardText;if(!o&&e.needsClipboard&&(o=yield this._clipboardService.readText()),0===this._state)return;const r=this._editor.getModel();let a=e.items;if(s){const e=LO(g);a=a.concat(s.items).sort(e)}const h=new rR(r,this._editor.getPosition(),l,t.shy);this._completionModel=new iR(a,this._context.column,{leadingLineContent:h.leadingLineContent,characterCountDelta:h.column-this._context.column},i,this._editor.getOption(106),this._editor.getOption(101),o),this._completionDisposables.add(e.disposable),this._onNewContext(h),this._reportDurationsTelemetry(e.durations)}))).catch(n)}_reportDurationsTelemetry(e){this._telemetryGate++%230==0&&setTimeout(()=>{this._telemetryService.publicLog2("suggest.durations.json",{data:JSON.stringify(e)}),this._logService.debug("suggest.durations.json",e)})}static _createItemKindFilter(e){const t=new Set;"none"===e.getOption(101)&&t.add(27);const i=e.getOption(106);return i.showMethods||t.add(0),i.showFunctions||t.add(1),i.showConstructors||t.add(2),i.showFields||t.add(3),i.showVariables||t.add(4),i.showClasses||t.add(5),i.showStructs||t.add(6),i.showInterfaces||t.add(7),i.showModules||t.add(8),i.showProperties||t.add(9),i.showEvents||t.add(10),i.showOperators||t.add(11),i.showUnits||t.add(12),i.showValues||t.add(13),i.showConstants||t.add(14),i.showEnums||t.add(15),i.showEnumMembers||t.add(16),i.showKeywords||t.add(17),i.showWords||t.add(18),i.showColors||t.add(19),i.showFiles||t.add(20),i.showReferences||t.add(21),i.showColors||t.add(22),i.showFolders||t.add(23),i.showTypeParameters||t.add(24),i.showSnippets||t.add(27),i.showUsers||t.add(25),i.showIssues||t.add(26),t}_onNewContext(e){if(this._context)if(e.lineNumber===this._context.lineNumber)if(Xt(e.leadingLineContent)===Xt(this._context.leadingLineContent)){if(e.columnthis._context.leadingWord.startColumn){const e=new Set(Ml.all(this._editor.getModel()));for(let t of this._completionModel.allProvider)e.delete(t);const t=this._completionModel.adopt(new Set);this.trigger({auto:this._context.auto,shy:!1},!0,e,{items:t,clipboardText:this._completionModel.clipboardText})}else if(e.column>this._context.column&&this._completionModel.incomplete.size>0&&0!==e.leadingWord.word.length){const{incomplete:e}=this._completionModel,t=this._completionModel.adopt(e);this.trigger({auto:2===this._state,shy:!1,triggerKind:2},!0,e,{items:t,clipboardText:this._completionModel.clipboardText})}else{let t=this._completionModel.lineContext,i=!1;if(this._completionModel.lineContext={leadingLineContent:e.leadingLineContent,characterCountDelta:e.column-this._context.column},0===this._completionModel.items.length){if(rR.shouldAutoTrigger(this._editor)&&this._context.leadingWord.endColumn0)&&0===e.leadingWord.word.length)return void this.cancel()}if(1===this._completionModel.items.length){const t=this._completionModel.items[0];if(e.auto&&!t.completion.additionalTextEdits&&t.completion.insertText===e.leadingWord.word)return void this.cancel()}this._onDidSuggest.fire({completionModel:this._completionModel,auto:this._context.auto,shy:this._context.shy,isFrozen:i})}}else this.cancel();else this.cancel()}};function lR(e){let t=e.definition;for(;t instanceof un;)t=t.definition;return`.codicon-${e.id}:before { content: '${t.fontCharacter}'; }`}aR=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([sR(1,Sy),sR(2,ky),sR(3,Kn),sR(4,PM)],aR);const hR=im("symbolIcon.arrayForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),cR=im("symbolIcon.booleanForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),dR=im("symbolIcon.classForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},t(0,"The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),uR=im("symbolIcon.colorForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),gR=im("symbolIcon.constantForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),pR=im("symbolIcon.constructorForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},t(0,"The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),mR=im("symbolIcon.enumeratorForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},t(0,"The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),fR=im("symbolIcon.enumeratorMemberForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},t(0,"The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),_R=im("symbolIcon.eventForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},t(0,"The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),bR=im("symbolIcon.fieldForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},t(0,"The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),vR=im("symbolIcon.fileForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),CR=im("symbolIcon.folderForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),wR=im("symbolIcon.functionForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},t(0,"The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),yR=im("symbolIcon.interfaceForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},t(0,"The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),SR=im("symbolIcon.keyForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),LR=im("symbolIcon.keywordForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),DR=im("symbolIcon.methodForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},t(0,"The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),ER=im("symbolIcon.moduleForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),xR=im("symbolIcon.namespaceForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),kR=im("symbolIcon.nullForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),NR=im("symbolIcon.numberForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),IR=im("symbolIcon.objectForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),TR=im("symbolIcon.operatorForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),AR=im("symbolIcon.packageForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),MR=im("symbolIcon.propertyForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),OR=im("symbolIcon.referenceForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),RR=im("symbolIcon.snippetForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),PR=im("symbolIcon.stringForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),FR=im("symbolIcon.structForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),BR=im("symbolIcon.textForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),WR=im("symbolIcon.typeParameterForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),VR=im("symbolIcon.unitForeground",{dark:nm,light:nm,hc:nm},t(0,"The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),zR=im("symbolIcon.variableForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},t(0,"The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget."));Cn((e,t)=>{const i=e.getColor(hR);i&&t.addRule(`${un.symbolArray.cssSelector} { color: ${i}; }`);const n=e.getColor(cR);n&&t.addRule(`${un.symbolBoolean.cssSelector} { color: ${n}; }`);const o=e.getColor(dR);o&&t.addRule(`${un.symbolClass.cssSelector} { color: ${o}; }`);const s=e.getColor(DR);s&&t.addRule(`${un.symbolMethod.cssSelector} { color: ${s}; }`);const r=e.getColor(uR);r&&t.addRule(`${un.symbolColor.cssSelector} { color: ${r}; }`);const a=e.getColor(gR);a&&t.addRule(`${un.symbolConstant.cssSelector} { color: ${a}; }`);const l=e.getColor(pR);l&&t.addRule(`${un.symbolConstructor.cssSelector} { color: ${l}; }`);const h=e.getColor(mR);h&&t.addRule(`\n\t\t\t${un.symbolValue.cssSelector},${un.symbolEnum.cssSelector} { color: ${h}; }`);const c=e.getColor(fR);c&&t.addRule(`${un.symbolEnumMember.cssSelector} { color: ${c}; }`);const d=e.getColor(_R);d&&t.addRule(`${un.symbolEvent.cssSelector} { color: ${d}; }`);const u=e.getColor(bR);u&&t.addRule(`${un.symbolField.cssSelector} { color: ${u}; }`);const g=e.getColor(vR);g&&t.addRule(`${un.symbolFile.cssSelector} { color: ${g}; }`);const p=e.getColor(CR);p&&t.addRule(`${un.symbolFolder.cssSelector} { color: ${p}; }`);const m=e.getColor(wR);m&&t.addRule(`${un.symbolFunction.cssSelector} { color: ${m}; }`);const f=e.getColor(yR);f&&t.addRule(`${un.symbolInterface.cssSelector} { color: ${f}; }`);const _=e.getColor(SR);_&&t.addRule(`${un.symbolKey.cssSelector} { color: ${_}; }`);const b=e.getColor(LR);b&&t.addRule(`${un.symbolKeyword.cssSelector} { color: ${b}; }`);const v=e.getColor(ER);v&&t.addRule(`${un.symbolModule.cssSelector} { color: ${v}; }`);const C=e.getColor(xR);C&&t.addRule(`${un.symbolNamespace.cssSelector} { color: ${C}; }`);const w=e.getColor(kR);w&&t.addRule(`${un.symbolNull.cssSelector} { color: ${w}; }`);const y=e.getColor(NR);y&&t.addRule(`${un.symbolNumber.cssSelector} { color: ${y}; }`);const S=e.getColor(IR);S&&t.addRule(`${un.symbolObject.cssSelector} { color: ${S}; }`);const L=e.getColor(TR);L&&t.addRule(`${un.symbolOperator.cssSelector} { color: ${L}; }`);const D=e.getColor(AR);D&&t.addRule(`${un.symbolPackage.cssSelector} { color: ${D}; }`);const E=e.getColor(MR);E&&t.addRule(`${un.symbolProperty.cssSelector} { color: ${E}; }`);const x=e.getColor(OR);x&&t.addRule(`${un.symbolReference.cssSelector} { color: ${x}; }`);const k=e.getColor(RR);k&&t.addRule(`${un.symbolSnippet.cssSelector} { color: ${k}; }`);const N=e.getColor(PR);N&&t.addRule(`${un.symbolString.cssSelector} { color: ${N}; }`);const I=e.getColor(FR);I&&t.addRule(`${un.symbolStruct.cssSelector} { color: ${I}; }`);const T=e.getColor(BR);T&&t.addRule(`${un.symbolText.cssSelector} { color: ${T}; }`);const A=e.getColor(WR);A&&t.addRule(`${un.symbolTypeParameter.cssSelector} { color: ${A}; }`);const M=e.getColor(VR);M&&t.addRule(`${un.symbolUnit.cssSelector} { color: ${M}; }`);const O=e.getColor(zR);O&&t.addRule(`${un.symbolVariable.cssSelector} { color: ${O}; }`)});class HR{constructor(){let e;this._onDidWillResize=new oe,this.onDidWillResize=this._onDidWillResize.event,this._onDidResize=new oe,this.onDidResize=this._onDidResize.event,this._sashListener=new v,this._size=new hu(0,0),this._minSize=new hu(0,0),this._maxSize=new hu(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),this.domNode=document.createElement("div"),this._eastSash=new jw(this.domNode,{getVerticalSashLeft:()=>this._size.width},{orientation:0}),this._westSash=new jw(this.domNode,{getVerticalSashLeft:()=>0},{orientation:0}),this._northSash=new jw(this.domNode,{getHorizontalSashTop:()=>0},{orientation:1,orthogonalEdge:Uw.North}),this._southSash=new jw(this.domNode,{getHorizontalSashTop:()=>this._size.height},{orientation:1,orthogonalEdge:Uw.South}),this._northSash.orthogonalStartSash=this._westSash,this._northSash.orthogonalEndSash=this._eastSash,this._southSash.orthogonalStartSash=this._westSash,this._southSash.orthogonalEndSash=this._eastSash;let t=0,i=0;this._sashListener.add(ie.any(this._northSash.onDidStart,this._eastSash.onDidStart,this._southSash.onDidStart,this._westSash.onDidStart)(()=>{void 0===e&&(this._onDidWillResize.fire(),e=this._size,t=0,i=0)})),this._sashListener.add(ie.any(this._northSash.onDidEnd,this._eastSash.onDidEnd,this._southSash.onDidEnd,this._westSash.onDidEnd)(()=>{void 0!==e&&(e=void 0,t=0,i=0,this._onDidResize.fire({dimension:this._size,done:!0}))})),this._sashListener.add(this._eastSash.onDidChange(n=>{e&&(this.layout(e.height+t,e.width+(i=n.currentX-n.startX)),this._onDidResize.fire({dimension:this._size,done:!1,east:!0}))})),this._sashListener.add(this._westSash.onDidChange(n=>{e&&(this.layout(e.height+t,e.width+(i=-(n.currentX-n.startX))),this._onDidResize.fire({dimension:this._size,done:!1,west:!0}))})),this._sashListener.add(this._northSash.onDidChange(n=>{e&&(this.layout(e.height+(t=-(n.currentY-n.startY)),e.width+i),this._onDidResize.fire({dimension:this._size,done:!1,north:!0}))})),this._sashListener.add(this._southSash.onDidChange(n=>{e&&(this.layout(e.height+(t=n.currentY-n.startY),e.width+i),this._onDidResize.fire({dimension:this._size,done:!1,south:!0}))})),this._sashListener.add(ie.any(this._eastSash.onDidReset,this._westSash.onDidReset)(e=>{this._preferredSize&&(this.layout(this._size.height,this._preferredSize.width),this._onDidResize.fire({dimension:this._size,done:!0}))})),this._sashListener.add(ie.any(this._northSash.onDidReset,this._southSash.onDidReset)(e=>{this._preferredSize&&(this.layout(this._preferredSize.height,this._size.width),this._onDidResize.fire({dimension:this._size,done:!0}))}))}dispose(){this._northSash.dispose(),this._southSash.dispose(),this._eastSash.dispose(),this._westSash.dispose(),this._sashListener.dispose(),this.domNode.remove()}enableSashes(e,t,i,n){this._northSash.state=e?3:0,this._eastSash.state=t?3:0,this._southSash.state=i?3:0,this._westSash.state=n?3:0}layout(e=this.size.height,t=this.size.width){const{height:i,width:n}=this._minSize,{height:o,width:s}=this._maxSize;e=Math.max(i,Math.min(o,e)),t=Math.max(n,Math.min(s,t));const r=new hu(t,e);hu.equals(r,this._size)||(this.domNode.style.height=e+"px",this.domNode.style.width=t+"px",this._size=r,this._northSash.layout(),this._eastSash.layout(),this._southSash.layout(),this._westSash.layout())}get size(){return this._size}set maxSize(e){this._maxSize=e}get maxSize(){return this._maxSize}set minSize(e){this._minSize=e}get minSize(){return this._minSize}set preferredSize(e){this._preferredSize=e}get preferredSize(){return this._preferredSize}}function UR(e){return!!e&&Boolean(e.completion.documentation||e.completion.detail&&e.completion.detail!==e.completion.label)}let KR=class{constructor(e,i){this._editor=e,this._onDidClose=new oe,this.onDidClose=this._onDidClose.event,this._onDidChangeContents=new oe,this.onDidChangeContents=this._onDidChangeContents.event,this._disposables=new v,this._renderDisposeable=new v,this._borderWidth=1,this._size=new hu(330,0),this.domNode=Bu(".suggest-details"),this.domNode.classList.add("no-docs"),this._markdownRenderer=i.createInstance(EA,{editor:e}),this._body=Bu(".body"),this._scrollbar=new Kb(this._body,{}),Mu(this.domNode,this._scrollbar.getDomNode()),this._disposables.add(this._scrollbar),this._header=Mu(this._body,Bu(".header")),this._close=Mu(this._header,Bu("span"+un.close.cssSelector)),this._close.title=t(0,"Close"),this._type=Mu(this._header,Bu("p.type")),this._docs=Mu(this._body,Bu("p.docs")),this._configureFont(),this._disposables.add(this._editor.onDidChangeConfiguration(e=>{e.hasChanged(38)&&this._configureFont()}))}dispose(){this._disposables.dispose(),this._renderDisposeable.dispose()}_configureFont(){const e=this._editor.getOptions(),t=e.get(38),i=t.fontFamily,n=e.get(107)||t.fontSize,o=e.get(108)||t.lineHeight,s=t.fontWeight,r=`${o}px`;this.domNode.style.fontSize=`${n}px`,this.domNode.style.lineHeight=r,this.domNode.style.fontWeight=s,this.domNode.style.fontFeatureSettings=t.fontFeatureSettings,this._type.style.fontFamily=i,this._close.style.height=r,this._close.style.width=r}getLayoutInfo(){const e=this._editor.getOption(108)||this._editor.getOption(38).lineHeight,t=this._borderWidth;return{lineHeight:e,borderWidth:t,borderHeight:2*t,verticalPadding:22,horizontalPadding:14}}renderLoading(){this._type.textContent=t(0,"Loading..."),this._docs.textContent="",this.domNode.classList.remove("no-docs","no-type"),this.layout(this.size.width,2*this.getLayoutInfo().lineHeight),this._onDidChangeContents.fire(this)}renderItem(e,t){var i;this._renderDisposeable.clear();let{detail:n,documentation:o}=e.completion;if(t){let t="";t+=`score: ${e.score[0]}${e.word?`, compared '${e.completion.filterText||"string"==typeof e.completion.label?e.completion.label:e.completion.label.name}' with '${e.word}'`:" (no prefix)"}\n`,t+=`distance: ${e.distance}, see localityBonus-setting\n`,t+=`index: ${e.idx}, based on ${e.completion.sortText&&`sortText: "${e.completion.sortText}"`||"label"}\n`,t+=`commit characters: ${null===(i=e.completion.commitCharacters)||void 0===i?void 0:i.join("")}\n`,o=(new oA).appendCodeblock("empty",t),n=`Provider: ${e.provider._debugDisplayName}`}if(t||UR(e)){if(this.domNode.classList.remove("no-docs","no-type"),n){const e=n.length>1e5?`${n.substr(0,1e5)}…`:n;this._type.textContent=e,this._type.title=e,Wu(this._type),this._type.classList.toggle("auto-wrap",!/\r?\n^\s+/gim.test(e))}else Ud(this._type),this._type.title="",Vu(this._type),this.domNode.classList.add("no-type");if(Ud(this._docs),"string"==typeof o)this._docs.classList.remove("markdown-docs"),this._docs.textContent=o;else if(o){this._docs.classList.add("markdown-docs"),Ud(this._docs);const e=this._markdownRenderer.render(o);this._docs.appendChild(e.element),this._renderDisposeable.add(e),this._renderDisposeable.add(this._markdownRenderer.onDidRenderAsync(()=>{this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}))}this.domNode.style.userSelect="text",this.domNode.tabIndex=-1,this._close.onmousedown=e=>{e.preventDefault(),e.stopPropagation()},this._close.onclick=e=>{e.preventDefault(),e.stopPropagation(),this._onDidClose.fire()},this._body.scrollTop=0,this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}else this.clearContents()}clearContents(){this.domNode.classList.add("no-docs"),this._type.textContent="",this._docs.textContent=""}get size(){return this._size}layout(e,t){const i=new hu(e,t);hu.equals(i,this._size)||(this._size=i,function n(e,t,i){"number"==typeof t&&(e.style.width=`${t}px`),"number"==typeof i&&(e.style.height=`${i}px`)}(this.domNode,e,t)),this._scrollbar.scanDomNode()}scrollDown(e=8){this._body.scrollTop+=e}scrollUp(e=8){this._body.scrollTop-=e}scrollTop(){this._body.scrollTop=0}scrollBottom(){this._body.scrollTop=this._body.scrollHeight}pageDown(){this.scrollDown(80)}pageUp(){this.scrollUp(80)}set borderWidth(e){this._borderWidth=e}get borderWidth(){return this._borderWidth}};KR=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,1)}}(0,Et)],KR);class $R{constructor(e,t){let i,n;this.widget=e,this._editor=t,this._disposables=new v,this._added=!1,this._resizable=new HR,this._resizable.domNode.classList.add("suggest-details-container"),this._resizable.domNode.appendChild(e.domNode),this._resizable.enableSashes(!1,!0,!0,!1);let o=0,s=0;this._disposables.add(this._resizable.onDidWillResize(()=>{i=this._topLeft,n=this._resizable.size})),this._disposables.add(this._resizable.onDidResize(e=>{if(i&&n){this.widget.layout(e.dimension.width,e.dimension.height);let t=!1;e.west&&(s=n.width-e.dimension.width,t=!0),e.north&&(o=n.height-e.dimension.height,t=!0),t&&this._applyTopLeft({top:i.top+o,left:i.left+s})}e.done&&(i=void 0,n=void 0,o=0,s=0,this._userSize=e.dimension)})),this._disposables.add(this.widget.onDidChangeContents(()=>{var e;this._anchorBox&&this._placeAtAnchor(this._anchorBox,null!==(e=this._userSize)&&void 0!==e?e:this.widget.size)}))}dispose(){this._disposables.dispose(),this.hide()}getId(){return"suggest.details"}getDomNode(){return this._resizable.domNode}getPosition(){return null}show(){this._added||(this._editor.addOverlayWidget(this),this.getDomNode().style.position="fixed",this._added=!0)}hide(e=!1){this._added&&(this._editor.removeOverlayWidget(this),this._added=!1,this._anchorBox=void 0,this._topLeft=void 0),e&&(this._userSize=void 0,this.widget.clearContents())}placeAtAnchor(e){var t;const i=cu(e);this._anchorBox=i,this._placeAtAnchor(this._anchorBox,null!==(t=this._userSize)&&void 0!==t?t:this.widget.size)}_placeAtAnchor(e,t){const i=au(document.body),n=this.widget.getLayoutInfo();let o,s,r,a,l=new hu(220,2*n.lineHeight),h=0,c=e.top,d=e.top+e.height-n.borderHeight,u=i.width-(e.left+e.width+n.borderWidth+n.horizontalPadding);h=-n.borderWidth+e.left+e.width,a=!0,s=(o=new hu(u,i.height-e.top-n.borderHeight-n.verticalPadding)).with(void 0,e.top+e.height-n.borderHeight-n.verticalPadding),t.width>u&&(e.left>u&&(u=e.left-n.borderWidth-n.horizontalPadding,a=!1,h=Math.max(n.horizontalPadding,e.left-t.width-n.borderWidth),s=(o=o.with(u)).with(void 0,s.height)),e.width>1.3*u&&i.height-(e.top+e.height)>e.height&&(u=e.width,h=e.left,c=-n.borderWidth+e.top+e.height,s=(o=new hu(e.width-n.borderHeight,i.height-e.top-e.height-n.verticalPadding)).with(void 0,e.top-n.verticalPadding),l=l.with(o.width)));let g,p=t.height,m=Math.max(o.height,s.height);p>m&&(p=m),p<=o.height?(r=!0,g=o):(r=!1,g=s),this._applyTopLeft({left:h,top:r?c:d-p}),this.getDomNode().style.position="fixed",this._resizable.enableSashes(!r,a,r,!a),this._resizable.minSize=l,this._resizable.maxSize=g,this._resizable.layout(p,Math.min(g.width,t.width)),this.widget.layout(this._resizable.size.width,this._resizable.size.height)}_applyTopLeft(e){this._topLeft=e,this.getDomNode().style.left=`${this._topLeft.left}px`,this.getDomNode().style.top=`${this._topLeft.top}px`}}var jR=function(e,t){return function(i,n){t(i,n,e)}};class qR extends MD{updateLabel(){const e=this._keybindingService.lookupKeybinding(this._action.id);if(!e)return super.updateLabel();this.label&&(this.label.textContent=t(0,"{0} ({1})",this._action.label,qR.symbolPrintEnter(e)))}static symbolPrintEnter(e){var t;return null===(t=e.getLabel())||void 0===t?void 0:t.replace(/\benter\b/gi,"⏎")}}let GR=class{constructor(e,t,i,n){this._menuService=i,this._contextKeyService=n,this._menuDisposables=new v,this.element=Mu(e,Bu(".suggest-status-bar"));const o=e=>e instanceof kn?t.createInstance(qR,e):void 0;this._leftActions=new ly(this.element,{actionViewItemProvider:o}),this._rightActions=new ly(this.element,{actionViewItemProvider:o}),this._leftActions.domNode.classList.add("left"),this._rightActions.domNode.classList.add("right")}dispose(){this._menuDisposables.dispose(),this.element.remove()}show(){const e=this._menuService.createMenu(_O,this._contextKeyService),t=()=>{const t=[],i=[];for(let[n,o]of e.getActions())"left"===n?t.push(...o):i.push(...o);this._leftActions.clear(),this._leftActions.push(t),this._rightActions.clear(),this._rightActions.push(i)};this._menuDisposables.add(e.onDidChange(()=>t())),this._menuDisposables.add(e)}hide(){this._menuDisposables.clear()}};GR=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([jR(1,Et),jR(2,Dn),jR(3,en)],GR);const YR=new class{constructor(){this._onDidChangeLanguages=new oe,this.onDidChangeLanguages=this._onDidChangeLanguages.event,this._languages=[],this._dynamicLanguages=[]}registerLanguage(e){return this._languages.push(e),this._onDidChangeLanguages.fire(void 0),{dispose:()=>{for(let t=0,i=this._languages.length;t"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],folding:{offSide:!0}},0),function(e){e[e.FILE=0]="FILE",e[e.FOLDER=1]="FOLDER",e[e.ROOT_FOLDER=2]="ROOT_FOLDER"}(QR||(QR={}));var tP,iP=function(e,t){return function(i,n){t(i,n,e)}};function nP(e){return`suggest-aria-id:${e}`}const oP=cy("suggest-more-info",un.chevronRight,t(0,"Icon for more information in the suggest widget.")),sP=new((tP=class e{extract(t,i){if(t.textLabel.match(e._regexStrict))return i[0]=t.textLabel,!0;if(t.completion.detail&&t.completion.detail.match(e._regexStrict))return i[0]=t.completion.detail,!0;if("string"==typeof t.completion.documentation){const n=e._regexRelaxed.exec(t.completion.documentation);if(n&&(0===n.index||n.index+n[0].length===t.completion.documentation.length))return i[0]=n[0],!0}return!1}})._regexRelaxed=/(#([\da-fA-F]{3}){1,2}|(rgb|hsl)a\(\s*(\d{1,3}%?\s*,\s*){3}(1|0?\.\d+)\)|(rgb|hsl)\(\s*\d{1,3}%?(\s*,\s*\d{1,3}%?){2}\s*\))/,tP._regexStrict=new RegExp(`^${tP._regexRelaxed.source}$`,"i"),tP);let rP=class{constructor(e,t,i,n){this._editor=e,this._modelService=t,this._modeService=i,this._themeService=n,this._onDidToggleDetails=new oe,this.onDidToggleDetails=this._onDidToggleDetails.event,this.templateId="suggestion"}dispose(){this._onDidToggleDetails.dispose()}renderTemplate(e){const i=Object.create(null);i.disposables=new v,i.root=e,i.root.classList.add("show-file-icons"),i.icon=Mu(e,Bu(".icon")),i.colorspan=Mu(i.icon,Bu("span.colorspan"));const n=Mu(e,Bu(".contents")),o=Mu(n,Bu(".main"));i.iconContainer=Mu(o,Bu(".icon-label.codicon")),i.left=Mu(o,Bu("span.left")),i.right=Mu(o,Bu("span.right")),i.iconLabel=new uE(i.left,{supportHighlights:!0,supportIcons:!0}),i.disposables.add(i.iconLabel),i.parametersLabel=Mu(i.left,Bu("span.signature-label")),i.qualifierLabel=Mu(i.left,Bu("span.qualifier-label")),i.detailsLabel=Mu(i.right,Bu("span.details-label")),i.readMore=Mu(i.right,Bu("span.readMore"+fn.asCSSSelector(oP))),i.readMore.title=t(0,"Read More");const s=()=>{const e=this._editor.getOptions(),t=e.get(38),n=t.fontFamily,s=t.fontFeatureSettings,r=e.get(107)||t.fontSize,a=e.get(108)||t.lineHeight,l=t.fontWeight,h=`${a}px`;i.root.style.fontSize=`${r}px`,i.root.style.fontWeight=l,o.style.fontFamily=n,o.style.fontFeatureSettings=s,o.style.lineHeight=h,i.icon.style.height=h,i.icon.style.width=h,i.readMore.style.height=h,i.readMore.style.width=h};return s(),i.disposables.add(this._editor.onDidChangeConfiguration(e=>{(e.hasChanged(38)||e.hasChanged(107)||e.hasChanged(108))&&s()})),i}renderElement(e,t,i){var n,o,s;const{completion:r}=e,a="string"==typeof r.label?r.label:r.label.name;i.root.id=nP(t),i.colorspan.style.backgroundColor="";const l={labelEscapeNewLines:!0,matches:$E(e.score)};let h=[];if(19===r.kind&&sP.extract(e,h))i.icon.className="icon customcolor",i.iconContainer.className="icon hide",i.colorspan.style.backgroundColor=h[0];else if(20===r.kind&&this._themeService.getFileIconTheme().hasFileIcons){i.icon.className="icon hide",i.iconContainer.className="icon hide";const e=JR(this._modelService,this._modeService,mt.from({scheme:"fake",path:a}),QR.FILE),t=JR(this._modelService,this._modeService,mt.from({scheme:"fake",path:r.detail}),QR.FILE);l.extraClasses=e.length>t.length?e:t}else 23===r.kind&&this._themeService.getFileIconTheme().hasFolderIcons?(i.icon.className="icon hide",i.iconContainer.className="icon hide",l.extraClasses=aa([JR(this._modelService,this._modeService,mt.from({scheme:"fake",path:a}),QR.FOLDER),JR(this._modelService,this._modeService,mt.from({scheme:"fake",path:r.detail}),QR.FOLDER)])):(i.icon.className="icon hide",i.iconContainer.className="",i.iconContainer.classList.add("suggest-icon",...Ll(r.kind).split(" ")));r.tags&&r.tags.indexOf(1)>=0&&(l.extraClasses=(l.extraClasses||[]).concat(["deprecated"]),l.matches=[]),i.iconLabel.setLabel(a,void 0,l),"string"==typeof r.label?(i.parametersLabel.textContent="",i.qualifierLabel.textContent="",i.detailsLabel.textContent=(r.detail||"").replace(/\n.*$/m,""),i.root.classList.add("string-label"),i.root.title=""):(i.parametersLabel.textContent=(r.label.parameters||"").replace(/\n.*$/m,""),i.qualifierLabel.textContent=(r.label.qualifier||"").replace(/\n.*$/m,""),i.detailsLabel.textContent=(r.label.type||"").replace(/\n.*$/m,""),i.root.classList.remove("string-label"),i.root.title=`${a}${null!==(n=r.label.parameters)&&void 0!==n?n:""} ${null!==(o=r.label.qualifier)&&void 0!==o?o:""} ${null!==(s=r.label.type)&&void 0!==s?s:""}`),this._editor.getOption(106).showInlineDetails?Wu(i.detailsLabel):Vu(i.detailsLabel),UR(e)?(i.right.classList.add("can-expand-details"),Wu(i.readMore),i.readMore.onmousedown=e=>{e.stopPropagation(),e.preventDefault()},i.readMore.onclick=e=>{e.stopPropagation(),e.preventDefault(),this._onDidToggleDetails.fire()}):(i.right.classList.remove("can-expand-details"),Vu(i.readMore),i.readMore.onmousedown=null,i.readMore.onclick=null)}disposeTemplate(e){e.disposables.dispose()}};rP=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([iP(1,At),iP(2,nT),iP(3,pn)],rP);var aP=function(e,t){return function(i,n){t(i,n,e)}};const lP=im("editorSuggestWidget.background",{dark:qm,light:qm,hc:qm},t(0,"Background color of the suggest widget.")),hP=im("editorSuggestWidget.border",{dark:Ym,light:Ym,hc:Ym},t(0,"Border color of the suggest widget.")),cP=im("editorSuggestWidget.foreground",{dark:jm,light:jm,hc:jm},t(0,"Foreground color of the suggest widget.")),dP=im("editorSuggestWidget.selectedBackground",{dark:Jm,light:Jm,hc:Jm},t(0,"Background color of the selected entry in the suggest widget.")),uP=im("editorSuggestWidget.highlightForeground",{dark:Ff,light:Ff,hc:Ff},t(0,"Color of the match highlights in the suggest widget."));class gP{constructor(e,t){this._service=e,this._key=`suggestWidget.size/${t.getEditorType()}/${t instanceof CD}`}restore(){var e;const t=null!==(e=this._service.get(this._key,0))&&void 0!==e?e:"";try{const e=JSON.parse(t);if(hu.is(e))return hu.lift(e)}catch(e){}}store(e){this._service.store(this._key,JSON.stringify(e),0,1)}reset(){this._service.remove(this._key,0)}}let pP=class e{constructor(e,i,n,o,s){this.editor=e,this._storageService=i,this._state=0,this._isAuto=!1,this._ignoreFocusEvents=!1,this._explainMode=!1,this._showTimeout=new Ua,this._disposables=new v,this._onDidSelect=new oe,this._onDidFocus=new oe,this._onDidHide=new oe,this._onDidShow=new oe,this.onDidSelect=this._onDidSelect.event,this.onDidFocus=this._onDidFocus.event,this.onDidHide=this._onDidHide.event,this.onDidShow=this._onDidShow.event,this._isUserAware=!1,this._onDetailsKeydown=new oe,this.onDetailsKeyDown=this._onDetailsKeydown.event,this.element=new HR,this.element.domNode.classList.add("editor-widget","suggest-widget"),this._contentWidget=new mP(this,e),this._persistedSize=new gP(i,e);class r{constructor(e,t,i=!1,n=!1){this.persistedSize=e,this.currentSize=t,this.persistHeight=i,this.persistWidth=n}}let a;this._disposables.add(this.element.onDidWillResize(()=>{this._contentWidget.lockPreference(),a=new r(this._persistedSize.restore(),this.element.size)})),this._disposables.add(this.element.onDidResize(e=>{var t,i,n,o;if(this._resize(e.dimension.width,e.dimension.height),a&&(a.persistHeight=a.persistHeight||!!e.north||!!e.south,a.persistWidth=a.persistWidth||!!e.east||!!e.west),e.done){if(a){const{itemHeight:e,defaultSize:s}=this.getLayoutInfo(),r=Math.round(e/2);let{width:l,height:h}=this.element.size;(!a.persistHeight||Math.abs(a.currentSize.height-h)<=r)&&(h=null!==(i=null===(t=a.persistedSize)||void 0===t?void 0:t.height)&&void 0!==i?i:s.height),(!a.persistWidth||Math.abs(a.currentSize.width-l)<=r)&&(l=null!==(o=null===(n=a.persistedSize)||void 0===n?void 0:n.width)&&void 0!==o?o:s.width),this._persistedSize.store(new hu(l,h))}this._contentWidget.unlockPreference(),a=void 0}})),this._messageElement=Mu(this.element.domNode,Bu(".message")),this._listElement=Mu(this.element.domNode,Bu(".tree"));const l=s.createInstance(KR,this.editor);l.onDidClose(this.toggleDetails,this,this._disposables),this._details=new $R(l,this.editor);const h=()=>this.element.domNode.classList.toggle("no-icons",!this.editor.getOption(106).showIcons);h();const c=s.createInstance(rP,this.editor);this._disposables.add(c),this._disposables.add(c.onDidToggleDetails(()=>this.toggleDetails())),this._list=new ik("SuggestWidget",this._listElement,{getHeight:e=>this.getLayoutInfo().itemHeight,getTemplateId:e=>"suggestion"},[c],{alwaysConsumeMouseWheel:!0,useShadows:!1,mouseSupport:!1,accessibilityProvider:{getRole:()=>"option",getAriaLabel:e=>{const i="string"==typeof e.completion.label?e.completion.label:e.completion.label.name;if(e.isResolved&&this._isDetailsVisible()){const{documentation:n,detail:o}=e.completion;return t(0,"{0}, docs: {1}",i,Ut("{0}{1}",o||"",n?"string"==typeof n?n:n.value:""))}return i},getWidgetAriaLabel:()=>t(0,"Suggest"),getWidgetRole:()=>"listbox"}}),this._status=s.createInstance(GR,this.element.domNode);const d=()=>this.element.domNode.classList.toggle("with-status-bar",this.editor.getOption(106).showStatusBar);d(),this._disposables.add(CE(this._list,o,{listInactiveFocusBackground:dP,listInactiveFocusOutline:rm})),this._disposables.add(o.onDidColorThemeChange(e=>this._onThemeChange(e))),this._onThemeChange(o.getColorTheme()),this._disposables.add(this._list.onMouseDown(e=>this._onListMouseDownOrTap(e))),this._disposables.add(this._list.onTap(e=>this._onListMouseDownOrTap(e))),this._disposables.add(this._list.onDidChangeSelection(e=>this._onListSelection(e))),this._disposables.add(this._list.onDidChangeFocus(e=>this._onListFocus(e))),this._disposables.add(this.editor.onDidChangeCursorSelection(()=>this._onCursorSelectionChanged())),this._disposables.add(this.editor.onDidChangeConfiguration(e=>{e.hasChanged(106)&&(d(),h())})),this._ctxSuggestWidgetVisible=fO.Visible.bindTo(n),this._ctxSuggestWidgetDetailsVisible=fO.DetailsVisible.bindTo(n),this._ctxSuggestWidgetMultipleSuggestions=fO.MultipleSuggestions.bindTo(n),this._disposables.add(Gd(this._details.widget.domNode,"keydown",e=>{this._onDetailsKeydown.fire(e)})),this._disposables.add(this.editor.onMouseDown(e=>this._onEditorMouseDown(e)))}dispose(){var e;this._details.widget.dispose(),this._details.dispose(),this._list.dispose(),this._status.dispose(),this._disposables.dispose(),null===(e=this._loadingTimeout)||void 0===e||e.dispose(),this._showTimeout.dispose(),this._contentWidget.dispose(),this.element.dispose()}_onEditorMouseDown(e){this._details.widget.domNode.contains(e.target.element)?this._details.widget.domNode.focus():this.element.domNode.contains(e.target.element)&&this.editor.focus()}_onCursorSelectionChanged(){0!==this._state&&this._contentWidget.layout()}_onListMouseDownOrTap(e){void 0!==e.element&&void 0!==e.index&&(e.browserEvent.preventDefault(),e.browserEvent.stopPropagation(),this._select(e.element,e.index))}_onListSelection(e){e.elements.length&&this._select(e.elements[0],e.indexes[0])}_select(e,t){const i=this._completionModel;i&&(this._onDidSelect.fire({item:e,index:t,model:i}),this.editor.focus())}_onThemeChange(e){const t=e.getColor(lP);t&&(this.element.domNode.style.backgroundColor=t.toString(),this._messageElement.style.backgroundColor=t.toString(),this._details.widget.domNode.style.backgroundColor=t.toString());const i=e.getColor(hP);i&&(this.element.domNode.style.borderColor=i.toString(),this._messageElement.style.borderColor=i.toString(),this._status.element.style.borderTopColor=i.toString(),this._details.widget.domNode.style.borderColor=i.toString(),this._detailsBorderColor=i.toString());const n=e.getColor(om);n&&(this._detailsFocusBorderColor=n.toString()),this._details.widget.borderWidth="hc"===e.type?2:1}_onListFocus(e){var t;if(this._ignoreFocusEvents)return;if(!e.elements.length)return this._currentSuggestionDetails&&(this._currentSuggestionDetails.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=void 0),void this.editor.setAriaOptions({activeDescendant:void 0});if(!this._completionModel)return;const i=e.elements[0],o=e.indexes[0];i!==this._focusedItem&&(null===(t=this._currentSuggestionDetails)||void 0===t||t.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem&&(this._isUserAware=!0),this._focusedItem=i,this._list.reveal(o),this._currentSuggestionDetails=Pa(e=>(function(e,t,i,n){return new(i||(i=Promise))((function(t,o){function s(e){try{a(n.next(e))}catch(e){o(e)}}function r(e){try{a(n.throw(e))}catch(e){o(e)}}function a(e){e.done?t(e.value):function n(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(s,r)}a((n=n.apply(e,[])).next())}))})(this,0,void 0,(function*(){const t=Ha(()=>{this._isDetailsVisible()&&this.showDetails(!0)},250);e.onCancellationRequested(()=>t.dispose());const n=yield i.resolve(e);return t.dispose(),n}))),this._currentSuggestionDetails.then(()=>{o>=this._list.length||i!==this._list.element(o)||(this._ignoreFocusEvents=!0,this._list.splice(o,1,[i]),this._list.setFocus([o]),this._ignoreFocusEvents=!1,this._isDetailsVisible()?this.showDetails(!1):this.element.domNode.classList.remove("docs-side"),this.editor.setAriaOptions({activeDescendant:nP(o)}))}).catch(n)),this._onDidFocus.fire({item:i,index:o,model:this._completionModel})}_setState(t){if(this._state!==t)switch(this._state=t,this.element.domNode.classList.toggle("frozen",4===t),this.element.domNode.classList.remove("message"),t){case 0:Vu(this._messageElement,this._listElement,this._status.element),this._details.hide(!0),this._status.hide(),this._contentWidget.hide(),this._ctxSuggestWidgetVisible.reset(),this._ctxSuggestWidgetMultipleSuggestions.reset(),this.element.domNode.classList.remove("visible"),this._list.splice(0,this._list.length),this._focusedItem=void 0,this._cappedHeight=void 0,this._explainMode=!1,this._isUserAware=!1;break;case 1:this.element.domNode.classList.add("message"),this._messageElement.textContent=e.LOADING_MESSAGE,Vu(this._listElement,this._status.element),Wu(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0;break;case 2:this.element.domNode.classList.add("message"),this._messageElement.textContent=e.NO_SUGGESTIONS_MESSAGE,Vu(this._listElement,this._status.element),Wu(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0;break;case 3:case 4:Vu(this._messageElement),Wu(this._listElement,this._status.element),this._show();break;case 5:Vu(this._messageElement),Wu(this._listElement,this._status.element),this._details.show(),this._show()}}_show(){this._status.show(),this._contentWidget.show(),this._layout(this._persistedSize.restore()),this._ctxSuggestWidgetVisible.set(!0),this._showTimeout.cancelAndSet(()=>{this.element.domNode.classList.add("visible"),this._onDidShow.fire(this)},100)}showTriggered(e,t){0===this._state&&(this._contentWidget.setPosition(this.editor.getPosition()),this._isAuto=!!e,this._isAuto||(this._loadingTimeout=Ha(()=>this._setState(1),t),this._isUserAware=!0))}showSuggestions(e,t,i,n){var o,s;if(this._contentWidget.setPosition(this.editor.getPosition()),null===(o=this._loadingTimeout)||void 0===o||o.dispose(),null===(s=this._currentSuggestionDetails)||void 0===s||s.cancel(),this._currentSuggestionDetails=void 0,this._completionModel!==e&&(this._completionModel=e),i&&2!==this._state&&0!==this._state)return void this._setState(4);const r=this._completionModel.items.length,a=0===r;if(this._ctxSuggestWidgetMultipleSuggestions.set(r>1),a)return this._setState(n?0:2),void(this._completionModel=void 0);this._focusedItem=void 0,this._list.splice(0,this._list.length,this._completionModel.items),this._setState(i?4:3),this._list.reveal(t,0),this._list.setFocus([t]),this._layout(this.element.size),this._detailsBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsBorderColor)}selectNextPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageDown(),!0;case 1:return!this._isAuto;default:return this._list.focusNextPage(),!0}}selectNext(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusNext(1,!0),!0}}selectLast(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollBottom(),!0;case 1:return!this._isAuto;default:return this._list.focusLast(),!0}}selectPreviousPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageUp(),!0;case 1:return!this._isAuto;default:return this._list.focusPreviousPage(),!0}}selectPrevious(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusPrevious(1,!0),!1}}selectFirst(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollTop(),!0;case 1:return!this._isAuto;default:return this._list.focusFirst(),!0}}getFocusedItem(){if(0!==this._state&&2!==this._state&&1!==this._state&&this._completionModel)return{item:this._list.getFocusedElements()[0],index:this._list.getFocus()[0],model:this._completionModel}}toggleDetailsFocus(){5===this._state?(this._setState(3),this._detailsBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsBorderColor)):3===this._state&&this._isDetailsVisible()&&(this._setState(5),this._detailsFocusBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsFocusBorderColor))}toggleDetails(){this._isDetailsVisible()?(this._ctxSuggestWidgetDetailsVisible.set(!1),this._setDetailsVisible(!1),this._details.hide(),this.element.domNode.classList.remove("shows-details")):!UR(this._list.getFocusedElements()[0])||3!==this._state&&5!==this._state&&4!==this._state||(this._ctxSuggestWidgetDetailsVisible.set(!0),this._setDetailsVisible(!0),this.showDetails(!1))}showDetails(e){this._details.show(),e?this._details.widget.renderLoading():this._details.widget.renderItem(this._list.getFocusedElements()[0],this._explainMode),this._positionDetails(),this.editor.focus(),this.element.domNode.classList.add("shows-details")}toggleExplainMode(){this._list.getFocusedElements()[0]&&this._isDetailsVisible()&&(this._explainMode=!this._explainMode,this.showDetails(!1))}resetPersistedSize(){this._persistedSize.reset()}hideWidget(){var e;null===(e=this._loadingTimeout)||void 0===e||e.dispose(),this._setState(0),this._onDidHide.fire(this);const t=this._persistedSize.restore(),i=Math.ceil(4.3*this.getLayoutInfo().itemHeight);t&&t.heightl&&(a=l);const h=this._completionModel?this._completionModel.stats.pLabelLen*s.typicalHalfwidthCharacterWidth:a,c=s.statusBarHeight+this._list.contentHeight+s.borderHeight,d=s.itemHeight+s.statusBarHeight,u=cu(this.editor.getDomNode()),g=this.editor.getScrolledVisiblePosition(this.editor.getPosition()),p=Math.min(o.height-(u.top+g.top+g.height)-s.verticalPadding,c),m=Math.min(u.top+g.top-s.verticalPadding,c);let f=Math.min(Math.max(m,p)+s.borderHeight,c);r===(null===(t=this._cappedHeight)||void 0===t?void 0:t.capped)&&(r=this._cappedHeight.wanted),rf&&(r=f),r>p?(this._contentWidget.setPreference(1),this.element.enableSashes(!0,!0,!1,!1),f=m):(this._contentWidget.setPreference(2),this.element.enableSashes(!1,!0,!0,!1),f=p),this.element.preferredSize=new hu(h,s.defaultSize.height),this.element.maxSize=new hu(l,f),this.element.minSize=new hu(220,d),this._cappedHeight=r===c?{wanted:null!==(n=null===(i=this._cappedHeight)||void 0===i?void 0:i.wanted)&&void 0!==n?n:e.height,capped:r}:void 0}this._resize(a,r)}_resize(e,t){const{width:i,height:n}=this.element.maxSize;e=Math.min(i,e),t=Math.min(n,t);const{statusBarHeight:o}=this.getLayoutInfo();this._list.layout(t-o,e),this._listElement.style.height=`${t-o}px`,this.element.layout(t,e),this._contentWidget.layout(),this._positionDetails()}_positionDetails(){this._isDetailsVisible()&&this._details.placeAtAnchor(this.element.domNode)}getLayoutInfo(){const e=this.editor.getOption(38),t=Na(this.editor.getOption(108)||e.lineHeight,8,1e3),i=this.editor.getOption(106).showStatusBar&&2!==this._state&&1!==this._state?t:0,n=this._details.widget.borderWidth,o=2*n;return{itemHeight:t,statusBarHeight:i,borderWidth:n,borderHeight:o,typicalHalfwidthCharacterWidth:e.typicalHalfwidthCharacterWidth,verticalPadding:22,horizontalPadding:14,defaultSize:new hu(430,i+12*t+o)}}_isDetailsVisible(){return this._storageService.getBoolean("expandSuggestionDocs",0,!1)}_setDetailsVisible(e){this._storageService.store("expandSuggestionDocs",e,0,0)}};pP.LOADING_MESSAGE=t(0,"Loading..."),pP.NO_SUGGESTIONS_MESSAGE=t(0,"No suggestions."),pP=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([aP(1,kL),aP(2,en),aP(3,pn),aP(4,Et)],pP);class mP{constructor(e,t){this._widget=e,this._editor=t,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._preferenceLocked=!1,this._added=!1,this._hidden=!1}dispose(){this._added&&(this._added=!1,this._editor.removeContentWidget(this))}getId(){return"editor.widget.suggestWidget"}getDomNode(){return this._widget.element.domNode}show(){this._hidden=!1,this._added||(this._added=!0,this._editor.addContentWidget(this))}hide(){this._hidden||(this._hidden=!0,this.layout())}layout(){this._editor.layoutContentWidget(this)}getPosition(){return!this._hidden&&this._position&&this._preference?{position:this._position,preference:[this._preference]}:null}beforeRender(){const{height:e,width:t}=this._widget.element.size,{borderWidth:i,horizontalPadding:n}=this._widget.getLayoutInfo();return new hu(t+2*i+n,e+2*i)}afterRender(e){this._widget._afterRender(e)}setPreference(e){this._preferenceLocked||(this._preference=e)}lockPreference(){this._preferenceLocked=!0}unlockPreference(){this._preferenceLocked=!1}setPosition(e){this._position=e}}Cn((e,t)=>{const i=e.getColor(uP);i&&t.addRule(`.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-highlighted-label .highlight { color: ${i}; }`);const n=e.getColor(cP);n&&t.addRule(`.monaco-editor .suggest-widget, .monaco-editor .suggest-details { color: ${n}; }`);const o=e.getColor(am);o&&t.addRule(`.monaco-editor .suggest-details a { color: ${o}; }`);const s=e.getColor(lm);s&&t.addRule(`.monaco-editor .suggest-details code { background-color: ${s}; }`)});let fP=class e{constructor(t,i){this._editor=t,this._enabled=!1,this._ckAtEnd=e.AtEnd.bindTo(i),this._configListener=this._editor.onDidChangeConfiguration(e=>e.hasChanged(111)&&this._update()),this._update()}dispose(){var e;this._configListener.dispose(),null===(e=this._selectionListener)||void 0===e||e.dispose(),this._ckAtEnd.reset()}_update(){const e="on"===this._editor.getOption(111);if(this._enabled!==e)if(this._enabled=e,this._enabled){const e=()=>{if(!this._editor.hasModel())return void this._ckAtEnd.set(!1);const e=this._editor.getModel(),t=this._editor.getSelection(),i=e.getWordAtPosition(t.getStartPosition());this._ckAtEnd.set(!!i&&i.endColumn===t.getStartPosition().column)};this._selectionListener=this._editor.onDidChangeCursorSelection(e),e()}else this._selectionListener&&(this._ckAtEnd.reset(),this._selectionListener.dispose(),this._selectionListener=void 0)}};var _P;fP.AtEnd=new Ji("atEndOfWord",!1),fP=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,1)}}(0,en)],fP),function(e){e[e.NOT_COMMIT=0]="NOT_COMMIT",e[e.COMMIT_WITH_INSERT=1]="COMMIT_WITH_INSERT",e[e.COMMIT_WITHOUT_INSERT=2]="COMMIT_WITHOUT_INSERT"}(_P||(_P={}));class bP{constructor(e,t,i){this._disposables=new v,this._disposables.add(t.onDidShow(()=>this._onItem(t.getFocusedItem()))),this._disposables.add(t.onDidFocus(this._onItem,this)),this._disposables.add(t.onDidHide(this.reset,this)),this._disposables.add(e.onWillType(n=>{if(this._active&&!t.isFrozen()&&t.isUserAware()){const t=n.text.charCodeAt(n.text.length-1),o=this._active.acceptCharacters.get(t);o!==_P.NOT_COMMIT&&e.getOption(0)&&(i(this._active.item,t),o===_P.COMMIT_WITHOUT_INSERT&&(n.cancelType=!0))}}))}_onItem(e){if(!e||!e.item.completion.commitCharacters||0===e.item.completion.commitCharacters.length)return void this.reset();if(this._active&&this._active.item.item===e.item)return;const t=new xr(_P.NOT_COMMIT);for(const i of e.item.completion.commitCharacters)if("string"==typeof i)i.length>0&&t.set(i.charCodeAt(0),_P.COMMIT_WITH_INSERT);else{const{char:e,commitWithoutInsert:n}=i;e.length>0&&t.set(e.charCodeAt(0),n?_P.COMMIT_WITHOUT_INSERT:_P.COMMIT_WITH_INSERT)}this._active={acceptCharacters:t,item:e}}reset(){this._active=void 0}dispose(){this._disposables.dispose()}}class vP{constructor(e,t){this._disposables=new v,this._lastOvertyped=[],this._empty=!0,this._disposables.add(e.onWillType(()=>{if(!this._empty)return;if(!e.hasModel())return;const t=e.getSelections(),i=t.length;let n=!1;for(let e=0;evP._maxSelectionLength)return;this._lastOvertyped[e]={value:o.getValueInRange(i),multiline:i.startLineNumber!==i.endLineNumber}}this._empty=!1})),this._disposables.add(t.onDidCancel(e=>{this._empty||e.retrigger||(this._empty=!0)}))}getLastOvertypedInfo(e){if(!this._empty&&e>=0&&er.set(e.getOption(106).insertMode)),this.widget=this._toDispose.add(new qa(()=>{const e=this._instantiationService.createInstance(pP,this.editor);this._toDispose.add(e),this._toDispose.add(e.onDidSelect(e=>this._insertSuggestion(e,0),this));const t=new bP(this.editor,e,(e,t)=>this._insertSuggestion(e,2,t));this._toDispose.add(t),this._toDispose.add(this.model.onDidSuggest(e=>{0===e.completionModel.items.length&&t.reset()}));const i=fO.MakesTextEdit.bindTo(this._contextKeyService),n=fO.HasInsertAndReplaceRange.bindTo(this._contextKeyService),o=fO.CanResolve.bindTo(this._contextKeyService);return this._toDispose.add(b(()=>{i.reset(),n.reset(),o.reset()})),this._toDispose.add(e.onDidFocus(({item:e})=>{const t=this.editor.getPosition(),s=e.editStart.column,r=t.column;let a=!0;"smart"!==this.editor.getOption(1)||2!==this.model.state||e.completion.command||e.completion.additionalTextEdits||4&e.completion.insertTextRules||r-s!==e.completion.insertText.length||(a=this.editor.getModel().getValueInRange({startLineNumber:t.lineNumber,startColumn:s,endLineNumber:t.lineNumber,endColumn:r})!==e.completion.insertText),i.set(a),n.set(!Tt.equals(e.editInsertEnd,e.editReplaceEnd)),o.set(Boolean(e.provider.resolveCompletionItem)||Boolean(e.completion.documentation)||e.completion.detail!==e.completion.label)})),this._toDispose.add(e.onDetailsKeyDown(e=>{e.toKeybinding().equals(new Fn(!0,!1,!1,!1,33))||H&&e.toKeybinding().equals(new Fn(!1,!1,!1,!0,33))?e.stopPropagation():e.toKeybinding().isModifierKey()||this.editor.focus()})),e})),this._overtypingCapturer=this._toDispose.add(new qa(()=>this._toDispose.add(new vP(this.editor,this.model)))),this._alternatives=this._toDispose.add(new qa(()=>this._toDispose.add(new tR(this.editor,this._contextKeyService)))),this._toDispose.add(o.createInstance(fP,e)),this._toDispose.add(this.model.onDidTrigger(e=>{this.widget.value.showTriggered(e.auto,e.shy?250:50),this._lineSuffix.value=new wP(this.editor.getModel(),e.position)})),this._toDispose.add(this.model.onDidSuggest(e=>{if(!e.shy){let t=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),e.completionModel.items);this.widget.value.showSuggestions(e.completionModel,t,e.isFrozen,e.auto)}})),this._toDispose.add(this.model.onDidCancel(e=>{e.retrigger||this.widget.value.hideWidget()})),this._toDispose.add(this.editor.onDidBlurEditorWidget(()=>{this.model.cancel(),this.model.clear()}));let a=fO.AcceptSuggestionsOnEnter.bindTo(n),l=()=>{const e=this.editor.getOption(1);a.set("on"===e||"smart"===e)};this._toDispose.add(this.editor.onDidChangeConfiguration(()=>l())),l()}static get(t){return t.getContribution(e.ID)}dispose(){this._alternatives.dispose(),this._toDispose.dispose(),this.widget.dispose(),this.model.dispose(),this._lineSuffix.dispose()}_insertSuggestion(e,t,i="\n".charCodeAt(0)){if(!e||!e.item)return this._alternatives.value.reset(),this.model.cancel(),void this.model.clear();if(!this.editor.hasModel())return;const o=this.editor.getModel(),s=o.getAlternativeVersionId(),{item:r}=e,a=[],l=new Oa;1&t||this.editor.pushUndoStop();const h=this.getOverwriteInfo(r,Boolean(8&t));if(this._memoryService.memorize(o,this.editor.getPosition(),r),Array.isArray(r.completion.additionalTextEdits)){const e=iy.capture(this.editor);this.editor.executeEdits("suggestController.additionalTextEdits.sync",r.completion.additionalTextEdits.map(e=>jL.replace(ro.lift(e.range),e.text))),e.restoreRelativeVerticalPositionOfCursor(this.editor)}else if(!r.isResolved){const e=new te(!0);let i;const n=o.onDidChangeContent(e=>{if(e.isFlush)return l.cancel(),void n.dispose();for(let t of e.changes){const e=ro.getEndPosition(t.range);i&&!Tt.isBefore(e,i)||(i=e)}});let s=t;t|=2;let h=!1,c=this.editor.onWillType(()=>{c.dispose(),h=!0,2&s||this.editor.pushUndoStop()});a.push(r.resolve(l.token).then(()=>{if(!r.completion.additionalTextEdits||l.token.isCancellationRequested)return!1;if(i&&r.completion.additionalTextEdits.some(e=>Tt.isBefore(i,ro.getStartPosition(e.range))))return!1;h&&this.editor.pushUndoStop();const e=iy.capture(this.editor);return this.editor.executeEdits("suggestController.additionalTextEdits.async",r.completion.additionalTextEdits.map(e=>jL.replace(ro.lift(e.range),e.text))),e.restoreRelativeVerticalPositionOfCursor(this.editor),!h&&2&s||this.editor.pushUndoStop(),!0}).then(t=>{this._logService.trace("[suggest] async resolving of edits DONE (ms, applied?)",e.elapsed(),t),n.dispose(),c.dispose()}))}let{insertText:c}=r.completion;4&r.completion.insertTextRules||(c=pO.escape(c)),r.completion.insertHandler?r.completion.insertHandler({commitChar:String.fromCharCode(i),position:this.editor.getPosition()}):GO.get(this.editor).insert(c,{overwriteBefore:h.overwriteBefore,overwriteAfter:h.overwriteAfter,undoStopBefore:!1,undoStopAfter:!1,adjustWhitespace:!(1&r.completion.insertTextRules),clipboardText:e.model.clipboardText,overtypingCapturer:this._overtypingCapturer.value}),2&t||this.editor.pushUndoStop(),r.completion.command?r.completion.command.id===SP.id?this.model.trigger({auto:!0,shy:!1},!0):(a.push(this._commandService.executeCommand(r.completion.command.id,...r.completion.command.arguments?[...r.completion.command.arguments]:[]).catch(n)),this.model.cancel()):this.model.cancel(),4&t&&this._alternatives.value.set(e,e=>{for(l.cancel();o.canUndo();){s!==o.getAlternativeVersionId()&&o.undo(),this._insertSuggestion(e,3|(8&t?8:0),i);break}}),this._alertCompletionItem(r),Promise.all(a).finally(()=>{this.model.clear(),l.dispose()})}getOverwriteInfo(e,t){Ne(this.editor.hasModel());let i="replace"===this.editor.getOption(106).insertMode;t&&(i=!i);const n=(i?e.editReplaceEnd.column:e.editInsertEnd.column)-e.position.column;return{overwriteBefore:e.position.column-e.editStart.column+(this.editor.getPosition().column-e.position.column),overwriteAfter:n+(this._lineSuffix.value?this._lineSuffix.value.delta(this.editor.getPosition()):0)}}_alertCompletionItem({completion:e}){const i="string"==typeof e.label?e.label:e.label.name;na(e.additionalTextEdits)&&MS(t(0,"Accepting '{0}' made {1} additional edits",i,e.additionalTextEdits.length))}triggerSuggest(e,t,i){this.editor.hasModel()&&(this.model.trigger({auto:i||!1,shy:!1,updateSuggestions:t},!1,e),this.editor.revealLine(this.editor.getPosition().lineNumber,0),this.editor.focus())}triggerSuggestAndAcceptBest(e){if(!this.editor.hasModel())return;const t=this.editor.getPosition(),i=()=>{t.equals(this.editor.getPosition())&&this._commandService.executeCommand(e.fallback)},n=e=>{if(4&e.completion.insertTextRules||e.completion.additionalTextEdits)return!0;const t=this.editor.getPosition(),i=e.editStart.column,n=t.column;return n-i!==e.completion.insertText.length||this.editor.getModel().getValueInRange({startLineNumber:t.lineNumber,startColumn:i,endLineNumber:t.lineNumber,endColumn:n})!==e.completion.insertText};ie.once(this.model.onDidTrigger)(e=>{let t=[];ie.any(this.model.onDidTrigger,this.model.onDidCancel)(()=>{f(t),i()},void 0,t),this.model.onDidSuggest(({completionModel:e})=>{if(f(t),0===e.items.length)return void i();const o=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),e.items),s=e.items[o];n(s)?(this.editor.pushUndoStop(),this._insertSuggestion({index:o,item:s,model:e},7)):i()},void 0,t)}),this.model.trigger({auto:!1,shy:!0}),this.editor.revealLine(t.lineNumber,0),this.editor.focus()}acceptSelectedSuggestion(e,t,i=0){const n=this.widget.value.getFocusedItem();let o=0;e&&(o|=4),t&&(o|=8),this._insertSuggestion(n,o,i)}acceptNextSuggestion(){this._alternatives.value.next()}acceptPrevSuggestion(){this._alternatives.value.prev()}cancelSuggestWidget(){this.model.cancel(),this.model.clear(),this.widget.value.hideWidget()}selectNextSuggestion(){this.widget.value.selectNext()}selectNextPageSuggestion(){this.widget.value.selectNextPage()}selectLastSuggestion(){this.widget.value.selectLast()}selectPrevSuggestion(){this.widget.value.selectPrevious()}selectPrevPageSuggestion(){this.widget.value.selectPreviousPage()}selectFirstSuggestion(){this.widget.value.selectFirst()}toggleSuggestionDetails(){this.widget.value.toggleDetails()}toggleExplainMode(){this.widget.value.toggleExplainMode()}toggleSuggestionFocus(){this.widget.value.toggleDetailsFocus()}resetWidgetSize(){this.widget.value.resetPersistedSize()}};yP.ID="editor.contrib.suggestController",yP=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([CP(1,eR),CP(2,on),CP(3,en),CP(4,Et),CP(5,PM)],yP);class SP extends Yn{constructor(){super({id:SP.id,label:t(0,"Trigger Suggest"),alias:"Trigger Suggest",precondition:Ri.and(cd.writable,cd.hasCompletionItemProvider),kbOpts:{kbExpr:cd.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[521,2087]},weight:100}})}run(e,t,i){const n=yP.get(t);n&&n.triggerSuggest(i.onlyFrom,i.updateSuggestions,i.auto)}}SP.id="editor.action.triggerSuggest",Jn(yP.ID,yP),Qn(SP);const LP=Gn.bindToContribution(yP.get);Xn(new LP({id:"acceptSelectedSuggestion",precondition:fO.Visible,handler(e,t){let i=0;"object"==typeof t&&"string"==typeof t.commitChar&&(i=t.commitChar.charCodeAt(0)),e.acceptSelectedSuggestion(!0,!1,i)}})),Hn.registerKeybindingRule({id:"acceptSelectedSuggestion",when:Ri.and(fO.Visible,cd.textInputFocus),primary:2,weight:190,args:{commitChar:"\t"}}),Hn.registerKeybindingRule({id:"acceptSelectedSuggestion",when:Ri.and(fO.Visible,cd.textInputFocus,fO.AcceptSuggestionsOnEnter,fO.MakesTextEdit),primary:3,weight:190,args:{commitChar:"\n"}}),En.appendMenuItem(_O,{command:{id:"acceptSelectedSuggestion",title:t(0,"Insert")},group:"left",order:1,when:fO.HasInsertAndReplaceRange.toNegated()}),En.appendMenuItem(_O,{command:{id:"acceptSelectedSuggestion",title:t(0,"Insert")},group:"left",order:1,when:Ri.and(fO.HasInsertAndReplaceRange,fO.InsertMode.isEqualTo("insert"))}),En.appendMenuItem(_O,{command:{id:"acceptSelectedSuggestion",title:t(0,"Replace")},group:"left",order:1,when:Ri.and(fO.HasInsertAndReplaceRange,fO.InsertMode.isEqualTo("replace"))}),Xn(new LP({id:"acceptAlternativeSelectedSuggestion",precondition:Ri.and(fO.Visible,cd.textInputFocus),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:1027,secondary:[1026]},handler(e){e.acceptSelectedSuggestion(!1,!0)},menuOpts:[{menuId:_O,group:"left",order:2,when:Ri.and(fO.HasInsertAndReplaceRange,fO.InsertMode.isEqualTo("insert")),title:t(0,"Replace")},{menuId:_O,group:"left",order:2,when:Ri.and(fO.HasInsertAndReplaceRange,fO.InsertMode.isEqualTo("replace")),title:t(0,"Insert")}]})),sn.registerCommandAlias("acceptSelectedSuggestionOnEnter","acceptSelectedSuggestion"),Xn(new LP({id:"hideSuggestWidget",precondition:fO.Visible,handler:e=>e.cancelSuggestWidget(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:9,secondary:[1033]}})),Xn(new LP({id:"selectNextSuggestion",precondition:Ri.and(fO.Visible,fO.MultipleSuggestions),handler:e=>e.selectNextSuggestion(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:18,secondary:[2066],mac:{primary:18,secondary:[2066,300]}}})),Xn(new LP({id:"selectNextPageSuggestion",precondition:Ri.and(fO.Visible,fO.MultipleSuggestions),handler:e=>e.selectNextPageSuggestion(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:12,secondary:[2060]}})),Xn(new LP({id:"selectLastSuggestion",precondition:Ri.and(fO.Visible,fO.MultipleSuggestions),handler:e=>e.selectLastSuggestion()})),Xn(new LP({id:"selectPrevSuggestion",precondition:Ri.and(fO.Visible,fO.MultipleSuggestions),handler:e=>e.selectPrevSuggestion(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:16,secondary:[2064],mac:{primary:16,secondary:[2064,302]}}})),Xn(new LP({id:"selectPrevPageSuggestion",precondition:Ri.and(fO.Visible,fO.MultipleSuggestions),handler:e=>e.selectPrevPageSuggestion(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:11,secondary:[2059]}})),Xn(new LP({id:"selectFirstSuggestion",precondition:Ri.and(fO.Visible,fO.MultipleSuggestions),handler:e=>e.selectFirstSuggestion()})),Xn(new LP({id:"toggleSuggestionDetails",precondition:fO.Visible,handler:e=>e.toggleSuggestionDetails(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:2058,mac:{primary:266}},menuOpts:[{menuId:_O,group:"right",order:1,when:Ri.and(fO.DetailsVisible,fO.CanResolve),title:t(0,"show less")},{menuId:_O,group:"right",order:1,when:Ri.and(fO.DetailsVisible.toNegated(),fO.CanResolve),title:t(0,"show more")}]})),Xn(new LP({id:"toggleExplainMode",precondition:fO.Visible,handler:e=>e.toggleExplainMode(),kbOpts:{weight:100,primary:2133}})),Xn(new LP({id:"toggleSuggestionFocus",precondition:fO.Visible,handler:e=>e.toggleSuggestionFocus(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:2570,mac:{primary:778}}})),Xn(new LP({id:"insertBestCompletion",precondition:Ri.and(cd.textInputFocus,Ri.equals("config.editor.tabCompletion","on"),fP.AtEnd,fO.Visible.toNegated(),tR.OtherSuggestions.toNegated(),GO.InSnippetMode.toNegated()),handler:(e,t)=>{e.triggerSuggestAndAcceptBest(Le(t)?Object.assign({fallback:"tab"},t):{fallback:"tab"})},kbOpts:{weight:190,primary:2}})),Xn(new LP({id:"insertNextSuggestion",precondition:Ri.and(cd.textInputFocus,Ri.equals("config.editor.tabCompletion","on"),tR.OtherSuggestions,fO.Visible.toNegated(),GO.InSnippetMode.toNegated()),handler:e=>e.acceptNextSuggestion(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:2}})),Xn(new LP({id:"insertPrevSuggestion",precondition:Ri.and(cd.textInputFocus,Ri.equals("config.editor.tabCompletion","on"),tR.OtherSuggestions,fO.Visible.toNegated(),GO.InSnippetMode.toNegated()),handler:e=>e.acceptPrevSuggestion(),kbOpts:{weight:190,kbExpr:cd.textInputFocus,primary:1026}})),Qn(class extends Yn{constructor(){super({id:"editor.action.resetSuggestSize",label:t(0,"Reset Suggest Widget Size"),alias:"Reset Suggest Widget Size",precondition:void 0})}run(e,t){yP.get(t).resetWidgetSize()}});class DP extends Yn{constructor(){super({id:DP.ID,label:t(0,"Toggle Tab Key Moves Focus"),alias:"Toggle Tab Key Moves Focus",precondition:void 0,kbOpts:{kbExpr:null,primary:2091,mac:{primary:1323},weight:100}})}run(e,i){const n=!fg.getTabFocusMode();fg.setTabFocusMode(n),MS(t(0,n?"Pressing Tab will now move focus to the next focusable element":"Pressing Tab will now insert the tab character"))}}DP.ID="editor.action.toggleTabFocusMode",Qn(DP);const EP=im("editor.wordHighlightBackground",{dark:"#575757B8",light:"#57575740",hc:null},t(0,"Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations."),!0),xP=im("editor.wordHighlightStrongBackground",{dark:"#004972B8",light:"#0e639c40",hc:null},t(0,"Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations."),!0),kP=im("editor.wordHighlightBorder",{light:null,dark:null,hc:rm},t(0,"Border color of a symbol during read-access, like reading a variable.")),NP=im("editor.wordHighlightStrongBorder",{light:null,dark:null,hc:rm},t(0,"Border color of a symbol during write-access, like writing to a variable.")),IP=im("editorOverviewRuler.wordHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hc:"#A0A0A0CC"},t(0,"Overview ruler marker color for symbol highlights. The color must not be opaque so as not to hide underlying decorations."),!0),TP=im("editorOverviewRuler.wordHighlightStrongForeground",{dark:"#C0A0C0CC",light:"#C0A0C0CC",hc:"#C0A0C0CC"},t(0,"Overview ruler marker color for write-access symbol highlights. The color must not be opaque so as not to hide underlying decorations."),!0),AP=new Ji("hasWordHighlights",!1);function MP(e,t,i){return function n(e,t=(e=>!!e),i=null){let n=0;const o=e.length,s=()=>{if(n>=o)return Promise.resolve(i);const r=e[n++];return Promise.resolve(r()).then(e=>t(e)?Promise.resolve(e):s())};return s()}(Fl.ordered(e).map(n=>()=>Promise.resolve(n.provideDocumentHighlights(e,t,i)).then(void 0,o)),na)}class OP{constructor(e,t,i){this._wordRange=this._getCurrentWordRange(e,t),this.result=Pa(n=>this._compute(e,t,i,n))}_getCurrentWordRange(e,t){const i=e.getWordAtPosition(t.getPosition());return i?new ro(t.startLineNumber,i.startColumn,t.startLineNumber,i.endColumn):null}isValid(e,t,i){const n=t.startLineNumber,o=t.startColumn,s=t.endColumn,r=this._getCurrentWordRange(e,t);let a=Boolean(this._wordRange&&this._wordRange.equalsRange(r));for(let t=0,r=i.length;!a&&t=s&&(a=!0)}return a}cancel(){this.result.cancel()}}class RP extends OP{_compute(e,t,i,n){return MP(e,t.getPosition(),n).then(e=>e||[])}}class PP extends OP{constructor(e,t,i){super(e,t,i),this._selectionIsEmpty=t.isEmpty()}_compute(e,t,i,n){return za(250,n).then(()=>{if(!t.isEmpty())return[];const n=e.getWordAtPosition(t.getPosition());return!n||n.word.length>1e3?[]:e.findMatches(n.word,!0,!1,!0,i,!1).map(e=>({range:e.range,kind:xl.Text}))})}isValid(e,t,i){const n=t.isEmpty();return this._selectionIsEmpty===n&&super.isValid(e,t,i)}}Zn("_executeDocumentHighlights",(e,t)=>MP(e,t,Aa.None));class FP{constructor(e,t){this.toUnhook=new v,this.workerRequestTokenId=0,this.workerRequestCompleted=!1,this.workerRequestValue=[],this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1,this.editor=e,this._hasWordHighlights=AP.bindTo(t),this._ignorePositionChangeEvent=!1,this.occurrencesHighlight=this.editor.getOption(67),this.model=this.editor.getModel(),this.toUnhook.add(e.onDidChangeCursorPosition(e=>{this._ignorePositionChangeEvent||this.occurrencesHighlight&&this._onPositionChanged(e)})),this.toUnhook.add(e.onDidChangeModelContent(e=>{this._stopAll()})),this.toUnhook.add(e.onDidChangeConfiguration(e=>{let t=this.editor.getOption(67);this.occurrencesHighlight!==t&&(this.occurrencesHighlight=t,this._stopAll())})),this._decorationIds=[],this.workerRequestTokenId=0,this.workerRequest=null,this.workerRequestCompleted=!1,this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1}hasDecorations(){return this._decorationIds.length>0}restore(){this.occurrencesHighlight&&this._run()}_getSortedHighlights(){return ta(this._decorationIds.map(e=>this.model.getDecorationRange(e)).sort(ro.compareRangesUsingStarts))}moveNext(){let e=this._getSortedHighlights(),t=(e.findIndex(e=>e.containsPosition(this.editor.getPosition()))+1)%e.length,i=e[t];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(i.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(i);const n=this._getWord();n&&MS(`${this.editor.getModel().getLineContent(i.startLineNumber)}, ${t+1} of ${e.length} for '${n.word}'`)}finally{this._ignorePositionChangeEvent=!1}}moveBack(){let e=this._getSortedHighlights(),t=(e.findIndex(e=>e.containsPosition(this.editor.getPosition()))-1+e.length)%e.length,i=e[t];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(i.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(i);const n=this._getWord();n&&MS(`${this.editor.getModel().getLineContent(i.startLineNumber)}, ${t+1} of ${e.length} for '${n.word}'`)}finally{this._ignorePositionChangeEvent=!1}}_removeDecorations(){this._decorationIds.length>0&&(this._decorationIds=this.editor.deltaDecorations(this._decorationIds,[]),this._hasWordHighlights.set(!1))}_stopAll(){this._removeDecorations(),-1!==this.renderDecorationsTimer&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1),null!==this.workerRequest&&(this.workerRequest.cancel(),this.workerRequest=null),this.workerRequestCompleted||(this.workerRequestTokenId++,this.workerRequestCompleted=!0)}_onPositionChanged(e){this.occurrencesHighlight&&3===e.reason?this._run():this._stopAll()}_getWord(){let e=this.editor.getSelection();return this.model.getWordAtPosition({lineNumber:e.startLineNumber,column:e.startColumn})}_run(){let e=this.editor.getSelection();if(e.startLineNumber!==e.endLineNumber)return void this._stopAll();let t=e.startColumn,i=e.endColumn;const o=this._getWord();if(!o||o.startColumn>t||o.endColumn{e===this.workerRequestTokenId&&(this.workerRequestCompleted=!0,this.workerRequestValue=t||[],this._beginRenderDecorations())},n)}}_beginRenderDecorations(){let e=(new Date).getTime(),t=this.lastCursorPositionChangeTime+250;e>=t?(this.renderDecorationsTimer=-1,this.renderDecorations()):this.renderDecorationsTimer=setTimeout(()=>{this.renderDecorations()},t-e)}renderDecorations(){this.renderDecorationsTimer=-1;let e=[];for(const t of this.workerRequestValue)t.range&&e.push({range:t.range,options:FP._getDecorationOptions(t.kind)});this._decorationIds=this.editor.deltaDecorations(this._decorationIds,e),this._hasWordHighlights.set(this.hasDecorations())}static _getDecorationOptions(e){return e===xl.Write?this._WRITE_OPTIONS:e===xl.Text?this._TEXT_OPTIONS:this._REGULAR_OPTIONS}dispose(){this._stopAll(),this.toUnhook.dispose()}}FP._WRITE_OPTIONS=xc.register({stickiness:1,className:"wordHighlightStrong",overviewRuler:{color:_n(TP),position:$o.Center}}),FP._TEXT_OPTIONS=xc.register({stickiness:1,className:"selectionHighlight",overviewRuler:{color:_n(e_),position:$o.Center}}),FP._REGULAR_OPTIONS=xc.register({stickiness:1,className:"wordHighlight",overviewRuler:{color:_n(IP),position:$o.Center}});let BP=class e extends C{constructor(e,t){super(),this.wordHighlighter=null;const i=()=>{e.hasModel()&&(this.wordHighlighter=new FP(e,t))};this._register(e.onDidChangeModel(e=>{this.wordHighlighter&&(this.wordHighlighter.dispose(),this.wordHighlighter=null),i()})),i()}static get(t){return t.getContribution(e.ID)}saveViewState(){return!(!this.wordHighlighter||!this.wordHighlighter.hasDecorations())}moveNext(){this.wordHighlighter&&this.wordHighlighter.moveNext()}moveBack(){this.wordHighlighter&&this.wordHighlighter.moveBack()}restoreViewState(e){this.wordHighlighter&&e&&this.wordHighlighter.restore()}dispose(){this.wordHighlighter&&(this.wordHighlighter.dispose(),this.wordHighlighter=null),super.dispose()}};BP.ID="editor.contrib.wordHighlighter";class WP extends Yn{constructor(e,t){super(t),this._isNext=e}run(e,t){const i=BP.get(t);i&&(this._isNext?i.moveNext():i.moveBack())}}Jn((BP=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,1)}}(0,en)],BP)).ID,BP),Qn(class extends WP{constructor(){super(!0,{id:"editor.action.wordHighlight.next",label:t(0,"Go to Next Symbol Highlight"),alias:"Go to Next Symbol Highlight",precondition:AP,kbOpts:{kbExpr:cd.editorTextFocus,primary:65,weight:100}})}}),Qn(class extends WP{constructor(){super(!1,{id:"editor.action.wordHighlight.prev",label:t(0,"Go to Previous Symbol Highlight"),alias:"Go to Previous Symbol Highlight",precondition:AP,kbOpts:{kbExpr:cd.editorTextFocus,primary:1089,weight:100}})}}),Qn(class extends Yn{constructor(){super({id:"editor.action.wordHighlight.trigger",label:t(0,"Trigger Symbol Highlight"),alias:"Trigger Symbol Highlight",precondition:AP.toNegated(),kbOpts:{kbExpr:cd.editorTextFocus,primary:0,weight:100}})}run(e,t,i){const n=BP.get(t);n&&n.restoreViewState(!0)}}),Cn((e,t)=>{const i=e.getColor(rf);i&&(t.addRule(`.monaco-editor .focused .selectionHighlight { background-color: ${i}; }`),t.addRule(`.monaco-editor .selectionHighlight { background-color: ${i.transparent(.5)}; }`));const n=e.getColor(EP);n&&t.addRule(`.monaco-editor .wordHighlight { background-color: ${n}; }`);const o=e.getColor(xP);o&&t.addRule(`.monaco-editor .wordHighlightStrong { background-color: ${o}; }`);const s=e.getColor(af);s&&t.addRule(`.monaco-editor .selectionHighlight { border: 1px ${"hc"===e.type?"dotted":"solid"} ${s}; box-sizing: border-box; }`);const r=e.getColor(kP);r&&t.addRule(`.monaco-editor .wordHighlight { border: 1px ${"hc"===e.type?"dashed":"solid"} ${r}; box-sizing: border-box; }`);const a=e.getColor(NP);a&&t.addRule(`.monaco-editor .wordHighlightStrong { border: 1px ${"hc"===e.type?"dashed":"solid"} ${a}; box-sizing: border-box; }`)});class VP extends Gn{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode,this._wordNavigationType=e.wordNavigationType}runEditorCommand(e,t,i){if(!t.hasModel())return;const n=Ir(t.getOption(115)),o=t.getModel(),s=t.getSelections().map(e=>{const t=new Tt(e.positionLineNumber,e.positionColumn),i=this._move(n,o,t,this._wordNavigationType);return this._moveTo(e,i,this._inSelectionMode)});if(o.pushStackElement(),t._getViewModel().setCursorStates("moveWordCommand",3,s.map(e=>Vc.fromModelSelection(e))),1===s.length){const e=new Tt(s[0].positionLineNumber,s[0].positionColumn);t.revealPosition(e,0)}}_moveTo(e,t,i){return i?new ao(e.selectionStartLineNumber,e.selectionStartColumn,t.lineNumber,t.column):new ao(t.lineNumber,t.column,t.lineNumber,t.column)}}class zP extends VP{_move(e,t,i,n){return ed.moveWordLeft(e,t,i,n)}}class HP extends VP{_move(e,t,i,n){return ed.moveWordRight(e,t,i,n)}}class UP extends Gn{constructor(e){super(e),this._whitespaceHeuristics=e.whitespaceHeuristics,this._wordNavigationType=e.wordNavigationType}runEditorCommand(e,t,i){if(!t.hasModel())return;const n=Ir(t.getOption(115)),o=t.getModel(),s=t.getSelections(),r=t.getOption(5),a=t.getOption(7),l=ac.getAutoClosingPairs(o.getLanguageIdentifier().id),h=s.map(e=>{const t=this._delete({wordSeparators:n,model:o,selection:e,whitespaceHeuristics:this._whitespaceHeuristics,autoClosingBrackets:r,autoClosingQuotes:a,autoClosingPairs:l},this._wordNavigationType);return new $c(t,"")});t.pushUndoStop(),t.executeCommands(this.id,h),t.pushUndoStop()}}class KP extends UP{_delete(e,t){return ed.deleteWordLeft(e,t)||new ro(1,1,1,1)}}class $P extends UP{_delete(e,t){let i=ed.deleteWordRight(e,t);if(i)return i;const n=e.model.getLineCount(),o=e.model.getLineMaxColumn(n);return new ro(n,o,n,o)}}Xn(new class extends zP{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartLeft",precondition:void 0})}}),Xn(new class extends zP{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndLeft",precondition:void 0})}}),Xn(new class extends zP{constructor(){var e;super({inSelectionMode:!1,wordNavigationType:1,id:"cursorWordLeft",precondition:void 0,kbOpts:{kbExpr:Ri.and(cd.textInputFocus,null===(e=Ri.and(uw,sk))||void 0===e?void 0:e.negate()),primary:2063,mac:{primary:527},weight:100}})}}),Xn(new class extends zP{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartLeftSelect",precondition:void 0})}}),Xn(new class extends zP{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndLeftSelect",precondition:void 0})}}),Xn(new class extends zP{constructor(){var e;super({inSelectionMode:!0,wordNavigationType:1,id:"cursorWordLeftSelect",precondition:void 0,kbOpts:{kbExpr:Ri.and(cd.textInputFocus,null===(e=Ri.and(uw,sk))||void 0===e?void 0:e.negate()),primary:3087,mac:{primary:1551},weight:100}})}}),Xn(new class extends HP{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartRight",precondition:void 0})}}),Xn(new class extends HP{constructor(){var e;super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndRight",precondition:void 0,kbOpts:{kbExpr:Ri.and(cd.textInputFocus,null===(e=Ri.and(uw,sk))||void 0===e?void 0:e.negate()),primary:2065,mac:{primary:529},weight:100}})}}),Xn(new class extends HP{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordRight",precondition:void 0})}}),Xn(new class extends HP{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartRightSelect",precondition:void 0})}}),Xn(new class extends HP{constructor(){var e;super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndRightSelect",precondition:void 0,kbOpts:{kbExpr:Ri.and(cd.textInputFocus,null===(e=Ri.and(uw,sk))||void 0===e?void 0:e.negate()),primary:3089,mac:{primary:1553},weight:100}})}}),Xn(new class extends HP{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordRightSelect",precondition:void 0})}}),Xn(new class extends zP{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityLeft",precondition:void 0})}_move(e,t,i,n){return super._move(Ir(Wo.wordSeparators.defaultValue),t,i,n)}}),Xn(new class extends zP{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityLeftSelect",precondition:void 0})}_move(e,t,i,n){return super._move(Ir(Wo.wordSeparators.defaultValue),t,i,n)}}),Xn(new class extends HP{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityRight",precondition:void 0})}_move(e,t,i,n){return super._move(Ir(Wo.wordSeparators.defaultValue),t,i,n)}}),Xn(new class extends HP{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityRightSelect",precondition:void 0})}_move(e,t,i,n){return super._move(Ir(Wo.wordSeparators.defaultValue),t,i,n)}}),Xn(new class extends KP{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartLeft",precondition:cd.writable})}}),Xn(new class extends KP{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndLeft",precondition:cd.writable})}}),Xn(new class extends KP{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:"deleteWordLeft",precondition:cd.writable,kbOpts:{kbExpr:cd.textInputFocus,primary:2049,mac:{primary:513},weight:100}})}}),Xn(new class extends $P{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartRight",precondition:cd.writable})}}),Xn(new class extends $P{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndRight",precondition:cd.writable})}}),Xn(new class extends $P{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:"deleteWordRight",precondition:cd.writable,kbOpts:{kbExpr:cd.textInputFocus,primary:2068,mac:{primary:532},weight:100}})}}),Qn(class extends Yn{constructor(){super({id:"deleteInsideWord",precondition:cd.writable,label:t(0,"Delete Word"),alias:"Delete Word"})}run(e,t,i){if(!t.hasModel())return;const n=Ir(t.getOption(115)),o=t.getModel(),s=t.getSelections().map(e=>{const t=ed.deleteInsideWord(n,o,e);return new $c(t,"")});t.pushUndoStop(),t.executeCommands(this.id,s),t.pushUndoStop()}});const jP=kt("themeService");var qP,GP,YP,ZP,XP,QP,JP,eF,tF;!function(e){e.noSelection=t(0,"No selection"),e.singleSelectionRange=t(0,"Line {0}, Column {1} ({2} selected)"),e.singleSelection=t(0,"Line {0}, Column {1}"),e.multiSelectionRange=t(0,"{0} selections ({1} characters selected)"),e.multiSelection=t(0,"{0} selections"),e.emergencyConfOn=t(0,"Now changing the setting `accessibilitySupport` to 'on'."),e.openingDocs=t(0,"Now opening the Editor Accessibility documentation page."),e.readonlyDiffEditor=t(0," in a read-only pane of a diff editor."),e.editableDiffEditor=t(0," in a pane of a diff editor."),e.readonlyEditor=t(0," in a read-only code editor"),e.editableEditor=t(0," in a code editor"),e.changeConfigToOnMac=t(0,"To configure the editor to be optimized for usage with a Screen Reader press Command+E now."),e.changeConfigToOnWinLinux=t(0,"To configure the editor to be optimized for usage with a Screen Reader press Control+E now."),e.auto_on=t(0,"The editor is configured to be optimized for usage with a Screen Reader."),e.auto_off=t(0,"The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time."),e.tabFocusModeOnMsg=t(0,"Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}."),e.tabFocusModeOnMsgNoKb=t(0,"Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding."),e.tabFocusModeOffMsg=t(0,"Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}."),e.tabFocusModeOffMsgNoKb=t(0,"Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding."),e.openDocMac=t(0,"Press Command+H now to open a browser window with more information related to editor accessibility."),e.openDocWinLinux=t(0,"Press Control+H now to open a browser window with more information related to editor accessibility."),e.outroMsg=t(0,"You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape."),e.showAccessibilityHelpAction=t(0,"Show Accessibility Help")}(qP||(qP={})),function(e){e.inspectTokensAction=t(0,"Developer: Inspect Tokens")}(GP||(GP={})),function(e){e.gotoLineActionLabel=t(0,"Go to Line/Column...")}(YP||(YP={})),function(e){e.helpQuickAccessActionLabel=t(0,"Show all Quick Access Providers")}(ZP||(ZP={})),function(e){e.quickCommandActionLabel=t(0,"Command Palette"),e.quickCommandHelp=t(0,"Show And Run Commands")}(XP||(XP={})),function(e){e.quickOutlineActionLabel=t(0,"Go to Symbol..."),e.quickOutlineByCategoryActionLabel=t(0,"Go to Symbol by Category...")}(QP||(QP={})),function(e){e.editorViewAccessibleLabel=t(0,"Editor content"),e.accessibilityHelpMessage=t(0,"Press Alt+F1 for Accessibility Options.")}(JP||(JP={})),function(e){e.toggleHighContrast=t(0,"Toggle High Contrast Theme")}(eF||(eF={})),function(e){e.bulkEditServiceSummary=t(0,"Made {0} edits in {1} files")}(tF||(tF={}));var iF=function(e,t){return function(i,n){t(i,n,e)}};let nF=class e extends C{constructor(e,t,i){super(),this._editor=e,this._modeService=i,this._widget=null,this._register(this._editor.onDidChangeModel(e=>this.stop())),this._register(this._editor.onDidChangeModelLanguage(e=>this.stop())),this._register(th.onDidChange(e=>this.stop())),this._register(this._editor.onKeyUp(e=>9===e.keyCode&&this.stop()))}static get(t){return t.getContribution(e.ID)}dispose(){this.stop(),super.dispose()}launch(){this._widget||this._editor.hasModel()&&(this._widget=new oF(this._editor,this._modeService))}stop(){this._widget&&(this._widget.dispose(),this._widget=null)}};nF.ID="editor.contrib.inspectTokens",nF=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([iF(1,jP),iF(2,nT)],nF);class oF extends C{constructor(e,t){super(),this.allowEditorOverflow=!0,this._editor=e,this._modeService=t,this._model=this._editor.getModel(),this._domNode=document.createElement("div"),this._domNode.className="tokens-inspect-widget",this._tokenizationSupport=function i(e){return th.get(e.language)||{getInitialState:()=>kh,tokenize:(t,i,n,o)=>Th(e.language,0,n,o),tokenize2:(t,i,n,o)=>Ah(e.id,0,n,o)}}(this._model.getLanguageIdentifier()),this._compute(this._editor.getPosition()),this._register(this._editor.onDidChangeCursorPosition(e=>this._compute(this._editor.getPosition()))),this._editor.addContentWidget(this)}dispose(){this._editor.removeContentWidget(this),super.dispose()}getId(){return oF._ID}_compute(e){let t=this._getTokensAtLine(e.lineNumber),i=0;for(let n=t.tokens1.length-1;n>=0;n--)if(e.column-1>=t.tokens1[n].offset){i=n;break}let n=0;for(let i=t.tokens2.length>>>1;i>=0;i--)if(e.column-1>=t.tokens2[i<<1]){n=i;break}let o=this._model.getLineContent(e.lineNumber),s="";i{const i=e.getColor(uf);i&&(t.addRule(`.monaco-editor .tokens-inspect-widget { border: ${e.type===ln.HIGH_CONTRAST?2:1}px solid ${i}; }`),t.addRule(`.monaco-editor .tokens-inspect-widget .tokens-inspect-separator { background-color: ${i}; }`));const n=e.getColor(cf);n&&t.addRule(`.monaco-editor .tokens-inspect-widget { background-color: ${n}; }`);const o=e.getColor(df);o&&t.addRule(`.monaco-editor .tokens-inspect-widget { color: ${o}; }`)});class sF extends C{constructor(e){super(),this.editor=e,this.widget=null,be&&(this._register(e.onDidChangeConfiguration(()=>this.update())),this.update())}update(){const e=!this.editor.getOption(77);!this.widget&&e?this.widget=new rF(this.editor):this.widget&&!e&&(this.widget.dispose(),this.widget=null)}dispose(){super.dispose(),this.widget&&(this.widget.dispose(),this.widget=null)}}sF.ID="editor.contrib.iPadShowKeyboard";class rF extends C{constructor(e){super(),this.editor=e,this._domNode=document.createElement("textarea"),this._domNode.className="iPadShowKeyboard",this._register(jd(this._domNode,"touchstart",e=>{this.editor.focus()})),this._register(jd(this._domNode,"focus",e=>{this.editor.focus()})),this.editor.addOverlayWidget(this)}dispose(){this.editor.removeOverlayWidget(this),super.dispose()}getId(){return rF.ID}getDomNode(){return this._domNode}getPosition(){return{preference:1}}}var aF,lF,hF,cF,dF,uF,gF,pF,mF,fF,_F,bF,vF,CF,wF,yF,SF,LF,DF,EF,xF,kF,NF,IF,TF,AF,MF,OF,RF,PF,FF,BF,WF,VF,zF,HF;rF.ID="editor.contrib.ShowKeyboardWidget",Jn(sF.ID,sF),Qn(class extends Yn{constructor(){super({id:"editor.action.toggleHighContrast",label:eF.toggleHighContrast,alias:"Toggle High Contrast Theme",precondition:void 0}),this._originalThemeName=null}run(e,t){const i=e.get(jP);this._originalThemeName?(i.setTheme(this._originalThemeName),this._originalThemeName=null):(this._originalThemeName=i.getColorTheme().themeName,i.setTheme("hc-black"))}}),function(e){e[e.Unknown=0]="Unknown",e[e.Disabled=1]="Disabled",e[e.Enabled=2]="Enabled"}(aF||(aF={})),function(e){e[e.KeepWhitespace=1]="KeepWhitespace",e[e.InsertAsSnippet=4]="InsertAsSnippet"}(lF||(lF={})),function(e){e[e.Method=0]="Method",e[e.Function=1]="Function",e[e.Constructor=2]="Constructor",e[e.Field=3]="Field",e[e.Variable=4]="Variable",e[e.Class=5]="Class",e[e.Struct=6]="Struct",e[e.Interface=7]="Interface",e[e.Module=8]="Module",e[e.Property=9]="Property",e[e.Event=10]="Event",e[e.Operator=11]="Operator",e[e.Unit=12]="Unit",e[e.Value=13]="Value",e[e.Constant=14]="Constant",e[e.Enum=15]="Enum",e[e.EnumMember=16]="EnumMember",e[e.Keyword=17]="Keyword",e[e.Text=18]="Text",e[e.Color=19]="Color",e[e.File=20]="File",e[e.Reference=21]="Reference",e[e.Customcolor=22]="Customcolor",e[e.Folder=23]="Folder",e[e.TypeParameter=24]="TypeParameter",e[e.User=25]="User",e[e.Issue=26]="Issue",e[e.Snippet=27]="Snippet"}(hF||(hF={})),function(e){e[e.Deprecated=1]="Deprecated"}(cF||(cF={})),function(e){e[e.Invoke=0]="Invoke",e[e.TriggerCharacter=1]="TriggerCharacter",e[e.TriggerForIncompleteCompletions=2]="TriggerForIncompleteCompletions",e[e.UpdateSuggestions=3]="UpdateSuggestions"}(dF||(dF={})),function(e){e[e.EXACT=0]="EXACT",e[e.ABOVE=1]="ABOVE",e[e.BELOW=2]="BELOW"}(uF||(uF={})),function(e){e[e.NotSet=0]="NotSet",e[e.ContentFlush=1]="ContentFlush",e[e.RecoverFromMarkers=2]="RecoverFromMarkers",e[e.Explicit=3]="Explicit",e[e.Paste=4]="Paste",e[e.Undo=5]="Undo",e[e.Redo=6]="Redo"}(gF||(gF={})),function(e){e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(pF||(pF={})),function(e){e[e.Text=0]="Text",e[e.Read=1]="Read",e[e.Write=2]="Write"}(mF||(mF={})),function(e){e[e.None=0]="None",e[e.Keep=1]="Keep",e[e.Brackets=2]="Brackets",e[e.Advanced=3]="Advanced",e[e.Full=4]="Full"}(fF||(fF={})),function(e){e[e.acceptSuggestionOnCommitCharacter=0]="acceptSuggestionOnCommitCharacter",e[e.acceptSuggestionOnEnter=1]="acceptSuggestionOnEnter",e[e.accessibilitySupport=2]="accessibilitySupport",e[e.accessibilityPageSize=3]="accessibilityPageSize",e[e.ariaLabel=4]="ariaLabel",e[e.autoClosingBrackets=5]="autoClosingBrackets",e[e.autoClosingOvertype=6]="autoClosingOvertype",e[e.autoClosingQuotes=7]="autoClosingQuotes",e[e.autoIndent=8]="autoIndent",e[e.automaticLayout=9]="automaticLayout",e[e.autoSurround=10]="autoSurround",e[e.codeLens=11]="codeLens",e[e.codeLensFontFamily=12]="codeLensFontFamily",e[e.codeLensFontSize=13]="codeLensFontSize",e[e.colorDecorators=14]="colorDecorators",e[e.columnSelection=15]="columnSelection",e[e.comments=16]="comments",e[e.contextmenu=17]="contextmenu",e[e.copyWithSyntaxHighlighting=18]="copyWithSyntaxHighlighting",e[e.cursorBlinking=19]="cursorBlinking",e[e.cursorSmoothCaretAnimation=20]="cursorSmoothCaretAnimation",e[e.cursorStyle=21]="cursorStyle",e[e.cursorSurroundingLines=22]="cursorSurroundingLines",e[e.cursorSurroundingLinesStyle=23]="cursorSurroundingLinesStyle",e[e.cursorWidth=24]="cursorWidth",e[e.disableLayerHinting=25]="disableLayerHinting",e[e.disableMonospaceOptimizations=26]="disableMonospaceOptimizations",e[e.dragAndDrop=27]="dragAndDrop",e[e.emptySelectionClipboard=28]="emptySelectionClipboard",e[e.extraEditorClassName=29]="extraEditorClassName",e[e.fastScrollSensitivity=30]="fastScrollSensitivity",e[e.find=31]="find",e[e.fixedOverflowWidgets=32]="fixedOverflowWidgets",e[e.folding=33]="folding",e[e.foldingStrategy=34]="foldingStrategy",e[e.foldingHighlight=35]="foldingHighlight",e[e.unfoldOnClickAfterEndOfLine=36]="unfoldOnClickAfterEndOfLine",e[e.fontFamily=37]="fontFamily",e[e.fontInfo=38]="fontInfo",e[e.fontLigatures=39]="fontLigatures",e[e.fontSize=40]="fontSize",e[e.fontWeight=41]="fontWeight",e[e.formatOnPaste=42]="formatOnPaste",e[e.formatOnType=43]="formatOnType",e[e.glyphMargin=44]="glyphMargin",e[e.gotoLocation=45]="gotoLocation",e[e.hideCursorInOverviewRuler=46]="hideCursorInOverviewRuler",e[e.highlightActiveIndentGuide=47]="highlightActiveIndentGuide",e[e.hover=48]="hover",e[e.inDiffEditor=49]="inDiffEditor",e[e.jumpOutOfAutoCloseOnTab=50]="jumpOutOfAutoCloseOnTab",e[e.letterSpacing=51]="letterSpacing",e[e.lightbulb=52]="lightbulb",e[e.lineDecorationsWidth=53]="lineDecorationsWidth",e[e.lineHeight=54]="lineHeight",e[e.lineNumbers=55]="lineNumbers",e[e.lineNumbersMinChars=56]="lineNumbersMinChars",e[e.linkedEditing=57]="linkedEditing",e[e.links=58]="links",e[e.matchBrackets=59]="matchBrackets",e[e.minimap=60]="minimap",e[e.mouseStyle=61]="mouseStyle",e[e.mouseWheelScrollSensitivity=62]="mouseWheelScrollSensitivity",e[e.mouseWheelZoom=63]="mouseWheelZoom",e[e.multiCursorMergeOverlapping=64]="multiCursorMergeOverlapping",e[e.multiCursorModifier=65]="multiCursorModifier",e[e.multiCursorPaste=66]="multiCursorPaste",e[e.occurrencesHighlight=67]="occurrencesHighlight",e[e.overtypeAllowed=68]="overtypeAllowed",e[e.overviewRulerBorder=69]="overviewRulerBorder",e[e.overviewRulerLanes=70]="overviewRulerLanes",e[e.padding=71]="padding",e[e.parameterHints=72]="parameterHints",e[e.peekWidgetDefaultFocus=73]="peekWidgetDefaultFocus",e[e.definitionLinkOpensInPeek=74]="definitionLinkOpensInPeek",e[e.quickSuggestions=75]="quickSuggestions",e[e.quickSuggestionsDelay=76]="quickSuggestionsDelay",e[e.readOnly=77]="readOnly",e[e.renameOnType=78]="renameOnType",e[e.renderControlCharacters=79]="renderControlCharacters",e[e.renderIndentGuides=80]="renderIndentGuides",e[e.renderFinalNewline=81]="renderFinalNewline",e[e.renderLineHighlight=82]="renderLineHighlight",e[e.renderLineHighlightOnlyWhenFocus=83]="renderLineHighlightOnlyWhenFocus",e[e.renderMarkerMessagesFirst=84]="renderMarkerMessagesFirst",e[e.renderValidationDecorations=85]="renderValidationDecorations",e[e.renderWhitespace=86]="renderWhitespace",e[e.revealHorizontalRightPadding=87]="revealHorizontalRightPadding",e[e.roundedSelection=88]="roundedSelection",e[e.rulers=89]="rulers",e[e.scrollbar=90]="scrollbar",e[e.scrollBeyondLastColumn=91]="scrollBeyondLastColumn",e[e.scrollBeyondLastLine=92]="scrollBeyondLastLine",e[e.scrollPredominantAxis=93]="scrollPredominantAxis",e[e.selectionClipboard=94]="selectionClipboard",e[e.selectionHighlight=95]="selectionHighlight",e[e.selectOnLineNumbers=96]="selectOnLineNumbers",e[e.showFoldingControls=97]="showFoldingControls",e[e.showHoverDefinition=98]="showHoverDefinition",e[e.showMultipleSignaturesAsList=99]="showMultipleSignaturesAsList",e[e.showUnused=100]="showUnused",e[e.snippetSuggestions=101]="snippetSuggestions",e[e.smartSelect=102]="smartSelect",e[e.smoothScrolling=103]="smoothScrolling",e[e.stickyTabStops=104]="stickyTabStops",e[e.stopRenderingLineAfter=105]="stopRenderingLineAfter",e[e.suggest=106]="suggest",e[e.suggestFontSize=107]="suggestFontSize",e[e.suggestLineHeight=108]="suggestLineHeight",e[e.suggestOnTriggerCharacters=109]="suggestOnTriggerCharacters",e[e.suggestSelection=110]="suggestSelection",e[e.tabCompletion=111]="tabCompletion",e[e.tabIndex=112]="tabIndex",e[e.unusualLineTerminators=113]="unusualLineTerminators",e[e.useTabStops=114]="useTabStops",e[e.wordSeparators=115]="wordSeparators",e[e.wordWrap=116]="wordWrap",e[e.wordWrapBreakAfterCharacters=117]="wordWrapBreakAfterCharacters",e[e.wordWrapBreakBeforeCharacters=118]="wordWrapBreakBeforeCharacters",e[e.wordWrapColumn=119]="wordWrapColumn",e[e.wordWrapOverride1=120]="wordWrapOverride1",e[e.wordWrapOverride2=121]="wordWrapOverride2",e[e.wrappingIndent=122]="wrappingIndent",e[e.wrappingStrategy=123]="wrappingStrategy",e[e.showDeprecated=124]="showDeprecated",e[e.inlineHints=125]="inlineHints",e[e.editorClassName=126]="editorClassName",e[e.pixelRatio=127]="pixelRatio",e[e.tabFocusMode=128]="tabFocusMode",e[e.layoutInfo=129]="layoutInfo",e[e.wrappingInfo=130]="wrappingInfo",e[e.contentWidgetTopPadding=131]="contentWidgetTopPadding"}(_F||(_F={})),function(e){e[e.TextDefined=0]="TextDefined",e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(bF||(bF={})),function(e){e[e.LF=0]="LF",e[e.CRLF=1]="CRLF"}(vF||(vF={})),function(e){e[e.Mouse=1]="Mouse",e[e.Action=2]="Action"}(CF||(CF={})),function(e){e[e.None=0]="None",e[e.Indent=1]="Indent",e[e.IndentOutdent=2]="IndentOutdent",e[e.Outdent=3]="Outdent"}(wF||(wF={})),function(e){e[e.Other=0]="Other",e[e.Type=1]="Type",e[e.Parameter=2]="Parameter"}(yF||(yF={})),function(e){e[e.Unknown=0]="Unknown",e[e.Backspace=1]="Backspace",e[e.Tab=2]="Tab",e[e.Enter=3]="Enter",e[e.Shift=4]="Shift",e[e.Ctrl=5]="Ctrl",e[e.Alt=6]="Alt",e[e.PauseBreak=7]="PauseBreak",e[e.CapsLock=8]="CapsLock",e[e.Escape=9]="Escape",e[e.Space=10]="Space",e[e.PageUp=11]="PageUp",e[e.PageDown=12]="PageDown",e[e.End=13]="End",e[e.Home=14]="Home",e[e.LeftArrow=15]="LeftArrow",e[e.UpArrow=16]="UpArrow",e[e.RightArrow=17]="RightArrow",e[e.DownArrow=18]="DownArrow",e[e.Insert=19]="Insert",e[e.Delete=20]="Delete",e[e.KEY_0=21]="KEY_0",e[e.KEY_1=22]="KEY_1",e[e.KEY_2=23]="KEY_2",e[e.KEY_3=24]="KEY_3",e[e.KEY_4=25]="KEY_4",e[e.KEY_5=26]="KEY_5",e[e.KEY_6=27]="KEY_6",e[e.KEY_7=28]="KEY_7",e[e.KEY_8=29]="KEY_8",e[e.KEY_9=30]="KEY_9",e[e.KEY_A=31]="KEY_A",e[e.KEY_B=32]="KEY_B",e[e.KEY_C=33]="KEY_C",e[e.KEY_D=34]="KEY_D",e[e.KEY_E=35]="KEY_E",e[e.KEY_F=36]="KEY_F",e[e.KEY_G=37]="KEY_G",e[e.KEY_H=38]="KEY_H",e[e.KEY_I=39]="KEY_I",e[e.KEY_J=40]="KEY_J",e[e.KEY_K=41]="KEY_K",e[e.KEY_L=42]="KEY_L",e[e.KEY_M=43]="KEY_M",e[e.KEY_N=44]="KEY_N",e[e.KEY_O=45]="KEY_O",e[e.KEY_P=46]="KEY_P",e[e.KEY_Q=47]="KEY_Q",e[e.KEY_R=48]="KEY_R",e[e.KEY_S=49]="KEY_S",e[e.KEY_T=50]="KEY_T",e[e.KEY_U=51]="KEY_U",e[e.KEY_V=52]="KEY_V",e[e.KEY_W=53]="KEY_W",e[e.KEY_X=54]="KEY_X",e[e.KEY_Y=55]="KEY_Y",e[e.KEY_Z=56]="KEY_Z",e[e.Meta=57]="Meta",e[e.ContextMenu=58]="ContextMenu",e[e.F1=59]="F1",e[e.F2=60]="F2",e[e.F3=61]="F3",e[e.F4=62]="F4",e[e.F5=63]="F5",e[e.F6=64]="F6",e[e.F7=65]="F7",e[e.F8=66]="F8",e[e.F9=67]="F9",e[e.F10=68]="F10",e[e.F11=69]="F11",e[e.F12=70]="F12",e[e.F13=71]="F13",e[e.F14=72]="F14",e[e.F15=73]="F15",e[e.F16=74]="F16",e[e.F17=75]="F17",e[e.F18=76]="F18",e[e.F19=77]="F19",e[e.NumLock=78]="NumLock",e[e.ScrollLock=79]="ScrollLock",e[e.US_SEMICOLON=80]="US_SEMICOLON",e[e.US_EQUAL=81]="US_EQUAL",e[e.US_COMMA=82]="US_COMMA",e[e.US_MINUS=83]="US_MINUS",e[e.US_DOT=84]="US_DOT",e[e.US_SLASH=85]="US_SLASH",e[e.US_BACKTICK=86]="US_BACKTICK",e[e.US_OPEN_SQUARE_BRACKET=87]="US_OPEN_SQUARE_BRACKET",e[e.US_BACKSLASH=88]="US_BACKSLASH",e[e.US_CLOSE_SQUARE_BRACKET=89]="US_CLOSE_SQUARE_BRACKET",e[e.US_QUOTE=90]="US_QUOTE",e[e.OEM_8=91]="OEM_8",e[e.OEM_102=92]="OEM_102",e[e.NUMPAD_0=93]="NUMPAD_0",e[e.NUMPAD_1=94]="NUMPAD_1",e[e.NUMPAD_2=95]="NUMPAD_2",e[e.NUMPAD_3=96]="NUMPAD_3",e[e.NUMPAD_4=97]="NUMPAD_4",e[e.NUMPAD_5=98]="NUMPAD_5",e[e.NUMPAD_6=99]="NUMPAD_6",e[e.NUMPAD_7=100]="NUMPAD_7",e[e.NUMPAD_8=101]="NUMPAD_8",e[e.NUMPAD_9=102]="NUMPAD_9",e[e.NUMPAD_MULTIPLY=103]="NUMPAD_MULTIPLY",e[e.NUMPAD_ADD=104]="NUMPAD_ADD",e[e.NUMPAD_SEPARATOR=105]="NUMPAD_SEPARATOR",e[e.NUMPAD_SUBTRACT=106]="NUMPAD_SUBTRACT",e[e.NUMPAD_DECIMAL=107]="NUMPAD_DECIMAL",e[e.NUMPAD_DIVIDE=108]="NUMPAD_DIVIDE",e[e.KEY_IN_COMPOSITION=109]="KEY_IN_COMPOSITION",e[e.ABNT_C1=110]="ABNT_C1",e[e.ABNT_C2=111]="ABNT_C2",e[e.MAX_VALUE=112]="MAX_VALUE"}(SF||(SF={})),function(e){e[e.Hint=1]="Hint",e[e.Info=2]="Info",e[e.Warning=4]="Warning",e[e.Error=8]="Error"}(LF||(LF={})),function(e){e[e.Unnecessary=1]="Unnecessary",e[e.Deprecated=2]="Deprecated"}(DF||(DF={})),function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"}(EF||(EF={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.TEXTAREA=1]="TEXTAREA",e[e.GUTTER_GLYPH_MARGIN=2]="GUTTER_GLYPH_MARGIN",e[e.GUTTER_LINE_NUMBERS=3]="GUTTER_LINE_NUMBERS",e[e.GUTTER_LINE_DECORATIONS=4]="GUTTER_LINE_DECORATIONS",e[e.GUTTER_VIEW_ZONE=5]="GUTTER_VIEW_ZONE",e[e.CONTENT_TEXT=6]="CONTENT_TEXT",e[e.CONTENT_EMPTY=7]="CONTENT_EMPTY",e[e.CONTENT_VIEW_ZONE=8]="CONTENT_VIEW_ZONE",e[e.CONTENT_WIDGET=9]="CONTENT_WIDGET",e[e.OVERVIEW_RULER=10]="OVERVIEW_RULER",e[e.SCROLLBAR=11]="SCROLLBAR",e[e.OVERLAY_WIDGET=12]="OVERLAY_WIDGET",e[e.OUTSIDE_EDITOR=13]="OUTSIDE_EDITOR"}(xF||(xF={})),function(e){e[e.TOP_RIGHT_CORNER=0]="TOP_RIGHT_CORNER",e[e.BOTTOM_RIGHT_CORNER=1]="BOTTOM_RIGHT_CORNER",e[e.TOP_CENTER=2]="TOP_CENTER"}(kF||(kF={})),function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"}(NF||(NF={})),function(e){e[e.Off=0]="Off",e[e.On=1]="On",e[e.Relative=2]="Relative",e[e.Interval=3]="Interval",e[e.Custom=4]="Custom"}(IF||(IF={})),function(e){e[e.None=0]="None",e[e.Text=1]="Text",e[e.Blocks=2]="Blocks"}(TF||(TF={})),function(e){e[e.Smooth=0]="Smooth",e[e.Immediate=1]="Immediate"}(AF||(AF={})),function(e){e[e.Auto=1]="Auto",e[e.Hidden=2]="Hidden",e[e.Visible=3]="Visible"}(MF||(MF={})),function(e){e[e.LTR=0]="LTR",e[e.RTL=1]="RTL"}(OF||(OF={})),function(e){e[e.Invoke=1]="Invoke",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.ContentChange=3]="ContentChange"}(RF||(RF={})),function(e){e[e.File=0]="File",e[e.Module=1]="Module",e[e.Namespace=2]="Namespace",e[e.Package=3]="Package",e[e.Class=4]="Class",e[e.Method=5]="Method",e[e.Property=6]="Property",e[e.Field=7]="Field",e[e.Constructor=8]="Constructor",e[e.Enum=9]="Enum",e[e.Interface=10]="Interface",e[e.Function=11]="Function",e[e.Variable=12]="Variable",e[e.Constant=13]="Constant",e[e.String=14]="String",e[e.Number=15]="Number",e[e.Boolean=16]="Boolean",e[e.Array=17]="Array",e[e.Object=18]="Object",e[e.Key=19]="Key",e[e.Null=20]="Null",e[e.EnumMember=21]="EnumMember",e[e.Struct=22]="Struct",e[e.Event=23]="Event",e[e.Operator=24]="Operator",e[e.TypeParameter=25]="TypeParameter"}(PF||(PF={})),function(e){e[e.Deprecated=1]="Deprecated"}(FF||(FF={})),function(e){e[e.Hidden=0]="Hidden",e[e.Blink=1]="Blink",e[e.Smooth=2]="Smooth",e[e.Phase=3]="Phase",e[e.Expand=4]="Expand",e[e.Solid=5]="Solid"}(BF||(BF={})),function(e){e[e.Line=1]="Line",e[e.Block=2]="Block",e[e.Underline=3]="Underline",e[e.LineThin=4]="LineThin",e[e.BlockOutline=5]="BlockOutline",e[e.UnderlineThin=6]="UnderlineThin"}(WF||(WF={})),function(e){e[e.AlwaysGrowsWhenTypingAtEdges=0]="AlwaysGrowsWhenTypingAtEdges",e[e.NeverGrowsWhenTypingAtEdges=1]="NeverGrowsWhenTypingAtEdges",e[e.GrowsOnlyWhenTypingBefore=2]="GrowsOnlyWhenTypingBefore",e[e.GrowsOnlyWhenTypingAfter=3]="GrowsOnlyWhenTypingAfter"}(VF||(VF={})),function(e){e[e.None=0]="None",e[e.Same=1]="Same",e[e.Indent=2]="Indent",e[e.DeepIndent=3]="DeepIndent"}(zF||(zF={}));class UF{static chord(e,t){return On(e,t)}}function KF(){return{editor:void 0,languages:void 0,CancellationTokenSource:Oa,Emitter:oe,KeyCode:SF,KeyMod:UF,Position:Tt,Range:ro,Selection:ao,SelectionDirection:OF,MarkerSeverity:LF,MarkerTag:DF,Uri:mt,Token:Dh}}UF.CtrlCmd=2048,UF.Shift=1024,UF.Alt=512,UF.WinCtrl=256,function(e){e[e.API=0]="API",e[e.USER=1]="USER"}(HF||(HF={}));var $F=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},jF=function(e,t){return function(i,n){t(i,n,e)}},qF=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let GF=class{constructor(e){this._commandService=e}open(e){return qF(this,void 0,void 0,(function*(){if(!wT(e,Cs.command))return!1;"string"==typeof e&&(e=mt.parse(e));let t=[];try{t=CA(decodeURIComponent(e.query))}catch(i){try{t=CA(e.query)}catch(e){}}return Array.isArray(t)||(t=[t]),yield this._commandService.executeCommand(e.path,...t),!0}))}};GF=$F([jF(0,on)],GF);let YF=class{constructor(e){this._editorService=e}open(e,t){return qF(this,void 0,void 0,(function*(){"string"==typeof e&&(e=mt.parse(e));let i=void 0;const n=/^L?(\d+)(?:,(\d+))?/.exec(e.fragment);return n&&(i={startLineNumber:parseInt(n[1]),startColumn:n[2]?parseInt(n[2]):1},e=e.with({fragment:""})),e.scheme===Cs.file&&(e=Is(e)),yield this._editorService.openCodeEditor({resource:e,options:Object.assign({selection:i,context:(null==t?void 0:t.fromUserGesture)?HF.USER:HF.API},null==t?void 0:t.editorOptions)},this._editorService.getFocusedCodeEditor(),null==t?void 0:t.openToSide),!0}))}};YF=$F([jF(0,It)],YF);let ZF=class{constructor(e,t){this._openers=new L,this._validators=new L,this._resolvers=new L,this._resolvedUriTargets=new Ea(e=>e.with({path:null,fragment:null,query:null}).toString()),this._externalOpeners=new L,this._defaultExternalOpener={openExternal:e=>qF(this,void 0,void 0,(function*(){return wT(e,Cs.http)||wT(e,Cs.https)?Uu(e):window.location.href=e,!0}))},this._openers.push({open:(e,t)=>qF(this,void 0,void 0,(function*(){return!!((null==t?void 0:t.openExternal)||wT(e,Cs.mailto)||wT(e,Cs.http)||wT(e,Cs.https))&&(yield this._doOpenExternal(e,t),!0)}))}),this._openers.push(new GF(t)),this._openers.push(new YF(e))}registerOpener(e){return{dispose:this._openers.unshift(e)}}registerValidator(e){return{dispose:this._validators.push(e)}}registerExternalUriResolver(e){return{dispose:this._resolvers.push(e)}}setDefaultExternalOpener(e){this._defaultExternalOpener=e}registerExternalOpener(e){return{dispose:this._externalOpeners.push(e)}}open(e,t){var i;return qF(this,void 0,void 0,(function*(){const n="string"==typeof e?mt.parse(e):e,o=null!==(i=this._resolvedUriTargets.get(n))&&void 0!==i?i:n;for(const e of this._validators)if(!(yield e.shouldOpen(o)))return!1;for(const i of this._openers)if(yield i.open(e,t))return!0;return!1}))}resolveExternalUri(e,t){return qF(this,void 0,void 0,(function*(){for(const i of this._resolvers){const n=yield i.resolveExternalUri(e,t);if(n)return this._resolvedUriTargets.has(n.resolved)||this._resolvedUriTargets.set(n.resolved,e),n}return{resolved:e,dispose:()=>{}}}))}_doOpenExternal(e,t){return qF(this,void 0,void 0,(function*(){const i="string"==typeof e?mt.parse(e):e,{resolved:n}=yield this.resolveExternalUri(i,t);let o;if(o="string"==typeof e&&i.toString()===n.toString()?e:encodeURI(n.toString(!0)),null==t?void 0:t.allowContributedOpeners){const e="string"==typeof(null==t?void 0:t.allowContributedOpeners)?null==t?void 0:t.allowContributedOpeners:void 0;for(const t of this._externalOpeners)if(yield t.openExternal(o,{sourceUri:i,preferredOpenerId:e},Aa.None))return!0}return this._defaultExternalOpener.openExternal(o,{sourceUri:i},Aa.None)}))}dispose(){this._validators.clear()}};ZF=$F([jF(0,It),jF(1,on)],ZF);const XF={followsCaret:!0,ignoreCharChanges:!0,alwaysRevealFirst:!0};class QF extends C{constructor(e,t={}){super(),this._onDidUpdate=this._register(new oe),this._editor=e,this._options=Qu(t,XF,!1),this.disposed=!1,this.nextIdx=-1,this.ranges=[],this.ignoreSelectionChange=!1,this.revealFirst=Boolean(this._options.alwaysRevealFirst),this._register(this._editor.onDidDispose(()=>this.dispose())),this._register(this._editor.onDidUpdateDiff(()=>this._onDiffUpdated())),this._options.followsCaret&&this._register(this._editor.getModifiedEditor().onDidChangeCursorPosition(e=>{this.ignoreSelectionChange||(this.nextIdx=-1)})),this._options.alwaysRevealFirst&&this._register(this._editor.getModifiedEditor().onDidChangeModel(e=>{this.revealFirst=!0})),this._init()}_init(){this._editor.getLineChanges()}_onDiffUpdated(){this._init(),this._compute(this._editor.getLineChanges()),this.revealFirst&&null!==this._editor.getLineChanges()&&(this.revealFirst=!1,this.nextIdx=-1,this.next(1))}_compute(e){this.ranges=[],e&&e.forEach(e=>{!this._options.ignoreCharChanges&&e.charChanges?e.charChanges.forEach(e=>{this.ranges.push({rhs:!0,range:new ro(e.modifiedStartLineNumber,e.modifiedStartColumn,e.modifiedEndLineNumber,e.modifiedEndColumn)})}):this.ranges.push({rhs:!0,range:new ro(e.modifiedStartLineNumber,1,e.modifiedStartLineNumber,1)})}),this.ranges.sort((e,t)=>e.range.getStartPosition().isBeforeOrEqual(t.range.getStartPosition())?-1:t.range.getStartPosition().isBeforeOrEqual(e.range.getStartPosition())?1:0),this._onDidUpdate.fire(this)}_initIdx(e){let t=!1,i=this._editor.getPosition();if(i){for(let n=0,o=this.ranges.length;n=this.ranges.length&&(this.nextIdx=0)):(this.nextIdx-=1,this.nextIdx<0&&(this.nextIdx=this.ranges.length-1));let i=this.ranges[this.nextIdx];this.ignoreSelectionChange=!0;try{let e=i.range.getStartPosition();this._editor.setPosition(e),this._editor.revealPositionInCenter(e,t)}finally{this.ignoreSelectionChange=!1}}canNavigate(){return this.ranges&&this.ranges.length>0}next(e=0){this._move(!0,e)}previous(e=0){this._move(!1,e)}dispose(){super.dispose(),this.ranges=[],this.disposed=!0}}const JF="$initialize";let eB=!1;function tB(e){$&&(eB||(eB=!0,console.warn("Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq")),console.warn(e.message))}class iB{constructor(e){this._workerId=-1,this._handler=e,this._lastSentReq=0,this._pendingReplies=Object.create(null)}setWorkerId(e){this._workerId=e}sendMessage(e,t){let i=String(++this._lastSentReq);return new Promise((n,o)=>{this._pendingReplies[i]={resolve:n,reject:o},this._send({vsWorker:this._workerId,req:i,method:e,args:t})})}handleMessage(e){e&&e.vsWorker&&(-1!==this._workerId&&e.vsWorker!==this._workerId||this._handleMessage(e))}_handleMessage(e){if(e.seq){let t=e;if(!this._pendingReplies[t.seq])return void console.warn("Got reply to unknown seq");let i=this._pendingReplies[t.seq];if(delete this._pendingReplies[t.seq],t.err){let e=t.err;return t.err.$isError&&((e=new Error).name=t.err.name,e.message=t.err.message,e.stack=t.err.stack),void i.reject(e)}return void i.resolve(t.res)}let t=e.req;this._handler.handleMessage(e.method,e.args).then(e=>{this._send({vsWorker:this._workerId,seq:t,res:e,err:void 0})},e=>{e.detail instanceof Error&&(e.detail=s(e.detail)),this._send({vsWorker:this._workerId,seq:t,res:void 0,err:s(e)})})}_send(e){let t=[];if(e.req){const i=e;for(let e=0;e{this._protocol.handleMessage(e)},e=>{n&&n(e)})),this._protocol=new iB({sendMessage:(e,t)=>{this._worker.postMessage(e,t)},handleMessage:(e,t)=>{if("function"!=typeof i[e])return Promise.reject(new Error("Missing method "+e+" on main thread host."));try{return Promise.resolve(i[e].apply(i,t))}catch(e){return Promise.reject(e)}}}),this._protocol.setWorkerId(this._worker.getId());let o=null;void 0!==self.require&&"function"==typeof self.require.getConfig?o=self.require.getConfig():void 0!==self.requirejs&&(o=self.requirejs.s.contexts._.config);const s=Me(i);this._onModuleLoaded=this._protocol.sendMessage(JF,[this._worker.getId(),JSON.parse(JSON.stringify(o)),t,s]);const r=(e,t)=>this._request(e,t);this._lazyProxy=new Promise((e,i)=>{n=i,this._onModuleLoaded.then(t=>{e(Oe(t,r))},e=>{i(e),this._onError("Worker failed to load "+t,e)})})}getProxyObject(){return this._lazyProxy}_request(e,t){return new Promise((i,n)=>{this._onModuleLoaded.then(()=>{this._protocol.sendMessage(e,t).then(i,n)},n)})}_onError(e,t){console.error(e),console.info(t)}}var oB;const sB=null===(oB=window.trustedTypes)||void 0===oB?void 0:oB.createPolicy("defaultWorkerFactory",{createScriptURL:e=>e});class rB{constructor(e,t,i,n,o){this.id=t;const s=function r(e,t){if(G.MonacoEnvironment){if("function"==typeof G.MonacoEnvironment.getWorker)return G.MonacoEnvironment.getWorker(e,t);if("function"==typeof G.MonacoEnvironment.getWorkerUrl){const i=G.MonacoEnvironment.getWorkerUrl(e,t);return new Worker(sB?sB.createScriptURL(i):i,{name:t})}}throw new Error("You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker")}("workerMain.js",i);this.worker=function a(e){return"function"==typeof e.then}(s)?s:Promise.resolve(s),this.postMessage(e,[]),this.worker.then(e=>{e.onmessage=function(e){n(e.data)},e.onmessageerror=o,"function"==typeof e.addEventListener&&e.addEventListener("error",o)})}getId(){return this.id}postMessage(e,t){this.worker&&this.worker.then(i=>i.postMessage(e,t))}dispose(){this.worker&&this.worker.then(e=>e.terminate()),this.worker=null}}class aB{constructor(e){this._label=e,this._webWorkerFailedBeforeError=!1}create(e,t,i){let n=++aB.LAST_WORKER_ID;if(this._webWorkerFailedBeforeError)throw this._webWorkerFailedBeforeError;return new rB(e,n,this._label||"anonymous"+n,t,e=>{tB(e),this._webWorkerFailedBeforeError=e,i(e)})}}aB.LAST_WORKER_ID=0;const lB=3;function hB(e,t,i,n){return new mk(e,t,i).ComputeDiff(n)}class cB{constructor(e){const t=[],i=[];for(let n=0,o=e.length;n0&&t.originalLength<20&&t.modifiedLength>0&&t.modifiedLength<20&&o()){const s=i.createCharSequence(e,t.originalStart,t.originalStart+t.originalLength-1),a=n.createCharSequence(e,t.modifiedStart,t.modifiedStart+t.modifiedLength-1);let l=hB(s,a,o,!0).changes;r&&(l=function u(e){if(e.length<=1)return e;const t=[e[0]];let i=t[0];for(let n=1,o=e.length;n1&&r>1&&e.charCodeAt(i-2)===t.charCodeAt(r-2);)i--,r--;(i>1||r>1)&&this._pushTrimWhitespaceCharChange(n,o+1,1,i,s+1,1,r)}{let i=fB(e,1),r=fB(t,1);const a=e.length+1,l=t.length+1;for(;i!0;const t=Date.now();return()=>Date.now()-tt&&(t=s),o>i&&(i=o),r>i&&(i=r)}let n=new vB(++i,++t,0);for(let t=0,i=e.length;t=this._maxCharCode?0:this._states.get(e,t)}}let wB=null,yB=null;class SB{static _createLink(e,t,i,n,o){let s=o-1;do{const i=t.charCodeAt(s);if(2!==e.get(i))break;s--}while(s>n);if(n>0){const e=t.charCodeAt(n-1),i=t.charCodeAt(s);(40===e&&41===i||91===e&&93===i||123===e&&125===i)&&s--}return{range:{startLineNumber:i,startColumn:n+1,endLineNumber:i,endColumn:s+2},url:t.substring(n,s+1)}}static computeLinks(e,t=function i(){return null===wB&&(wB=new CB([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),wB}()){const n=function o(){if(null===yB){yB=new xr(0);const e=" \t<>'\"、。。、,.:;‘“〈《「『【〔([{「」}])〕】』」》〉”’`~…";for(let t=0;t=0?((n+=i?1:-1)<0?n=e.length-1:n%=e.length,e[n]):null}}LB.INSTANCE=new LB;var DB=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class EB extends bB{get uri(){return this._uri}get version(){return this._versionId}get eol(){return this._eol}getValue(){return this.getText()}getLinesContent(){return this._lines.slice(0)}getLineCount(){return this._lines.length}getLineContent(e){return this._lines[e-1]}getWordAtPosition(e,t){let i=go(e.column,co(t),this._lines[e.lineNumber-1],0);return i?new ro(e.lineNumber,i.startColumn,e.lineNumber,i.endColumn):null}words(e){const t=this._lines,i=this._wordenize.bind(this);let n=0,o="",s=0,r=[];return{*[Symbol.iterator](){for(;;)if(sthis._lines.length)i=this._lines[(t=this._lines.length)-1].length+1,n=!0;else{let e=this._lines[t-1].length+1;i<1?(i=1,n=!0):i>e&&(i=e,n=!0)}return n?{lineNumber:t,column:i}:e}}class xB{constructor(e,t){this._host=e,this._models=Object.create(null),this._foreignModuleFactory=t,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(e){return this._models[e]}_getModels(){let e=[];return Object.keys(this._models).forEach(t=>e.push(this._models[t])),e}acceptNewModel(e){this._models[e.url]=new EB(mt.parse(e.url),e.lines,e.EOL,e.versionId)}acceptModelChanged(e,t){this._models[e]&&this._models[e].onEvents(t)}acceptRemovedModel(e){this._models[e]&&delete this._models[e]}computeDiff(e,t,i,n){return DB(this,void 0,void 0,(function*(){const o=this._getModel(e),s=this._getModel(t);if(!o||!s)return null;const r=o.getLinesContent(),a=s.getLinesContent(),l=new pB(r,a,{shouldComputeCharChanges:!0,shouldPostProcessCharChanges:!0,shouldIgnoreTrimWhitespace:i,shouldMakePrettyDiff:!0,maxComputationTime:n}).computeDiff(),h=!(l.changes.length>0)&&this._modelsAreIdentical(o,s);return{quitEarly:l.quitEarly,identical:h,changes:l.changes}}))}_modelsAreIdentical(e,t){const i=e.getLineCount();if(i!==t.getLineCount())return!1;for(let n=1;n<=i;n++)if(e.getLineContent(n)!==t.getLineContent(n))return!1;return!0}computeMoreMinimalEdits(e,t){return DB(this,void 0,void 0,(function*(){const i=this._getModel(e);if(!i)return t;const n=[];let o=void 0;t=Jr(t,(e,t)=>e.range&&t.range?ro.compareRangesUsingStarts(e.range,t.range):(e.range?0:1)-(t.range?0:1));for(let{range:e,text:s,eol:r}of t){if("number"==typeof r&&(o=r),ro.isEmpty(e)&&!s)continue;const t=i.getValueInRange(e);if(t===(s=s.replace(/\r\n|\n|\r/g,i.eol)))continue;if(Math.max(s.length,t.length)>xB._diffLimit){n.push({range:e,text:s});continue}const a=dk(t,s,!1),l=i.offsetAt(ro.lift(e).getStartPosition());for(const e of a){const t=i.positionAt(l+e.originalStart),o=i.positionAt(l+e.originalStart+e.originalLength),r={text:s.substr(e.modifiedStart,e.modifiedLength),range:{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:o.lineNumber,endColumn:o.column}};i.getValueInRange(r.range)!==r.text&&n.push(r)}}return"number"==typeof o&&n.push({eol:o,text:"",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),n}))}computeLinks(e){return DB(this,void 0,void 0,(function*(){let t=this._getModel(e);return t?function i(e){return e&&"function"==typeof e.getLineCount&&"function"==typeof e.getLineContent?SB.computeLinks(e):[]}(t):null}))}textualSuggest(e,t,i,n){return DB(this,void 0,void 0,(function*(){const o=new te(!0),s=new RegExp(i,n),r=new Set;e:for(let i of e){const e=this._getModel(i);if(e)for(let i of e.words(s))if(i!==t&&isNaN(Number(i))&&(r.add(i),r.size>xB._suggestionsLimit))break e}return{words:Array.from(r),duration:o.elapsed()}}))}computeWordRanges(e,t,i,n){return DB(this,void 0,void 0,(function*(){let o=this._getModel(e);if(!o)return Object.create(null);const s=new RegExp(i,n),r=Object.create(null);for(let e=t.startLineNumber;ethis._host.fhr(e,t));return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory({host:n,getMirrorModels:()=>this._getModels()},t),Promise.resolve(Me(this._foreignModule))):Promise.reject(new Error("Unexpected usage"))}fmr(e,t){if(!this._foreignModule||"function"!=typeof this._foreignModule[e])return Promise.reject(new Error("Missing requestHandler or method: "+e));try{return Promise.resolve(this._foreignModule[e].apply(this._foreignModule,t))}catch(e){return Promise.reject(e)}}}xB._diffLimit=1e5,xB._suggestionsLimit=1e4,"function"==typeof importScripts&&(G.monaco=KF());var kB=function(e,t){return function(i,n){t(i,n,e)}},NB=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const IB=6e4,TB=3e5;function AB(e,t){let i=e.getModel(t);return!!i&&!i.isTooLargeForSyncing()}let MB=class extends C{constructor(e,t,i){super(),this._modelService=e,this._workerManager=this._register(new RB(this._modelService)),this._logService=i,this._register(Yl.register("*",{provideLinks:(e,t)=>AB(this._modelService,e.uri)?this._workerManager.withWorker().then(t=>t.computeLinks(e.uri)).then(e=>e&&{links:e}):Promise.resolve({links:[]})})),this._register(Ml.register("*",new OB(this._workerManager,t,this._modelService)))}dispose(){super.dispose()}canComputeDiff(e,t){return AB(this._modelService,e)&&AB(this._modelService,t)}computeDiff(e,t,i,n){return this._workerManager.withWorker().then(o=>o.computeDiff(e,t,i,n))}computeMoreMinimalEdits(e,t){if(na(t)){if(!AB(this._modelService,e))return Promise.resolve(t);const i=te.create(!0),n=this._workerManager.withWorker().then(i=>i.computeMoreMinimalEdits(e,t));return n.finally(()=>this._logService.trace("FORMAT#computeMoreMinimalEdits",e.toString(!0),i.elapsed())),Promise.race([n,za(1e3).then(()=>t)])}return Promise.resolve(void 0)}canNavigateValueSet(e){return AB(this._modelService,e)}navigateValueSet(e,t,i){return this._workerManager.withWorker().then(n=>n.navigateValueSet(e,t,i))}canComputeWordRanges(e){return AB(this._modelService,e)}computeWordRanges(e,t){return this._workerManager.withWorker().then(i=>i.computeWordRanges(e,t))}};MB=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([kB(0,At),kB(1,HM),kB(2,PM)],MB);class OB{constructor(e,t,i){this._debugDisplayName="wordbasedCompletions",this._workerManager=e,this._configurationService=t,this._modelService=i}provideCompletionItems(e,t){return NB(this,void 0,void 0,(function*(){const i=this._configurationService.getValue(e.uri,t,"editor");if(!i.wordBasedSuggestions)return;const n=[];if("currentDocument"===i.wordBasedSuggestionsMode)AB(this._modelService,e.uri)&&n.push(e.uri);else for(const t of this._modelService.getModels())AB(this._modelService,t.uri)&&(t===e?n.unshift(t.uri):"allDocuments"!==i.wordBasedSuggestionsMode&&t.getLanguageIdentifier().id!==e.getLanguageIdentifier().id||n.push(t.uri));if(0===n.length)return;const o=ac.getWordDefinition(e.getLanguageIdentifier().id),s=e.getWordAtPosition(t),r=s?new ro(t.lineNumber,s.startColumn,t.lineNumber,s.endColumn):ro.fromPositions(t),a=r.setEndPosition(t.lineNumber,t.column),l=yield this._workerManager.withWorker(),h=yield l.textualSuggest(n,null==s?void 0:s.word,o);return h?{duration:h.duration,suggestions:h.words.map(e=>({kind:18,label:e,insertText:e,range:{insert:a,replace:r}}))}:void 0}))}}class RB extends C{constructor(e){super(),this._modelService=e,this._editorWorkerClient=null,this._lastWorkerUsedTime=(new Date).getTime(),this._register(new Ka).cancelAndSet(()=>this._checkStopIdleWorker(),Math.round(TB/2)),this._register(this._modelService.onModelRemoved(e=>this._checkStopEmptyWorker()))}dispose(){this._editorWorkerClient&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null),super.dispose()}_checkStopEmptyWorker(){this._editorWorkerClient&&0===this._modelService.getModels().length&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}_checkStopIdleWorker(){this._editorWorkerClient&&(new Date).getTime()-this._lastWorkerUsedTime>TB&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}withWorker(){return this._lastWorkerUsedTime=(new Date).getTime(),this._editorWorkerClient||(this._editorWorkerClient=new WB(this._modelService,!1,"editorWorkerService")),Promise.resolve(this._editorWorkerClient)}}class PB extends C{constructor(e,t,i){if(super(),this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),this._proxy=e,this._modelService=t,!i){let e=new Ka;e.cancelAndSet(()=>this._checkStopModelSync(),Math.round(IB/2)),this._register(e)}}dispose(){for(let e in this._syncedModels)f(this._syncedModels[e]);this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),super.dispose()}ensureSyncedResources(e){for(const t of e){let e=t.toString();this._syncedModels[e]||this._beginModelSync(t),this._syncedModels[e]&&(this._syncedModelsLastUsedTime[e]=(new Date).getTime())}}_checkStopModelSync(){let e=(new Date).getTime(),t=[];for(let i in this._syncedModelsLastUsedTime)e-this._syncedModelsLastUsedTime[i]>IB&&t.push(i);for(const e of t)this._stopModelSync(e)}_beginModelSync(e){let t=this._modelService.getModel(e);if(!t)return;if(t.isTooLargeForSyncing())return;let i=e.toString();this._proxy.acceptNewModel({url:t.uri.toString(),lines:t.getLinesContent(),EOL:t.getEOL(),versionId:t.getVersionId()});const n=new v;n.add(t.onDidChangeContent(e=>{this._proxy.acceptModelChanged(i.toString(),e)})),n.add(t.onWillDispose(()=>{this._stopModelSync(i)})),n.add(b(()=>{this._proxy.acceptRemovedModel(i)})),this._syncedModels[i]=n}_stopModelSync(e){let t=this._syncedModels[e];delete this._syncedModels[e],delete this._syncedModelsLastUsedTime[e],f(t)}}class FB{constructor(e){this._instance=e,this._proxyObj=Promise.resolve(this._instance)}dispose(){this._instance.dispose()}getProxyObject(){return this._proxyObj}}class BB{constructor(e){this._workerClient=e}fhr(e,t){return this._workerClient.fhr(e,t)}}class WB extends C{constructor(e,t,i){super(),this._disposed=!1,this._modelService=e,this._keepIdleModels=t,this._workerFactory=new aB(i),this._worker=null,this._modelManager=null}fhr(e,t){throw new Error("Not implemented!")}_getOrCreateWorker(){if(!this._worker)try{this._worker=this._register(new nB(this._workerFactory,"vs/editor/common/services/editorSimpleWorker",new BB(this)))}catch(e){tB(e),this._worker=new FB(new xB(new BB(this),null))}return this._worker}_getProxy(){return this._getOrCreateWorker().getProxyObject().then(void 0,e=>(tB(e),this._worker=new FB(new xB(new BB(this),null)),this._getOrCreateWorker().getProxyObject()))}_getOrCreateModelManager(e){return this._modelManager||(this._modelManager=this._register(new PB(e,this._modelService,this._keepIdleModels))),this._modelManager}_withSyncedResources(e){return this._disposed?Promise.reject(l()):this._getProxy().then(t=>(this._getOrCreateModelManager(t).ensureSyncedResources(e),t))}computeDiff(e,t,i,n){return this._withSyncedResources([e,t]).then(o=>o.computeDiff(e.toString(),t.toString(),i,n))}computeMoreMinimalEdits(e,t){return this._withSyncedResources([e]).then(i=>i.computeMoreMinimalEdits(e.toString(),t))}computeLinks(e){return this._withSyncedResources([e]).then(t=>t.computeLinks(e.toString()))}textualSuggest(e,t,i){return NB(this,void 0,void 0,(function*(){const n=yield this._withSyncedResources(e),o=i.source,s=Gt(i);return n.textualSuggest(e.map(e=>e.toString()),t,o,s)}))}computeWordRanges(e,t){return this._withSyncedResources([e]).then(i=>{let n=this._modelService.getModel(e);if(!n)return Promise.resolve(null);let o=ac.getWordDefinition(n.getLanguageIdentifier().id),s=o.source,r=Gt(o);return i.computeWordRanges(e.toString(),t,s,r)})}navigateValueSet(e,t,i){return this._withSyncedResources([e]).then(n=>{let o=this._modelService.getModel(e);if(!o)return null;let s=ac.getWordDefinition(o.getLanguageIdentifier().id),r=s.source,a=Gt(s);return n.navigateValueSet(e.toString(),t,i,r,a)})}dispose(){super.dispose(),this._disposed=!0}}class VB extends WB{constructor(e,t){super(e,t.keepIdleModels||!1,t.label),this._foreignModuleId=t.moduleId,this._foreignModuleCreateData=t.createData||null,this._foreignModuleHost=t.host||null,this._foreignProxy=null}fhr(e,t){if(!this._foreignModuleHost||"function"!=typeof this._foreignModuleHost[e])return Promise.reject(new Error("Missing method "+e+" or missing main thread foreign host."));try{return Promise.resolve(this._foreignModuleHost[e].apply(this._foreignModuleHost,t))}catch(e){return Promise.reject(e)}}_getForeignProxy(){return this._foreignProxy||(this._foreignProxy=this._getProxy().then(e=>{const t=this._foreignModuleHost?Me(this._foreignModuleHost):[];return e.loadForeignModule(this._foreignModuleId,this._foreignModuleCreateData,t).then(t=>{this._foreignModuleCreateData=null;const i=(t,i)=>e.fmr(t,i),n=(e,t)=>(function(){const i=Array.prototype.slice.call(arguments,0);return t(e,i)});let o={};for(const e of t)o[e]=n(e,i);return o})})),this._foreignProxy}getProxy(){return this._getForeignProxy()}withSyncedResources(e){return this._withSyncedResources(e).then(e=>this.getProxy())}}function zB(e){return"string"==typeof e}function HB(e){return!zB(e)}function UB(e){return!e}function KB(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function $B(e){return e.replace(/[&<>'"_]/g,"-")}function jB(e,t){return new Error(`${e.languageId}: ${t}`)}function qB(e,t,i,n,o){let s=null;return t.replace(/\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g,(function(t,r,a,l,h,c,d,u,g){return UB(a)?UB(l)?!UB(h)&&h0;){const t=e.tokenizer[i];if(t)return t;const n=i.lastIndexOf(".");i=n<0?null:i.substr(0,n)}return null}class YB{constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}static create(e,t){return this._INSTANCE.create(e,t)}create(e,t){if(null!==e&&e.depth>=this._maxCacheDepth)return new ZB(e,t);let i=ZB.getStackElementId(e);i.length>0&&(i+="|");let n=this._entries[i+=t];return n||(n=new ZB(e,t),this._entries[i]=n,n)}}YB._INSTANCE=new YB(5);class ZB{constructor(e,t){this.parent=e,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(e){let t="";for(;null!==e;)t.length>0&&(t+="|"),t+=e.state,e=e.parent;return t}static _equals(e,t){for(;null!==e&&null!==t;){if(e===t)return!0;if(e.state!==t.state)return!1;e=e.parent,t=t.parent}return null===e&&null===t}equals(e){return ZB._equals(this,e)}push(e){return YB.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return YB.create(this.parent,e)}}class XB{constructor(e,t){this.modeId=e,this.state=t}equals(e){return this.modeId===e.modeId&&this.state.equals(e.state)}clone(){return this.state.clone()===this.state?this:new XB(this.modeId,this.state)}}class QB{constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}static create(e,t){return this._INSTANCE.create(e,t)}create(e,t){if(null!==t)return new JB(e,t);if(null!==e&&e.depth>=this._maxCacheDepth)return new JB(e,t);let i=ZB.getStackElementId(e),n=this._entries[i];return n||(n=new JB(e,null),this._entries[i]=n,n)}}QB._INSTANCE=new QB(5);class JB{constructor(e,t){this.stack=e,this.embeddedModeData=t}clone(){return(this.embeddedModeData?this.embeddedModeData.clone():null)===this.embeddedModeData?this:QB.create(this.stack,this.embeddedModeData)}equals(e){return e instanceof JB&&!!this.stack.equals(e.stack)&&(null===this.embeddedModeData&&null===e.embeddedModeData||null!==this.embeddedModeData&&null!==e.embeddedModeData&&this.embeddedModeData.equals(e.embeddedModeData))}}class eW{constructor(){this._tokens=[],this._language=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterMode(e,t){this._language=t}emit(e,t){this._lastTokenType===t&&this._lastTokenLanguage===this._language||(this._lastTokenType=t,this._lastTokenLanguage=this._language,this._tokens.push(new Dh(e,t,this._language)))}nestedModeTokenize(e,t,i,n){const o=i.modeId,s=i.state,r=th.get(o);if(!r)return this.enterMode(n,o),this.emit(n,""),s;let a=r.tokenize(e,t,s,n);return this._tokens=this._tokens.concat(a.tokens),this._lastTokenType=null,this._lastTokenLanguage=null,this._language=null,a.endState}finalize(e){return new Eh(this._tokens,e)}}class tW{constructor(e,t){this._modeService=e,this._theme=t,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterMode(e,t){this._currentLanguageId=this._modeService.getLanguageIdentifier(t).id}emit(e,t){let i=this._theme.match(this._currentLanguageId,t);this._lastTokenMetadata!==i&&(this._lastTokenMetadata=i,this._tokens.push(e),this._tokens.push(i))}static _merge(e,t,i){let n=null!==e?e.length:0,o=t.length,s=null!==i?i.length:0;if(0===n&&0===o&&0===s)return new Uint32Array(0);if(0===n&&0===o)return i;if(0===o&&0===s)return e;let r=new Uint32Array(n+o+s);null!==e&&r.set(e);for(let e=0;e{if(o)return;let t=!1;for(let i=0,n=e.changedLanguages.length;ivoid 0)}}getInitialState(){let e=YB.create(null,this._lexer.start);return QB.create(e,null)}tokenize(e,t,i,n){let o=new eW,s=this._tokenize(e,t,i,n,o);return o.finalize(s)}tokenize2(e,t,i,n){let o=new tW(this._modeService,this._standaloneThemeService.getColorTheme().tokenTheme),s=this._tokenize(e,t,i,n,o);return o.finalize(s)}_tokenize(e,t,i,n,o){return i.embeddedModeData?this._nestedTokenize(e,t,i,n,o):this._myTokenize(e,t,i,n,o)}_findLeavingNestedModeOffset(e,t){let i=this._lexer.tokenizer[t.stack.state];if(!i&&!(i=GB(this._lexer,t.stack.state)))throw jB(this._lexer,"tokenizer state is not defined: "+t.stack.state);let n=-1,o=!1;for(const t of i){if(!HB(t.action)||"@pop"!==t.action.nextEmbedded)continue;o=!0;let i=t.regex,s=t.regex.source;if("^(?:"===s.substr(0,4)&&")"===s.substr(s.length-1,1)){let e=(i.ignoreCase?"i":"")+(i.unicode?"u":"");i=new RegExp(s.substr(4,s.length-5),e)}let r=e.search(i);-1===r||0!==r&&t.matchOnlyAtLineStart||(-1===n||r0&&o.nestedModeTokenize(r,!1,i.embeddedModeData,n);let a=e.substring(s);return this._myTokenize(a,t,i,n+s,o)}_safeRuleName(e){return e?e.name:"(unknown)"}_myTokenize(e,t,i,n,o){o.enterMode(n,this._modeId);const s=e.length,r=t&&this._lexer.includeLF?e+"\n":e,a=r.length;let l=i.embeddedModeData,h=i.stack,c=0,d=null,u=!0;for(;u||c=a)break;u=!1;let e=this._lexer.tokenizer[_];if(!e&&!(e=GB(this._lexer,_)))throw jB(this._lexer,"tokenizer state is not defined: "+_);let t=r.substr(c);for(const i of e)if((0===c||!i.matchOnlyAtLineStart)&&(b=t.match(i.regex))){v=b[0],C=i.action;break}}if(b||(b=[""],v=""),C||(c=this._lexer.maxStack)throw jB(this._lexer,"maximum tokenizer stack size reached: ["+h.state+","+h.parent.state+",...]");h=h.push(_)}else if("@pop"===C.next){if(h.depth<=1)throw jB(this._lexer,"trying to pop an empty stack in rule: "+this._safeRuleName(w));h=h.pop()}else if("@popall"===C.next)h=h.popall();else{let e=qB(this._lexer,C.next,v,b,_);if("@"===e[0]&&(e=e.substr(1)),!GB(this._lexer,e))throw jB(this._lexer,"trying to set a next state '"+e+"' that is undefined in rule: "+this._safeRuleName(w));h=h.push(e)}}C.log&&"string"==typeof C.log&&(p=this._lexer,m=this._lexer.languageId+": "+qB(this._lexer,C.log,v,b,_),console.log(`${p.languageId}: ${m}`))}if(null===S)throw jB(this._lexer,"lexer rule has no well-defined action in rule: "+this._safeRuleName(w));const L=i=>{let s=this._modeService.getModeIdForLanguageName(i);s&&(i=s);const r=this._getNestedEmbeddedModeData(i);if(c0)throw jB(this._lexer,"groups cannot be nested: "+this._safeRuleName(w));if(b.length!==S.length+1)throw jB(this._lexer,"matched number of groups does not match the number of actions in rule: "+this._safeRuleName(w));let e=0;for(let t=1;te});class rW{static colorizeElement(e,t,i,n){let o=(n=n||{}).theme||"vs",s=n.mimeType||i.getAttribute("lang")||i.getAttribute("data-lang");if(!s)return console.error("Mode not detected"),Promise.resolve();e.setTheme(o);let r=i.firstChild?i.firstChild.nodeValue:"";return i.className+=" "+o,this.colorize(t,r||"",s,n).then(e=>{var t;const n=null!==(t=null==sW?void 0:sW.createHTML(e))&&void 0!==t?t:e;i.innerHTML=n},e=>console.error(e))}static colorize(e,t,i,n){let o=4;n&&"number"==typeof n.tabSize&&(o=n.tabSize),xi(t)&&(t=t.substr(1));let s=Yt(t),r=e.getModeId(i);if(!r)return Promise.resolve(lW(s,o));e.triggerMode(r);const a=th.get(r);if(a)return aW(s,o,a);const l=th.getPromise(r);return l?new Promise((e,t)=>{l.then(i=>{aW(s,o,i).then(e,t)},t)}):new Promise((e,t)=>{let i=null,n=null;const a=()=>{i&&(i.dispose(),i=null),n&&(n.dispose(),n=null);const a=th.get(r);a?aW(s,o,a).then(e,t):e(lW(s,o))};(n=new Ua).cancelAndSet(a,500),i=th.onDidChange(e=>{e.changedLanguages.indexOf(r)>=0&&a()})})}static colorizeLine(e,t,i,n,o=4){const s=hv.isBasicASCII(e,t),r=hv.containsRTL(e,s,i);return fp(new dp(!1,!0,e,!1,s,r,0,n,[],o,0,0,0,0,-1,"none",!1,!1,null)).html}static colorizeModelLine(e,t,i=4){let n=e.getLineContent(t);e.forceTokenization(t);let o=e.getLineTokens(t).inflate();return this.colorizeLine(n,e.mightContainNonBasicASCII(),e.mightContainRTL(),o,i)}}function aW(e,t,i){return new Promise((n,o)=>{const s=()=>{const r=function a(e,t,i){let n=[],o=i.getInitialState();for(let s=0,r=e.length;s"),o=a.endState}return n.join("")}(e,t,i);if(i instanceof iW){const e=i.getLoadStatus();if(!1===e.loaded)return void e.promise.then(s,o)}n(r)};s()})}function lW(e,t){let i=[];const n=new Uint32Array(2);n[0]=0,n[1]=16793600;for(let o=0,s=e.length;o")}return i.join("")}class hW{constructor(e={},t=[],i=[]){this._contents=e,this._keys=t,this._overrides=i,this.isFrozen=!1}get contents(){return this.checkAndFreeze(this._contents)}get overrides(){return this.checkAndFreeze(this._overrides)}get keys(){return this.checkAndFreeze(this._keys)}isEmpty(){return 0===this._keys.length&&0===Object.keys(this._contents).length&&0===this._overrides.length}getValue(e){return e?function t(e,i,n){const o=function s(e,t){let i=e;for(const e of t){if("object"!=typeof i||null===i)return;i=i[e]}return i}(e,i.split("."));return void 0===o?n:o}(this.contents,e):this.contents}override(e){const t=this.getContentsForOverrideIdentifer(e);if(!t||"object"!=typeof t||!Object.keys(t).length)return this;let i={};for(const e of oa([...Object.keys(this.contents),...Object.keys(t)])){let n=this.contents[e],o=t[e];o&&("object"==typeof n&&"object"==typeof o?(n=Zu(n),this.mergeContents(n,o)):n=o),i[e]=n}return new hW(i,this.keys,this.overrides)}merge(...e){const t=Zu(this.contents),i=Zu(this.overrides),n=[...this.keys];for(const o of e){this.mergeContents(t,o.contents);for(const e of o.overrides){const[t]=i.filter(t=>Zr(t.identifiers,e.identifiers));t?this.mergeContents(t.contents,e.contents):i.push(Zu(e))}for(const e of o.keys)-1===n.indexOf(e)&&n.push(e)}return new hW(t,n,i)}freeze(){return this.isFrozen=!0,this}mergeContents(e,t){for(const i of Object.keys(t))i in e&&Le(e[i])&&Le(t[i])?this.mergeContents(e[i],t[i]):e[i]=Zu(t[i])}checkAndFreeze(e){return this.isFrozen&&!Object.isFrozen(e)?function t(e){if(!e||"object"!=typeof e)return e;const t=[e];for(;t.length>0;){const e=t.shift();Object.freeze(e);for(const i in e)if(Xu.call(e,i)){const n=e[i];"object"!=typeof n||Object.isFrozen(n)||t.push(n)}}return e}(e):e}getContentsForOverrideIdentifer(e){for(const t of this.overrides)if(-1!==t.identifiers.indexOf(e))return t.contents;return null}toJSON(){return{contents:this.contents,overrides:this.overrides,keys:this.keys}}setValue(e,t){this.addKey(e),UL(this.contents,e,t,e=>{throw new Error(e)})}removeValue(e){this.removeKey(e)&&function t(e,i){!function e(t,i){const n=i.shift();if(0!==i.length){if(-1!==Object.keys(t).indexOf(n)){const o=t[n];"object"!=typeof o||Array.isArray(o)||(e(o,i),0===Object.keys(o).length&&delete t[n])}}else delete t[n]}(e,i.split("."))}(this.contents,e)}addKey(e){let t=this.keys.length;for(let i=0;iconsole.error(`Conflict in default settings: ${e}`));return e}(),i=function n(){const e=an.as(lg.Configuration).getConfigurationProperties();return Object.keys(e)}(),o=[];for(const t of Object.keys(e))cg.test(t)&&o.push({identifiers:[dg(t).trim()],keys:Object.keys(e[t]),contents:HL(e[t],e=>console.error(`Conflict in default settings file: ${e}`))});super(e,i,o)}}class dW{constructor(e,t,i=new hW,n=new hW,o=new Ea,s=new hW,r=new Ea,a=!0){this._defaultConfiguration=e,this._localUserConfiguration=t,this._remoteUserConfiguration=i,this._workspaceConfiguration=n,this._folderConfigurations=o,this._memoryConfiguration=s,this._memoryConfigurationByResource=r,this._freeze=a,this._workspaceConsolidatedConfiguration=null,this._foldersConsolidatedConfigurations=new Ea,this._userConfiguration=null}getValue(e,t,i){return this.getConsolidateConfigurationModel(t,i).getValue(e)}updateValue(e,t,i={}){let n;i.resource?(n=this._memoryConfigurationByResource.get(i.resource))||(n=new hW,this._memoryConfigurationByResource.set(i.resource,n)):n=this._memoryConfiguration,void 0===t?n.removeValue(e):n.setValue(e,t),i.resource||(this._workspaceConsolidatedConfiguration=null)}get userConfiguration(){return this._userConfiguration||(this._userConfiguration=this._remoteUserConfiguration.isEmpty()?this._localUserConfiguration:this._localUserConfiguration.merge(this._remoteUserConfiguration),this._freeze&&this._userConfiguration.freeze()),this._userConfiguration}getConsolidateConfigurationModel(e,t){let i=this.getConsolidatedConfigurationModelForResource(e,t);return e.overrideIdentifier?i.override(e.overrideIdentifier):i}getConsolidatedConfigurationModelForResource({resource:e},t){let i=this.getWorkspaceConsolidatedConfiguration();if(t&&e){const n=t.getFolder(e);n&&(i=this.getFolderConsolidatedConfiguration(n.uri)||i);const o=this._memoryConfigurationByResource.get(e);o&&(i=i.merge(o))}return i}getWorkspaceConsolidatedConfiguration(){return this._workspaceConsolidatedConfiguration||(this._workspaceConsolidatedConfiguration=this._defaultConfiguration.merge(this.userConfiguration,this._workspaceConfiguration,this._memoryConfiguration),this._freeze&&(this._workspaceConfiguration=this._workspaceConfiguration.freeze())),this._workspaceConsolidatedConfiguration}getFolderConsolidatedConfiguration(e){let t=this._foldersConsolidatedConfigurations.get(e);if(!t){const i=this.getWorkspaceConsolidatedConfiguration(),n=this._folderConfigurations.get(e);n?(t=i.merge(n),this._freeze&&(t=t.freeze()),this._foldersConsolidatedConfigurations.set(e,t)):t=i}return t}toData(){return{defaults:{contents:this._defaultConfiguration.contents,overrides:this._defaultConfiguration.overrides,keys:this._defaultConfiguration.keys},user:{contents:this.userConfiguration.contents,overrides:this.userConfiguration.overrides,keys:this.userConfiguration.keys},workspace:{contents:this._workspaceConfiguration.contents,overrides:this._workspaceConfiguration.overrides,keys:this._workspaceConfiguration.keys},folders:[...this._folderConfigurations.keys()].reduce((e,t)=>{const{contents:i,overrides:n,keys:o}=this._folderConfigurations.get(t);return e.push([t,{contents:i,overrides:n,keys:o}]),e},[])}}static parse(e){const t=this.parseConfigurationModel(e.defaults),i=this.parseConfigurationModel(e.user),n=this.parseConfigurationModel(e.workspace),o=e.folders.reduce((e,t)=>(e.set(mt.revive(t[0]),this.parseConfigurationModel(t[1])),e),new Ea);return new dW(t,i,new hW,n,o,new hW,new Ea,!1)}static parseConfigurationModel(e){return new hW(e.contents,e.keys,e.overrides).freeze()}}class uW{constructor(e,t,i,n){this.change=e,this.previous=t,this.currentConfiguraiton=i,this.currentWorkspace=n,this._previousConfiguration=void 0;const o=new Set;e.keys.forEach(e=>o.add(e)),e.overrides.forEach(([,e])=>e.forEach(e=>o.add(e))),this.affectedKeys=[...o.values()];const s=new hW;this.affectedKeys.forEach(e=>s.setValue(e,{})),this.affectedKeysTree=s.contents}get previousConfiguration(){return!this._previousConfiguration&&this.previous&&(this._previousConfiguration=dW.parse(this.previous.data)),this._previousConfiguration}affectsConfiguration(e,t){var i;return!(!this.doesAffectedKeysTreeContains(this.affectedKeysTree,e)||t&&Ju(this.previousConfiguration?this.previousConfiguration.getValue(e,t,null===(i=this.previous)||void 0===i?void 0:i.workspace):void 0,this.currentConfiguraiton.getValue(e,t,this.currentWorkspace)))}doesAffectedKeysTreeContains(e,t){let i,n=HL({[t]:!0},()=>{});for(;"object"==typeof n&&(i=Object.keys(n)[0]);){if(!(e=e[i]))return!1;n=n[i]}return!0}}class gW extends C{constructor(e,t,i,n,o){super(),this._contextKeyService=e,this._commandService=t,this._telemetryService=i,this._notificationService=n,this._logService=o,this._onDidUpdateKeybindings=this._register(new oe),this._currentChord=null,this._currentChordChecker=new Ka,this._currentChordStatusMessage=null,this._currentSingleModifier=null,this._currentSingleModifierClearTimeout=new Ua,this._logging=!1}get onDidUpdateKeybindings(){return this._onDidUpdateKeybindings?this._onDidUpdateKeybindings.event:ie.None}dispose(){super.dispose()}_log(e){this._logging&&this._logService.info(`[KeybindingService]: ${e}`)}getKeybindings(){return this._getResolver().getKeybindings()}lookupKeybinding(e){const t=this._getResolver().lookupPrimaryKeybinding(e);if(t)return t.resolvedKeybinding}dispatchEvent(e,t){return this._dispatch(e,t)}softDispatch(e,t){const i=this.resolveKeyboardEvent(e);if(i.isChord())return console.warn("Unexpected keyboard event mapped to a chord"),null;const[n]=i.getDispatchParts();if(null===n)return null;const o=this._contextKeyService.getContext(t),s=this._currentChord?this._currentChord.keypress:null;return this._getResolver().resolve(o,s,n)}_enterChordMode(e,i){this._currentChord={keypress:e,label:i},this._currentChordStatusMessage=this._notificationService.status(t(0,"({0}) was pressed. Waiting for second key of chord...",i));const n=Date.now();this._currentChordChecker.cancelAndSet(()=>{this._documentHasFocus()?Date.now()-n>5e3&&this._leaveChordMode():this._leaveChordMode()},500)}_leaveChordMode(){this._currentChordStatusMessage&&(this._currentChordStatusMessage.dispose(),this._currentChordStatusMessage=null),this._currentChordChecker.cancel(),this._currentChord=null}_dispatch(e,t){return this._doDispatch(this.resolveKeyboardEvent(e),t,!1)}_singleModifierDispatch(e,t){const i=this.resolveKeyboardEvent(e),[n]=i.getSingleModifierDispatchParts();return null!==n&&null===this._currentSingleModifier?(this._log(`+ Storing single modifier for possible chord ${n}.`),this._currentSingleModifier=n,this._currentSingleModifierClearTimeout.cancelAndSet(()=>{this._log("+ Clearing single modifier due to 300ms elapsed."),this._currentSingleModifier=null},300),!1):null!==n&&n===this._currentSingleModifier?(this._log(`/ Dispatching single modifier chord ${n} ${n}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,this._doDispatch(i,t,!0)):(this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1)}_doDispatch(e,i,n=!1){let o=!1;if(e.isChord())return console.warn("Unexpected keyboard event mapped to a chord"),!1;let s=null,r=null;if(n){const[t]=e.getSingleModifierDispatchParts();s=t,r=t}else[s]=e.getDispatchParts(),r=this._currentChord?this._currentChord.keypress:null;if(null===s)return this._log("\\ Keyboard event cannot be dispatched in keydown phase."),o;const a=this._contextKeyService.getContext(i),l=e.getLabel(),h=this._getResolver().resolve(a,r,s);return this._logService.trace("KeybindingService#dispatch",l,null==h?void 0:h.commandId),h&&h.enterChord?(o=!0,this._enterChordMode(s,l),o):(this._currentChord&&(h&&h.commandId||(this._notificationService.status(t(0,"The key combination ({0}, {1}) is not a command.",this._currentChord.label,l),{hideAfter:1e4}),o=!0)),this._leaveChordMode(),h&&h.commandId&&(h.bubble||(o=!0),void 0===h.commandArgs?this._commandService.executeCommand(h.commandId).then(void 0,e=>this._notificationService.warn(e)):this._commandService.executeCommand(h.commandId,h.commandArgs).then(void 0,e=>this._notificationService.warn(e)),this._telemetryService.publicLog2("workbenchActionExecuted",{id:h.commandId,from:"keybinding"})),o)}mightProducePrintableCharacter(e){return!e.ctrlKey&&!e.metaKey&&(e.keyCode>=31&&e.keyCode<=56||e.keyCode>=21&&e.keyCode<=30)}}class pW{constructor(e,t,i){this._log=i,this._defaultKeybindings=e,this._defaultBoundCommands=new Map;for(let t=0,i=e.length;t=0;i--)this._isTargetedForRemoval(e[i],o,s,t,r)&&e.splice(i,1)}return e.concat(i)}_addKeyPress(e,t){const i=this._map.get(e);if(void 0===i)return this._map.set(e,[t]),void this._addToLookupMap(t);for(let e=i.length-1;e>=0;e--){let n=i[e];if(n.command===t.command)continue;const o=t.keypressParts.length>1;n.keypressParts.length>1&&o&&n.keypressParts[1]!==t.keypressParts[1]||pW.whenIsEntirelyIncluded(n.when,t.when)&&this._removeFromLookupMap(n)}i.push(t),this._addToLookupMap(t)}_addToLookupMap(e){if(!e.command)return;let t=this._lookupMap.get(e.command);void 0===t?this._lookupMap.set(e.command,t=[e]):t.push(e)}_removeFromLookupMap(e){if(!e.command)return;let t=this._lookupMap.get(e.command);if(void 0!==t)for(let i=0,n=t.length;i9===e.type?e.expr:[e];let n=i(e.negate()).concat(i(t));for(let e=0;e1&&null!==o.keypressParts[1]?(this._log(`\\ From ${n.length} keybinding entries, matched chord, when: ${mW(o.when)}, source: ${fW(o)}.`),{enterChord:!0,leaveChord:!1,commandId:null,commandArgs:null,bubble:!1}):(this._log(`\\ From ${n.length} keybinding entries, matched ${o.command}, when: ${mW(o.when)}, source: ${fW(o)}.`),{enterChord:!1,leaveChord:o.keypressParts.length>1,commandId:o.command,commandArgs:o.commandArgs,bubble:o.bubble}):(this._log(`\\ From ${n.length} keybinding entries, no when clauses matched the context.`),null)}_findCommand(e,t){for(let i=t.length-1;i>=0;i--){let n=t[i];if(pW.contextMatchesRules(e,n.when))return n}return null}static contextMatchesRules(e,t){return!t||t.evaluate(e)}}function mW(e){return e?`${e.serialize()}`:"no when condition"}function fW(e){return e.extensionId?e.isBuiltinExtension?`built-in extension ${e.extensionId}`:`user extension ${e.extensionId}`:e.isDefault?"built-in":"user"}class _W{constructor(e,t,i,n,o,s,r){this.resolvedKeybinding=e,this.keypressParts=e?bW(e.getDispatchParts()):[],e&&0===this.keypressParts.length&&(this.keypressParts=bW(e.getSingleModifierDispatchParts())),this.bubble=!!t&&94===t.charCodeAt(0),this.command=this.bubble?t.substr(1):t,this.commandArgs=i,this.when=n,this.isDefault=o,this.extensionId=s,this.isBuiltinExtension=r}}function bW(e){let t=[];for(let i=0,n=e.length;ithis._getLabel(e))}getAriaLabel(){return wW.toLabel(this._os,this._parts,e=>this._getAriaLabel(e))}isChord(){return this._parts.length>1}getParts(){return this._parts.map(e=>this._getPart(e))}_getPart(e){return new Wn(e.ctrlKey,e.shiftKey,e.altKey,e.metaKey,this._getLabel(e),this._getAriaLabel(e))}getDispatchParts(){return this._parts.map(e=>this._getDispatchPart(e))}getSingleModifierDispatchParts(){return this._parts.map(e=>this._getSingleModifierDispatchPart(e))}}class LW extends SW{constructor(e,t){super(t,e.parts)}_keyCodeToUILabel(e){if(2===this._os)switch(e){case 15:return"←";case 16:return"↑";case 17:return"→";case 18:return"↓"}return Mn.toString(e)}_getLabel(e){return e.isDuplicateModifierCase()?"":this._keyCodeToUILabel(e.keyCode)}_getAriaLabel(e){return e.isDuplicateModifierCase()?"":Mn.toString(e.keyCode)}_getDispatchPart(e){return LW.getDispatchStr(e)}static getDispatchStr(e){if(e.isModifierKey())return null;let t="";return e.ctrlKey&&(t+="ctrl+"),e.shiftKey&&(t+="shift+"),e.altKey&&(t+="alt+"),e.metaKey&&(t+="meta+"),t+Mn.toString(e.keyCode)}_getSingleModifierDispatchPart(e){return 5!==e.keyCode||e.shiftKey||e.altKey||e.metaKey?4!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey?6!==e.keyCode||e.ctrlKey||e.shiftKey||e.metaKey?57!==e.keyCode||e.ctrlKey||e.shiftKey||e.altKey?null:"meta":"alt":"shift":"ctrl"}}var DW=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},EW=function(e,t){return function(i,n){t(i,n,e)}},xW=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class kW{constructor(e){this.disposed=!1,this.model=e,this._onDispose=new oe}get textEditorModel(){return this.model}dispose(){this.disposed=!0,this._onDispose.fire()}}let NW=class{constructor(e){this.modelService=e}setEditor(e){this.editor=e}createModelReference(e){let t=null;return this.editor&&(t=function i(e,t,n){return iD(e)?t(e):n(e)}(this.editor,t=>this.findModel(t,e),t=>this.findModel(t.getOriginalEditor(),e)||this.findModel(t.getModifiedEditor(),e))),t?Promise.resolve(new y(new kW(t))):Promise.reject(new Error("Model not found"))}findModel(e,t){let i=this.modelService.getModel(t);return i&&i.uri.toString()!==t.toString()?null:i}};NW=DW([EW(0,At)],NW);class IW{show(){return IW.NULL_PROGRESS_RUNNER}showWhile(e,t){return xW(this,void 0,void 0,(function*(){yield e}))}}IW.NULL_PROGRESS_RUNNER={done:()=>{},total:()=>{},worked:()=>{}};class TW{confirm(e){return this.doConfirm(e).then(e=>({confirmed:e,checkboxChecked:!1}))}doConfirm(e){let t=e.message;return e.detail&&(t=t+"\n\n"+e.detail),Promise.resolve(window.confirm(t))}show(e,t,i,n){return Promise.resolve({choice:0})}}class AW{info(e){return this.notify({severity:hw.Info,message:e})}warn(e){return this.notify({severity:hw.Warning,message:e})}error(e){return this.notify({severity:hw.Error,message:e})}notify(e){switch(e.severity){case hw.Error:console.error(e.message);break;case hw.Warning:console.warn(e.message);break;default:console.log(e.message)}return AW.NO_OP}status(e,t){return C.None}}AW.NO_OP=new class{};class MW{constructor(e){this._onWillExecuteCommand=new oe,this._onDidExecuteCommand=new oe,this._instantiationService=e}executeCommand(e,...t){const i=sn.getCommand(e);if(!i)return Promise.reject(new Error(`command '${e}' not found`));try{this._onWillExecuteCommand.fire({commandId:e,args:t});const n=this._instantiationService.invokeFunction.apply(this._instantiationService,[i.handler,...t]);return this._onDidExecuteCommand.fire({commandId:e,args:t}),Promise.resolve(n)}catch(e){return Promise.reject(e)}}}class OW extends gW{constructor(e,t,i,n,o,s){super(e,t,i,n,o),this._cachedResolver=null,this._dynamicKeybindings=[],this._register(jd(s,Nu.KEY_DOWN,e=>{const t=new Rd(e);this._dispatch(t,t.target)&&(t.preventDefault(),t.stopPropagation())})),this._register(jd(window,Nu.KEY_UP,e=>{const t=new Rd(e);this._singleModifierDispatch(t,t.target)&&t.preventDefault()}))}addDynamicKeybinding(e,t,i,n){const o=Rn(t,Z),s=new v;return o&&(this._dynamicKeybindings.push({keybinding:o,command:e,when:n,weight1:1e3,weight2:0,extensionId:null,isBuiltinExtension:!1}),s.add(b(()=>{for(let t=0;tthis._log(e))}return this._cachedResolver}_documentHasFocus(){return document.hasFocus()}_toNormalizedKeybindingItems(e,t){let i=[],n=0;for(const o of e){const e=o.when||void 0,s=o.keybinding;if(s){const r=this.resolveKeybinding(s);for(const s of r)i[n++]=new _W(s,o.command,o.commandArgs,e,t,null,!1)}else i[n++]=new _W(void 0,o.command,o.commandArgs,e,t,null,!1)}return i}resolveKeybinding(e){return[new LW(e,Z)]}resolveKeyboardEvent(e){let t=new Fn(e.ctrlKey,e.shiftKey,e.altKey,e.metaKey,e.keyCode).toChord();return new LW(t,Z)}}function RW(e){return e&&"object"==typeof e&&(!e.overrideIdentifier||"string"==typeof e.overrideIdentifier)&&(!e.resource||e.resource instanceof mt)}class PW{constructor(){this._onDidChangeConfiguration=new oe,this.onDidChangeConfiguration=this._onDidChangeConfiguration.event,this._configuration=new dW(new cW,new hW)}getValue(e,t){const i="string"==typeof e?e:void 0,n=RW(e)?e:RW(t)?t:{};return this._configuration.getValue(i,n,void 0)}updateValues(e){const t={data:this._configuration.toData()};let i=[];for(const t of e){const[e,n]=t;this.getValue(e)!==n&&(this._configuration.updateValue(e,n),i.push(e))}if(i.length>0){const e=new uW({keys:i,overrides:[]},t,this._configuration);e.source=7,e.sourceConfig=null,this._onDidChangeConfiguration.fire(e)}return Promise.resolve()}}class FW{constructor(e){this.configurationService=e,this._onDidChangeConfiguration=new oe,this.configurationService.onDidChangeConfiguration(e=>{this._onDidChangeConfiguration.fire({affectedKeys:e.affectedKeys,affectsConfiguration:(t,i)=>e.affectsConfiguration(i)})})}getValue(e,t,i){const n=Tt.isIPosition(t)&&t?"string"==typeof i?i:void 0:"string"==typeof t?t:void 0;return void 0===n?this.configurationService.getValue():this.configurationService.getValue(n)}}let BW=class{constructor(e){this.configurationService=e}getEOL(e,t){const i=this.configurationService.getValue("files.eol",{overrideIdentifier:t,resource:e});return i&&"auto"!==i?i:U||H?"\n":"\r\n"}};BW=DW([EW(0,zL)],BW);class WW{publicLog(e,t){return Promise.resolve(void 0)}publicLog2(e,t){return this.publicLog(e,t)}}class VW{constructor(){const e=mt.from({scheme:VW.SCHEME,authority:"model",path:"/"});this.workspace={id:"4064f6ec-cb38-4ad0-af64-ee6467e63c82",folders:[new NO({uri:e,name:"",index:0})]}}getWorkspace(){return this.workspace}}function zW(e,t,i){if(!t)return;if(!(e instanceof PW))return;let n=[];Object.keys(t).forEach(e=>{(function o(e){return kg()[`editor.${e}`]||!1})(e)&&n.push([`editor.${e}`,t[e]]),i&&function s(e){return kg()[`diffEditor.${e}`]||!1}(e)&&n.push([`diffEditor.${e}`,t[e]])}),n.length>0&&e.updateValues(n)}VW.SCHEME="inmemory";class HW{constructor(e){this._modelService=e}hasPreviewHandler(){return!1}apply(e,t){return xW(this,void 0,void 0,(function*(){const t=new Map;for(let i of e){if(!(i instanceof mS))throw new Error("bad edit - only text edits are supported");const e=this._modelService.getModel(i.resource);if(!e)throw new Error("bad edit - model not found");if("number"==typeof i.versionId&&e.getVersionId()!==i.versionId)throw new Error("bad state - model changed in the meantime");let n=t.get(e);n||t.set(e,n=[]),n.push(jL.replaceMove(ro.lift(i.textEdit.range),i.textEdit.text))}let i=0,n=0;for(const[e,o]of t)e.pushStackElement(),e.pushEditOperations([],o,()=>[]),e.pushStackElement(),n+=1,i+=o.length;return{ariaSummary:Ut(tF.bulkEditServiceSummary,i,n)}}))}}class UW{getUriLabel(e,t){return"file"===e.scheme?e.fsPath:e.path}}class KW{constructor(e,t){this._codeEditorService=e,this._container=t,this.onDidLayout=ie.None}get dimension(){return this._dimension||(this._dimension=au(window.document.body)),this._dimension}get container(){return this._container}focus(){var e;null===(e=this._codeEditorService.getFocusedCodeEditor())||void 0===e||e.focus()}}var $W=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},jW=function(e,t){return function(i,n){t(i,n,e)}};let qW=0,GW=!1,YW=class extends Aw{constructor(e,t,i,n,o,s,r,a,l,h){const c=Object.assign({},t);c.ariaLabel=c.ariaLabel||JP.editorViewAccessibleLabel,c.ariaLabel=c.ariaLabel+";"+JP.accessibilityHelpMessage,super(e,c,{},i,n,o,s,a,l,h),this._standaloneKeybindingService=r instanceof OW?r:null,function d(){GW||(GW=!0,function e(t){(kS=document.createElement("div")).className="monaco-aria-container";const i=()=>{const e=document.createElement("div");return e.className="monaco-alert",e.setAttribute("role","alert"),e.setAttribute("aria-atomic","true"),kS.appendChild(e),e};NS=i(),IS=i();const n=()=>{const e=document.createElement("div");return e.className="monaco-status",e.setAttribute("role","complementary"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),kS.appendChild(e),e};TS=n(),AS=n(),t.appendChild(kS)}(document.body))}()}addCommand(e,t,i){if(!this._standaloneKeybindingService)return console.warn("Cannot add command because the editor is configured with an unrecognized KeybindingService"),null;let n="DYNAMIC_"+ ++qW,o=Ri.deserialize(i);return this._standaloneKeybindingService.addDynamicKeybinding(n,e,t,o),n}createContextKey(e,t){return this._contextKeyService.createKey(e,t)}addAction(e){if("string"!=typeof e.id||"string"!=typeof e.label||"function"!=typeof e.run)throw new Error("Invalid action descriptor, `id`, `label` and `run` are required properties!");if(!this._standaloneKeybindingService)return console.warn("Cannot add keybinding because the editor is configured with an unrecognized KeybindingService"),C.None;const t=e.id,i=e.label,n=Ri.and(Ri.equals("editorId",this.getId()),Ri.deserialize(e.precondition)),o=e.keybindings,s=Ri.and(n,Ri.deserialize(e.keybindingContext)),r=e.contextMenuGroupId||null,a=e.contextMenuOrder||0,l=(t,...i)=>Promise.resolve(e.run(this,...i)),h=new v,c=this.getId()+":"+t;if(h.add(sn.registerCommand(c,l)),r&&h.add(En.appendMenuItem(Ln.EditorContext,{command:{id:c,title:i},when:n,group:r,order:a})),Array.isArray(o))for(const e of o)h.add(this._standaloneKeybindingService.addDynamicKeybinding(c,e,l,s));let d=new AC(c,i,i,n,l,this._contextKeyService);return this._actions[t]=d,h.add(b(()=>{delete this._actions[t]})),h}};YW=$W([jW(2,Et),jW(3,It),jW(4,on),jW(5,en),jW(6,FS),jW(7,pn),jW(8,cw),jW(9,dw)],YW);let ZW=class extends YW{constructor(e,t,i,n,o,s,r,a,l,h,c,d,u,g,p){const m=Object.assign({},t);zW(d,m,!1);const f=h.registerEditorContainer(e);"string"==typeof m.theme&&h.setTheme(m.theme);let _,b=m.model;delete m.model,super(e,m,n,o,s,r,a,h,c,u),this._contextViewService=l,this._configurationService=d,this._standaloneThemeService=h,this._register(i),this._register(f),void 0===b?(_=QW(g,p,m.value||"",m.language||"text/plain",void 0),this._ownsModel=!0):(_=b,this._ownsModel=!1),this._attachModel(_),_&&this._onDidChangeModel.fire({oldModelUrl:null,newModelUrl:_.uri})}dispose(){super.dispose()}updateOptions(e){zW(this._configurationService,e,!1),"string"==typeof e.theme&&this._standaloneThemeService.setTheme(e.theme),super.updateOptions(e)}_attachModel(e){super._attachModel(e),this._modelData&&this._contextViewService.setContainer(this._modelData.view.domNode.domNode)}_postDetachModelCleanup(e){super._postDetachModelCleanup(e),e&&this._ownsModel&&(e.dispose(),this._ownsModel=!1)}};ZW=$W([jW(3,Et),jW(4,It),jW(5,on),jW(6,en),jW(7,FS),jW(8,Ly),jW(9,jP),jW(10,cw),jW(11,zL),jW(12,dw),jW(13,At),jW(14,nT)],ZW);let XW=class extends By{constructor(e,t,i,n,o,s,r,a,l,h,c,d,u,g,p){const m=Object.assign({},t);zW(d,m,!0);const f=h.registerEditorContainer(e);"string"==typeof m.theme&&(m.theme=h.setTheme(m.theme)),super(e,m,{},p,a,o,n,l,h,c,u,g),this._contextViewService=r,this._configurationService=d,this._standaloneThemeService=h,this._register(i),this._register(f),this._contextViewService.setContainer(this._containerDomElement)}dispose(){super.dispose()}updateOptions(e){zW(this._configurationService,e,!0),"string"==typeof e.theme&&this._standaloneThemeService.setTheme(e.theme),super.updateOptions(e)}_createInnerEditor(e,t,i){return e.createInstance(YW,t,i)}getOriginalEditor(){return super.getOriginalEditor()}getModifiedEditor(){return super.getModifiedEditor()}addCommand(e,t,i){return this.getModifiedEditor().addCommand(e,t,i)}createContextKey(e,t){return this.getModifiedEditor().createContextKey(e,t)}addAction(e){return this.getModifiedEditor().addAction(e)}};function QW(e,t,i,n,o){if(i=i||"",!n){const n=i.indexOf("\n");let s=i;return-1!==n&&(s=i.substring(0,n)),JW(e,i,t.createByFilepathOrFirstLine(o||null,s),o)}return JW(e,i,t.create(n),o)}function JW(e,t,i,n){return e.createModel(t,i,n)}XW=$W([jW(3,Et),jW(4,en),jW(5,FS),jW(6,Ly),jW(7,Sy),jW(8,It),jW(9,jP),jW(10,cw),jW(11,zL),jW(12,Dy),jW(13,Iy),jW(14,ky)],XW);class eV{constructor(e){this._languageIdentifier=e}getId(){return this._languageIdentifier.language}}const tV="text/plain",iV="application/unknown";let nV=[],oV=[],sV=[];function rV(e,t=!1){const i=function n(e){return{id:e.id,mime:e.mime,filename:e.filename,extension:e.extension,filepattern:e.filepattern,firstline:e.firstline,userConfigured:e.userConfigured,filenameLowercase:e.filename?e.filename.toLowerCase():void 0,extensionLowercase:e.extension?e.extension.toLowerCase():void 0,filepatternLowercase:e.filepattern?e.filepattern.toLowerCase():void 0,filepatternOnPath:!!e.filepattern&&e.filepattern.indexOf(tt.sep)>=0}}(e);nV.push(i),i.userConfigured?sV.push(i):oV.push(i),t&&!i.userConfigured&&nV.forEach(e=>{e.mime===i.mime||e.userConfigured||(i.extension&&e.extension===i.extension&&console.warn(`Overwriting extension <<${i.extension}>> to now point to mime <<${i.mime}>>`),i.filename&&e.filename===i.filename&&console.warn(`Overwriting filename <<${i.filename}>> to now point to mime <<${i.mime}>>`),i.filepattern&&e.filepattern===i.filepattern&&console.warn(`Overwriting filepattern <<${i.filepattern}>> to now point to mime <<${i.mime}>>`),i.firstline&&e.firstline===i.firstline&&console.warn(`Overwriting firstline <<${i.firstline}>> to now point to mime <<${i.mime}>>`))})}function aV(e,t,i){let n=null,o=null,s=null;for(let r=i.length-1;r>=0;r--){const a=i[r];if(t===a.filenameLowercase){n=a;break}a.filepattern&&(!o||a.filepattern.length>o.filepattern.length)&&ml(a.filepatternLowercase,a.filepatternOnPath?e:t)&&(o=a),a.extension&&(!s||a.extension.length>s.extension.length)&&t.endsWith(a.extensionLowercase)&&(s=a)}return n?n.mime:o?o.mime:s?s.mime:null}const lV=Object.prototype.hasOwnProperty;class hV extends C{constructor(e=!0,t=!1){super(),this._onDidChange=this._register(new oe),this.onDidChange=this._onDidChange.event,this._warnOnOverwrite=t,this._nextLanguageId2=1,this._languageIdToLanguage=[],this._languageToLanguageId=Object.create(null),this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},e&&(this._initializeFromRegistry(),this._register(YR.onDidChangeLanguages(e=>this._initializeFromRegistry())))}_initializeFromRegistry(){this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={};const e=YR.getLanguages();this._registerLanguages(e)}_registerLanguages(e){for(const t of e)this._registerLanguage(t);this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},Object.keys(this._languages).forEach(e=>{let t=this._languages[e];t.name&&(this._nameMap[t.name]=t.identifier),t.aliases.forEach(e=>{this._lowercaseNameMap[e.toLowerCase()]=t.identifier}),t.mimetypes.forEach(e=>{this._mimeTypesMap[e]=t.identifier})}),an.as(lg.Configuration).registerOverrideIdentifiers(YR.getLanguages().map(e=>e.id)),this._onDidChange.fire()}_getLanguageId(e){if(this._languageToLanguageId[e])return this._languageToLanguageId[e];const t=this._nextLanguageId2++;return this._languageIdToLanguage[t]=e,this._languageToLanguageId[e]=t,t}_registerLanguage(e){const t=e.id;let i;if(lV.call(this._languages,t))i=this._languages[t];else{const e=this._getLanguageId(t);i={identifier:new wl(t,e),name:null,mimetypes:[],aliases:[],extensions:[],filenames:[],configurationFiles:[]},this._languages[t]=i}this._mergeLanguage(i,e)}_mergeLanguage(e,t){const i=t.id;let o=null;if(Array.isArray(t.mimetypes)&&t.mimetypes.length>0&&(e.mimetypes.push(...t.mimetypes),o=t.mimetypes[0]),o||e.mimetypes.push(o=`text/x-${i}`),Array.isArray(t.extensions)){e.extensions=t.configuration?t.extensions.concat(e.extensions):e.extensions.concat(t.extensions);for(let e of t.extensions)rV({id:i,mime:o,extension:e},this._warnOnOverwrite)}if(Array.isArray(t.filenames))for(let n of t.filenames)rV({id:i,mime:o,filename:n},this._warnOnOverwrite),e.filenames.push(n);if(Array.isArray(t.filenamePatterns))for(let e of t.filenamePatterns)rV({id:i,mime:o,filepattern:e},this._warnOnOverwrite);if("string"==typeof t.firstLine&&t.firstLine.length>0){let e=t.firstLine;"^"!==e.charAt(0)&&(e="^"+e);try{let t=new RegExp(e);(function s(e){return"^"!==e.source&&"^$"!==e.source&&"$"!==e.source&&"^\\s*$"!==e.source&&!(!e.exec("")||0!==e.lastIndex)})(t)||rV({id:i,mime:o,firstline:t},this._warnOnOverwrite)}catch(e){n(e)}}e.aliases.push(i);let r=null;if(void 0!==t.aliases&&Array.isArray(t.aliases)&&(r=0===t.aliases.length?[null]:t.aliases),null!==r)for(const t of r)t&&0!==t.length&&e.aliases.push(t);let a=null!==r&&r.length>0;if(a&&null===r[0]);else{let t=(a?r[0]:null)||i;!a&&e.name||(e.name=t)}t.configuration&&e.configurationFiles.push(t.configuration)}isRegisteredMode(e){return!!lV.call(this._mimeTypesMap,e)||lV.call(this._languages,e)}getModeIdForLanguageNameLowercase(e){return lV.call(this._lowercaseNameMap,e)?this._lowercaseNameMap[e].language:null}extractModeIds(e){return e?e.split(",").map(e=>e.trim()).map(e=>lV.call(this._mimeTypesMap,e)?this._mimeTypesMap[e].language:e).filter(e=>lV.call(this._languages,e)):[]}getLanguageIdentifier(e){if(e===Nh||0===e)return Ih;let t;if("string"==typeof e)t=e;else if(!(t=this._languageIdToLanguage[e]))return null;return lV.call(this._languages,t)?this._languages[t].identifier:null}getModeIdsFromFilepathOrFirstLine(e,t){if(!e&&!t)return[];let i=function n(e,t){let i;if(e)switch(e.scheme){case Cs.file:i=e.fsPath;break;case Cs.data:i=As.parseMetaData(e).get(As.META_DATA_LABEL);break;default:i=e.path}if(!i)return[iV];i=i.toLowerCase();const n=rt(i),o=aV(i,n,sV);if(o)return[o,tV];const s=aV(i,n,oV);if(s)return[s,tV];if(t){const e=function r(e){if(xi(e)&&(e=e.substr(1)),e.length>0)for(let t=nV.length-1;t>=0;t--){const i=nV[t];if(!i.firstline)continue;const n=e.match(i.firstline);if(n&&n.length>0)return i.mime}return null}(t);if(e)return[e,tV]}return[iV]}(e,t);return this.extractModeIds(i.join(","))}}class cV extends C{constructor(e,t){super(),this._onDidChange=this._register(new oe),this.onDidChange=this._onDidChange.event,this._selector=t,this.languageIdentifier=this._selector(),this._register(e(()=>this._evaluate()))}_evaluate(){let e=this._selector();e.id!==this.languageIdentifier.id&&(this.languageIdentifier=e,this._onDidChange.fire(this.languageIdentifier))}}class dV extends C{constructor(e=!1){super(),this._onDidCreateMode=this._register(new oe),this.onDidCreateMode=this._onDidCreateMode.event,this._onLanguagesMaybeChanged=this._register(new oe),this.onLanguagesMaybeChanged=this._onLanguagesMaybeChanged.event,this._instantiatedModes={},this._registry=this._register(new hV(!0,e)),this._register(this._registry.onDidChange(()=>this._onLanguagesMaybeChanged.fire()))}isRegisteredMode(e){return this._registry.isRegisteredMode(e)}getModeIdForLanguageName(e){return this._registry.getModeIdForLanguageNameLowercase(e)}getModeIdByFilepathOrFirstLine(e,t){return ra(this._registry.getModeIdsFromFilepathOrFirstLine(e,t),null)}getModeId(e){return ra(this._registry.extractModeIds(e),null)}getLanguageIdentifier(e){return this._registry.getLanguageIdentifier(e)}create(e){return new cV(this.onLanguagesMaybeChanged,()=>{const t=this.getModeId(e);return this._createModeAndGetLanguageIdentifier(t)})}createByFilepathOrFirstLine(e,t){return new cV(this.onLanguagesMaybeChanged,()=>{const i=this.getModeIdByFilepathOrFirstLine(e,t);return this._createModeAndGetLanguageIdentifier(i)})}_createModeAndGetLanguageIdentifier(e){const t=this.getLanguageIdentifier(e||"plaintext")||Ih;return this._getOrCreateMode(t.language),t}triggerMode(e){const t=this.getModeId(e);this._getOrCreateMode(t||"plaintext")}_getOrCreateMode(e){if(!this._instantiatedModes.hasOwnProperty(e)){let t=this.getLanguageIdentifier(e)||Ih;this._instantiatedModes[e]=new eV(t),this._onDidCreateMode.fire(this._instantiatedModes[e])}return this._instantiatedModes[e]}}class uV{constructor(e,t,i){this._legend=e,this._themeService=t,this._logService=i,this._hashTable=new pV,this._hasWarnedOverlappingTokens=!1}getMetadata(e,t,i){const n=this._hashTable.get(e,t,i.id);let o;if(n)o=n.metadata,this._logService.getLevel()===FM.Trace&&this._logService.trace(`SemanticTokensProviderStyling [CACHED] ${e} / ${t}: foreground ${yl.getForeground(o)}, fontStyle ${yl.getFontStyle(o).toString(2)}`);else{let n=this._legend.tokenTypes[e];const s=[];if(n){let e=t;for(let t=0;e>0&&t>=1;e>0&&this._logService.getLevel()===FM.Trace&&(this._logService.trace(`SemanticTokensProviderStyling: unknown token modifier index: ${t.toString(2)} for legend: ${JSON.stringify(this._legend.tokenModifiers)}`),s.push("not-in-legend"));const r=this._themeService.getColorTheme().getTokenStyleMetadata(n,s,i.language);void 0===r?o=2147483647:(o=0,void 0!==r.italic&&(o|=1|(r.italic?1:0)<<11),void 0!==r.bold&&(o|=2|(r.bold?2:0)<<11),void 0!==r.underline&&(o|=4|(r.underline?4:0)<<11),r.foreground&&(o|=8|r.foreground<<14),0===o&&(o=2147483647))}else this._logService.getLevel()===FM.Trace&&this._logService.trace(`SemanticTokensProviderStyling: unknown token type index: ${e} for legend: ${JSON.stringify(this._legend.tokenTypes)}`),o=2147483647,n="not-in-legend";this._hashTable.add(e,t,i.id,o),this._logService.getLevel()===FM.Trace&&this._logService.trace(`SemanticTokensProviderStyling ${e} (${n}) / ${t} (${s.join(" ")}): foreground ${yl.getForeground(o)}, fontStyle ${yl.getFontStyle(o).toString(2)}`)}return o}warnOverlappingSemanticTokens(e,t){this._hasWarnedOverlappingTokens||(this._hasWarnedOverlappingTokens=!0,console.warn(`Overlapping semantic tokens detected at lineNumber ${e}, column ${t}`))}}class gV{constructor(e,t,i,n){this.tokenTypeIndex=e,this.tokenModifierSet=t,this.languageId=i,this.metadata=n,this.next=null}}class pV{constructor(){this._elementsCount=0,this._currentLengthIndex=0,this._currentLength=pV._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1=this._growCount){const e=this._elements;this._currentLengthIndex++,this._currentLength=pV._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+10?t[0]:null}function CV(e){const t=eh.ordered(e);return t.length>0?t[0]:null}sn.registerCommand("_provideDocumentSemanticTokensLegend",(e,...t)=>fV(void 0,void 0,void 0,(function*(){const[i]=t;Ne(i instanceof mt);const n=e.get(At).getModel(i);if(!n)return;const o=vV(n);return o?o.getLegend():e.get(on).executeCommand("_provideDocumentRangeSemanticTokensLegend",i)}))),sn.registerCommand("_provideDocumentSemanticTokens",(e,...t)=>fV(void 0,void 0,void 0,(function*(){const[i]=t;Ne(i instanceof mt);const n=e.get(At).getModel(i);if(!n)return;const s=bV(n,null,Aa.None);if(!s)return e.get(on).executeCommand("_provideDocumentRangeSemanticTokens",i,n.getFullModelRange());const{provider:r,request:a}=s;let l;try{l=yield a}catch(e){return void o(e)}if(!l||!_V(l))return;const h=mV({id:0,type:"full",data:l.data});return l.resultId&&r.releaseDocumentSemanticTokens(l.resultId),h}))),sn.registerCommand("_provideDocumentRangeSemanticTokensLegend",(e,...t)=>fV(void 0,void 0,void 0,(function*(){const[i]=t;Ne(i instanceof mt);const n=e.get(At).getModel(i);if(!n)return;const o=CV(n);return o?o.getLegend():void 0}))),sn.registerCommand("_provideDocumentRangeSemanticTokens",(e,...t)=>fV(void 0,void 0,void 0,(function*(){const[i,n]=t;Ne(i instanceof mt),Ne(ro.isIRange(n));const s=e.get(At).getModel(i);if(!s)return;const r=CV(s);if(!r)return;let a;try{a=yield r.provideDocumentRangeSemanticTokens(s,ro.lift(n),Aa.None)}catch(e){return void o(e)}return a&&_V(a)?mV({id:0,type:"full",data:a.data}):void 0})));var wV=function(e,t){return function(i,n){t(i,n,e)}};function yV(e){return e.toString()}function SV(e){const t=new va,i=e.createSnapshot();let n;for(;n=i.read();)t.update(n);return t.digest()}class LV{constructor(e,t,i){this._modelEventListeners=new v,this.model=e,this._languageSelection=null,this._languageSelectionListener=null,this._modelEventListeners.add(e.onWillDispose(()=>t(e))),this._modelEventListeners.add(e.onDidChangeLanguage(t=>i(e,t)))}_disposeLanguageSelection(){this._languageSelectionListener&&(this._languageSelectionListener.dispose(),this._languageSelectionListener=null),this._languageSelection&&(this._languageSelection.dispose(),this._languageSelection=null)}dispose(){this._modelEventListeners.dispose(),this._disposeLanguageSelection()}setLanguage(e){this._disposeLanguageSelection(),this._languageSelection=e,this._languageSelectionListener=this._languageSelection.onDidChange(()=>this.model.setMode(e.languageIdentifier)),this.model.setMode(e.languageIdentifier)}}const DV=U||H?1:2;class EV{constructor(e,t,i,n,o,s,r,a){this.uri=e,this.initialUndoRedoSnapshot=t,this.time=i,this.sharesUndoRedoStack=n,this.heapSize=o,this.sha1=s,this.versionId=r,this.alternativeVersionId=a}}let xV=class e extends C{constructor(e,t,i,n,o){super(),this._configurationService=e,this._resourcePropertiesService=t,this._themeService=i,this._logService=n,this._undoRedoService=o,this._onModelAdded=this._register(new oe),this.onModelAdded=this._onModelAdded.event,this._onModelRemoved=this._register(new oe),this.onModelRemoved=this._onModelRemoved.event,this._onModelModeChanged=this._register(new oe),this.onModelModeChanged=this._onModelModeChanged.event,this._modelCreationOptionsByLanguageAndResource=Object.create(null),this._models={},this._disposedModels=new Map,this._disposedModelsHeapSize=0,this._semanticStyling=this._register(new TV(this._themeService,this._logService)),this._register(this._configurationService.onDidChangeConfiguration(()=>this._updateModelOptions())),this._updateModelOptions(),this._register(new IV(this,this._themeService,this._configurationService,this._semanticStyling))}static _readModelOptions(e,t){let i=4;if(e.editor&&void 0!==e.editor.tabSize){const t=parseInt(e.editor.tabSize,10);isNaN(t)||(i=t),i<1&&(i=1)}let n=i;if(e.editor&&void 0!==e.editor.indentSize&&"tabSize"!==e.editor.indentSize){const t=parseInt(e.editor.indentSize,10);isNaN(t)||(n=t),n<1&&(n=1)}let o=!0;e.editor&&void 0!==e.editor.insertSpaces&&(o="false"!==e.editor.insertSpaces&&Boolean(e.editor.insertSpaces));let s=DV;const r=e.eol;"\r\n"===r?s=2:"\n"===r&&(s=1);let a=!0;e.editor&&void 0!==e.editor.trimAutoWhitespace&&(a="false"!==e.editor.trimAutoWhitespace&&Boolean(e.editor.trimAutoWhitespace));let l=!0;e.editor&&void 0!==e.editor.detectIndentation&&(l="false"!==e.editor.detectIndentation&&Boolean(e.editor.detectIndentation));let h=!0;return e.editor&&void 0!==e.editor.largeFileOptimizations&&(h="false"!==e.editor.largeFileOptimizations&&Boolean(e.editor.largeFileOptimizations)),{isForSimpleWidget:t,tabSize:i,indentSize:n,insertSpaces:o,detectIndentation:l,defaultEOL:s,trimAutoWhitespace:a,largeFileOptimizations:h}}_getEOL(e,t){if(e)return this._resourcePropertiesService.getEOL(e,t);const i=this._configurationService.getValue("files.eol",{overrideIdentifier:t});return i&&"auto"!==i?i:3===Z||2===Z?"\n":"\r\n"}_shouldRestoreUndoStack(){const e=this._configurationService.getValue("files.restoreUndoStack");return"boolean"!=typeof e||e}getCreationOptions(t,i,n){let o=this._modelCreationOptionsByLanguageAndResource[t+i];if(!o){const s=this._configurationService.getValue("editor",{overrideIdentifier:t,resource:i}),r=this._getEOL(i,t);o=e._readModelOptions({editor:s,eol:r},n),this._modelCreationOptionsByLanguageAndResource[t+i]=o}return o}_updateModelOptions(){const t=this._modelCreationOptionsByLanguageAndResource;this._modelCreationOptionsByLanguageAndResource=Object.create(null);const i=Object.keys(this._models);for(let n=0,o=i.length;ne){const t=[];for(this._disposedModels.forEach(e=>{e.sharesUndoRedoStack||t.push(e)}),t.sort((e,t)=>e.time-t.time);t.length>0&&this._disposedModelsHeapSize>e;){const e=t.shift();this._removeDisposedModel(e.uri),null!==e.initialUndoRedoSnapshot&&this._undoRedoService.restoreSnapshot(e.initialUndoRedoSnapshot)}}}_createModelData(e,t,i,n){const o=this.getCreationOptions(t.language,i,n),s=new wc(e,o,t,i,this._undoRedoService);if(i&&this._disposedModels.has(yV(i))){const e=this._removeDisposedModel(i),t=this._undoRedoService.getElements(i),n=SV(s)===e.sha1;if(n||e.sharesUndoRedoStack){for(const e of t.past)Bs(e)&&e.matchesResource(i)&&e.setModel(s);for(const e of t.future)Bs(e)&&e.matchesResource(i)&&e.setModel(s);this._undoRedoService.setElementsValidFlag(i,!0,e=>Bs(e)&&e.matchesResource(i)),n&&(s._overwriteVersionId(e.versionId),s._overwriteAlternativeVersionId(e.alternativeVersionId),s._overwriteInitialUndoRedoSnapshot(e.initialUndoRedoSnapshot))}else null!==e.initialUndoRedoSnapshot&&this._undoRedoService.restoreSnapshot(e.initialUndoRedoSnapshot)}const r=yV(s.uri);if(this._models[r])throw new Error("ModelService: Cannot add model because it already exists!");const a=new LV(s,e=>this._onWillDispose(e),(e,t)=>this._onDidChangeLanguage(e,t));return this._models[r]=a,a}createModel(e,t,i,n=!1){let o;return t?(o=this._createModelData(e,t.languageIdentifier,i,n),this.setMode(o.model,t)):o=this._createModelData(e,XR,i,n),this._onModelAdded.fire(o.model),o.model}setMode(e,t){if(!t)return;const i=this._models[yV(e.uri)];i&&i.setLanguage(t)}getModels(){const e=[],t=Object.keys(this._models);for(let i=0,n=t.length;i0||e.future.length>0){for(const i of e.past)Bs(i)&&i.matchesResource(t.uri)&&(s=!0,r+=i.heapSize(t.uri),i.setModel(t.uri));for(const i of e.future)Bs(i)&&i.matchesResource(t.uri)&&(s=!0,r+=i.heapSize(t.uri),i.setModel(t.uri))}}const l=e.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK;if(s)if(!o&&r>l){const e=n.model.getInitialUndoRedoSnapshot();null!==e&&this._undoRedoService.restoreSnapshot(e)}else this._ensureDisposedModelsHeapSize(l-r),this._undoRedoService.setElementsValidFlag(t.uri,!1,e=>Bs(e)&&e.matchesResource(t.uri)),this._insertDisposedModel(new EV(t.uri,n.model.getInitialUndoRedoSnapshot(),Date.now(),o,r,SV(t),t.getVersionId(),t.getAlternativeVersionId()));else if(!o){const e=n.model.getInitialUndoRedoSnapshot();null!==e&&this._undoRedoService.restoreSnapshot(e)}delete this._models[i],n.dispose(),delete this._modelCreationOptionsByLanguageAndResource[t.getLanguageIdentifier().language+t.uri],this._onModelRemoved.fire(t)}_onDidChangeLanguage(t,i){const n=i.oldLanguage,o=t.getLanguageIdentifier().language,s=this.getCreationOptions(n,t.uri,t.isForSimpleWidget),r=this.getCreationOptions(o,t.uri,t.isForSimpleWidget);e._setModelOptionsForModel(t,r,s),this._onModelModeChanged.fire({model:t,oldModeId:n})}};xV.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK=20971520,xV=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([wV(0,zL),wV(1,UM),wV(2,pn),wV(3,PM),wV(4,gI)],xV);const kV="editor.semanticHighlighting";function NV(e,t,i){var n;const o=null===(n=i.getValue(kV,{overrideIdentifier:e.getLanguageIdentifier().language,resource:e.uri}))||void 0===n?void 0:n.enabled;return"boolean"==typeof o?o:t.getColorTheme().semanticHighlighting}class IV extends C{constructor(e,t,i,n){super(),this._watchers=Object.create(null),this._semanticStyling=n;const o=e=>{this._watchers[e.uri.toString()]=new MV(e,t,this._semanticStyling)},s=(e,t)=>{t.dispose(),delete this._watchers[e.uri.toString()]},r=()=>{for(let n of e.getModels()){const e=this._watchers[n.uri.toString()];NV(n,t,i)?e||o(n):e&&s(n,e)}};this._register(e.onModelAdded(e=>{NV(e,t,i)&&o(e)})),this._register(e.onModelRemoved(e=>{const t=this._watchers[e.uri.toString()];t&&s(e,t)})),this._register(i.onDidChangeConfiguration(e=>{e.affectsConfiguration(kV)&&r()})),this._register(t.onDidColorThemeChange(r))}}class TV extends C{constructor(e,t){super(),this._themeService=e,this._logService=t,this._caches=new WeakMap,this._register(this._themeService.onDidColorThemeChange(()=>{this._caches=new WeakMap}))}get(e){return this._caches.has(e)||this._caches.set(e,new uV(e.getLegend(),this._themeService,this._logService)),this._caches.get(e)}}class AV{constructor(e,t,i){this._provider=e,this.resultId=t,this.data=i}dispose(){this._provider.releaseDocumentSemanticTokens(this.resultId)}}class MV extends C{constructor(e,t,i){super(),this._isDisposed=!1,this._model=e,this._semanticStyling=i,this._fetchDocumentSemanticTokens=this._register(new $a(()=>this._fetchDocumentSemanticTokensNow(),MV.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY)),this._currentDocumentResponse=null,this._currentDocumentRequestCancellationTokenSource=null,this._documentProvidersChangeListeners=[],this._register(this._model.onDidChangeContent(()=>{this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule()}));const n=()=>{f(this._documentProvidersChangeListeners),this._documentProvidersChangeListeners=[];for(const t of Jl.all(e))"function"==typeof t.onDidChange&&this._documentProvidersChangeListeners.push(t.onDidChange(()=>this._fetchDocumentSemanticTokens.schedule(0)))};n(),this._register(Jl.onDidChange(()=>{n(),this._fetchDocumentSemanticTokens.schedule()})),this._register(t.onDidColorThemeChange(e=>{this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule()})),this._fetchDocumentSemanticTokens.schedule(0)}dispose(){this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),this._setDocumentSemanticTokens(null,null,null,[]),this._isDisposed=!0,super.dispose()}_fetchDocumentSemanticTokensNow(){if(this._currentDocumentRequestCancellationTokenSource)return;const e=new Oa,t=bV(this._model,this._currentDocumentResponse&&this._currentDocumentResponse.resultId||null,e.token);if(!t)return void(this._currentDocumentResponse&&this._model.setSemanticTokens(null,!1));const{provider:i,request:o}=t;this._currentDocumentRequestCancellationTokenSource=e;const s=[],r=this._model.onDidChangeContent(e=>{s.push(e)}),l=this._semanticStyling.get(i);o.then(e=>{this._currentDocumentRequestCancellationTokenSource=null,r.dispose(),this._setDocumentSemanticTokens(i,e||null,l,s)},e=>{e&&(a(e)||"string"==typeof e.message&&-1!==e.message.indexOf("busy"))||n(e),this._currentDocumentRequestCancellationTokenSource=null,r.dispose(),s.length>0&&(this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule())})}static _copy(e,t,i,n,o){for(let s=0;s{n.length>0&&!this._fetchDocumentSemanticTokens.isScheduled()&&this._fetchDocumentSemanticTokens.schedule()};if(this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._isDisposed)e&&t&&e.releaseDocumentSemanticTokens(t.resultId);else if(e&&i){if(!t)return this._model.setSemanticTokens(null,!0),void s();if(function r(e){return e&&Array.isArray(e.edits)}(t)){if(!o)return void this._model.setSemanticTokens(null,!0);if(0===t.edits.length)t={resultId:t.resultId,data:o.data};else{let e=0;for(const i of t.edits)e+=(i.data?i.data.length:0)-i.deleteCount;const i=o.data,n=new Uint32Array(i.length+e);let s=i.length,r=n.length;for(let e=t.edits.length-1;e>=0;e--){const o=t.edits[e],a=s-(o.start+o.deleteCount);a>0&&(MV._copy(i,s-a,n,r-a,a),r-=a),o.data&&(MV._copy(o.data,0,n,r-o.data.length,o.data.length),r-=o.data.length),s=o.start}s>0&&MV._copy(i,0,n,0,s),t={resultId:t.resultId,data:n}}}if(_V(t)){this._currentDocumentResponse=new AV(e,t.resultId,t.data);const o=function a(e,t,i){const n=e.data,o=e.data.length/5|0,s=Math.max(Math.ceil(o/1024),400),r=[];let a=0,l=1,h=0;for(;ae&&0===n[5*t];)t--;if(t-1===e){let e=c;for(;e+1c&&(t.warnOverlappingSemanticTokens(r,c+1),m0)for(const e of n)for(const t of o)for(const i of e.changes)t.applyEdit(i.range,i.text);this._model.setSemanticTokens(o,!0)}else this._model.setSemanticTokens(null,!0);s()}else this._model.setSemanticTokens(null,!1)}}MV.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY=300;class OV extends C{constructor(){super(),this._onCodeEditorAdd=this._register(new oe),this.onCodeEditorAdd=this._onCodeEditorAdd.event,this._onCodeEditorRemove=this._register(new oe),this.onCodeEditorRemove=this._onCodeEditorRemove.event,this._onDiffEditorAdd=this._register(new oe),this._onDiffEditorRemove=this._register(new oe),this._onDecorationTypeRegistered=this._register(new oe),this._modelProperties=new Map,this._codeEditors=Object.create(null),this._diffEditors=Object.create(null)}addCodeEditor(e){this._codeEditors[e.getId()]=e,this._onCodeEditorAdd.fire(e)}removeCodeEditor(e){delete this._codeEditors[e.getId()]&&this._onCodeEditorRemove.fire(e)}listCodeEditors(){return Object.keys(this._codeEditors).map(e=>this._codeEditors[e])}addDiffEditor(e){this._diffEditors[e.getId()]=e,this._onDiffEditorAdd.fire(e)}removeDiffEditor(e){delete this._diffEditors[e.getId()]&&this._onDiffEditorRemove.fire(e)}listDiffEditors(){return Object.keys(this._diffEditors).map(e=>this._diffEditors[e])}getFocusedCodeEditor(){let e=null;const t=this.listCodeEditors();for(const i of t){if(i.hasTextFocus())return i;i.hasWidgetFocus()&&(e=i)}return e}setModelProperty(e,t,i){const n=e.toString();let o;this._modelProperties.has(n)?o=this._modelProperties.get(n):(o=new Map,this._modelProperties.set(n,o)),o.set(t,i)}getModelProperty(e,t){const i=e.toString();if(this._modelProperties.has(i))return this._modelProperties.get(i).get(t)}}class RV{constructor(e,t,i){this._parent=e,this._editorId=t,this._styleSheet=i,this._refCount=0}ref(){this._refCount++}unref(){var e;this._refCount--,0===this._refCount&&(null===(e=this._styleSheet.parentNode)||void 0===e||e.removeChild(this._styleSheet),this._parent._removeEditorStyleSheets(this._editorId))}insertRule(e,t){this._styleSheet.sheet.insertRule(e,t)}removeRulesContainingSelector(e){xu(e,this._styleSheet)}}class PV{constructor(e){this._styleSheet=e}ref(){}unref(){}insertRule(e,t){this._styleSheet.sheet.insertRule(e,t)}removeRulesContainingSelector(e){xu(e,this._styleSheet)}}let FV=class extends OV{constructor(e,t=null){super(),this._decorationOptionProviders=new Map,this._editorStyleSheets=new Map,this._globalStyleSheet=t||null,this._themeService=e}_getOrCreateGlobalStyleSheet(){return this._globalStyleSheet||(this._globalStyleSheet=new PV(Su())),this._globalStyleSheet}_getOrCreateStyleSheet(e){if(!e)return this._getOrCreateGlobalStyleSheet();const t=e.getContainerDomNode();if(!Cu(t))return this._getOrCreateGlobalStyleSheet();const i=e.getId();if(!this._editorStyleSheets.has(i)){const e=new RV(this,i,Su(t));this._editorStyleSheets.set(i,e)}return this._editorStyleSheets.get(i)}_removeEditorStyleSheets(e){this._editorStyleSheets.delete(e)}registerDecorationType(e,t,i,n){let o=this._decorationOptionProviders.get(e);if(!o){const s=this._getOrCreateStyleSheet(n),r={styleSheet:s,key:e,parentTypeKey:i,options:t||Object.create(null)};o=i?new BV(this._themeService,s,r):new WV(this._themeService,s,r),this._decorationOptionProviders.set(e,o),this._onDecorationTypeRegistered.fire(e)}o.refCount++}removeDecorationType(e){const t=this._decorationOptionProviders.get(e);t&&(t.refCount--,t.refCount<=0&&(this._decorationOptionProviders.delete(e),t.dispose(),this.listCodeEditors().forEach(t=>t.removeDecorations(e))))}resolveDecorationOptions(e,t){const i=this._decorationOptionProviders.get(e);if(!i)throw new Error("Unknown decoration type key: "+e);return i.getOptions(this,t)}};FV=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,0)}}(0,pn)],FV);class BV{constructor(e,t,i){this._styleSheet=t,this._styleSheet.ref(),this._parentTypeKey=i.parentTypeKey,this.refCount=0,this._beforeContentRules=new zV(3,i,e),this._afterContentRules=new zV(4,i,e)}getOptions(e,t){const i=e.resolveDecorationOptions(this._parentTypeKey,!0);return this._beforeContentRules&&(i.beforeContentClassName=this._beforeContentRules.className),this._afterContentRules&&(i.afterContentClassName=this._afterContentRules.className),i}dispose(){this._beforeContentRules&&(this._beforeContentRules.dispose(),this._beforeContentRules=null),this._afterContentRules&&(this._afterContentRules.dispose(),this._afterContentRules=null),this._styleSheet.unref()}}class WV{constructor(e,t,i){this._disposables=new v,this._styleSheet=t,this._styleSheet.ref(),this.refCount=0;const n=t=>{const n=new zV(t,i,e);if(this._disposables.add(n),n.hasContent)return n.className};this.className=n(0);const o=(t=>{const n=new zV(1,i,e);return this._disposables.add(n),n.hasContent?{className:n.className,hasLetterSpacing:n.hasLetterSpacing}:null})();o&&(this.inlineClassName=o.className,this.inlineClassNameAffectsLetterSpacing=o.hasLetterSpacing),this.beforeContentClassName=n(3),this.afterContentClassName=n(4),this.glyphMarginClassName=n(2);const s=i.options;this.isWholeLine=Boolean(s.isWholeLine),this.stickiness=s.rangeBehavior;const r=s.light&&s.light.overviewRulerColor||s.overviewRulerColor,a=s.dark&&s.dark.overviewRulerColor||s.overviewRulerColor;void 0===r&&void 0===a||(this.overviewRuler={color:r||a,darkColor:a||r,position:s.overviewRulerLane||$o.Center})}getOptions(e,t){return t?{inlineClassName:this.inlineClassName,beforeContentClassName:this.beforeContentClassName,afterContentClassName:this.afterContentClassName,className:this.className,glyphMarginClassName:this.glyphMarginClassName,isWholeLine:this.isWholeLine,overviewRuler:this.overviewRuler,stickiness:this.stickiness}:this}dispose(){this._disposables.dispose(),this._styleSheet.unref()}}const VV={color:"color:{0} !important;",opacity:"opacity:{0};",backgroundColor:"background-color:{0};",outline:"outline:{0};",outlineColor:"outline-color:{0};",outlineStyle:"outline-style:{0};",outlineWidth:"outline-width:{0};",border:"border:{0};",borderColor:"border-color:{0};",borderRadius:"border-radius:{0};",borderSpacing:"border-spacing:{0};",borderStyle:"border-style:{0};",borderWidth:"border-width:{0};",fontStyle:"font-style:{0};",fontWeight:"font-weight:{0};",fontSize:"font-size:{0};",fontFamily:"font-family:{0};",textDecoration:"text-decoration:{0};",cursor:"cursor:{0};",letterSpacing:"letter-spacing:{0};",gutterIconPath:"background:{0} center center no-repeat;",gutterIconSize:"background-size:{0};",contentText:"content:'{0}';",contentIconPath:"content:{0};",margin:"margin:{0};",padding:"padding:{0};",width:"width:{0};",height:"height:{0};"};class zV{constructor(e,t,i){this._theme=i.getColorTheme(),this._ruleType=e,this._providerArgs=t,this._usesThemeColors=!1,this._hasContent=!1,this._hasLetterSpacing=!1;let n=HV.getClassName(this._providerArgs.key,e);this._providerArgs.parentTypeKey&&(n=n+" "+HV.getClassName(this._providerArgs.parentTypeKey,e)),this._className=n,this._unThemedSelector=HV.getSelector(this._providerArgs.key,this._providerArgs.parentTypeKey,e),this._buildCSS(),this._themeListener=this._usesThemeColors?i.onDidColorThemeChange(e=>{this._theme=i.getColorTheme(),this._removeCSS(),this._buildCSS()}):null}dispose(){this._hasContent&&(this._removeCSS(),this._hasContent=!1),this._themeListener&&(this._themeListener.dispose(),this._themeListener=null)}get hasContent(){return this._hasContent}get hasLetterSpacing(){return this._hasLetterSpacing}get className(){return this._className}_buildCSS(){const e=this._providerArgs.options;let t,i,n;switch(this._ruleType){case 0:t=this.getCSSTextForModelDecorationClassName(e),i=this.getCSSTextForModelDecorationClassName(e.light),n=this.getCSSTextForModelDecorationClassName(e.dark);break;case 1:t=this.getCSSTextForModelDecorationInlineClassName(e),i=this.getCSSTextForModelDecorationInlineClassName(e.light),n=this.getCSSTextForModelDecorationInlineClassName(e.dark);break;case 2:t=this.getCSSTextForModelDecorationGlyphMarginClassName(e),i=this.getCSSTextForModelDecorationGlyphMarginClassName(e.light),n=this.getCSSTextForModelDecorationGlyphMarginClassName(e.dark);break;case 3:t=this.getCSSTextForModelDecorationContentClassName(e.before),i=this.getCSSTextForModelDecorationContentClassName(e.light&&e.light.before),n=this.getCSSTextForModelDecorationContentClassName(e.dark&&e.dark.before);break;case 4:t=this.getCSSTextForModelDecorationContentClassName(e.after),i=this.getCSSTextForModelDecorationContentClassName(e.light&&e.light.after),n=this.getCSSTextForModelDecorationContentClassName(e.dark&&e.dark.after);break;default:throw new Error("Unknown rule type: "+this._ruleType)}const o=this._providerArgs.styleSheet;let s=!1;t.length>0&&(o.insertRule(`${this._unThemedSelector} {${t}}`,0),s=!0),i.length>0&&(o.insertRule(`.vs${this._unThemedSelector} {${i}}`,0),s=!0),n.length>0&&(o.insertRule(`.vs-dark${this._unThemedSelector}, .hc-black${this._unThemedSelector} {${n}}`,0),s=!0),this._hasContent=s}_removeCSS(){this._providerArgs.styleSheet.removeRulesContainingSelector(this._unThemedSelector)}getCSSTextForModelDecorationClassName(e){if(!e)return"";const t=[];return this.collectCSSText(e,["backgroundColor"],t),this.collectCSSText(e,["outline","outlineColor","outlineStyle","outlineWidth"],t),this.collectBorderSettingsCSSText(e,t),t.join("")}getCSSTextForModelDecorationInlineClassName(e){if(!e)return"";const t=[];return this.collectCSSText(e,["fontStyle","fontWeight","textDecoration","cursor","color","opacity","letterSpacing"],t),e.letterSpacing&&(this._hasLetterSpacing=!0),t.join("")}getCSSTextForModelDecorationContentClassName(e){if(!e)return"";const t=[];if(void 0!==e){if(this.collectBorderSettingsCSSText(e,t),void 0!==e.contentIconPath&&t.push(Ut(VV.contentIconPath,Ku(mt.revive(e.contentIconPath)))),"string"==typeof e.contentText){const i=e.contentText.match(/^.*$/m)[0].replace(/['\\]/g,"\\$&");t.push(Ut(VV.contentText,i))}this.collectCSSText(e,["fontStyle","fontWeight","fontSize","fontFamily","textDecoration","color","opacity","backgroundColor","margin","padding"],t),this.collectCSSText(e,["width","height"],t)&&t.push("display:inline-block;")}return t.join("")}getCSSTextForModelDecorationGlyphMarginClassName(e){if(!e)return"";const t=[];return void 0!==e.gutterIconPath&&(t.push(Ut(VV.gutterIconPath,Ku(mt.revive(e.gutterIconPath)))),void 0!==e.gutterIconSize&&t.push(Ut(VV.gutterIconSize,e.gutterIconSize))),t.join("")}collectBorderSettingsCSSText(e,t){return!!this.collectCSSText(e,["border","borderColor","borderRadius","borderSpacing","borderStyle","borderWidth"],t)&&(t.push(Ut("box-sizing: border-box;")),!0)}collectCSSText(e,t,i){const n=i.length;for(let n of t){const t=this.resolveValue(e[n]);"string"==typeof t&&i.push(Ut(VV[n],t))}return i.length!==n}resolveValue(e){if(function t(e){return e&&"string"==typeof e.id}(e)){this._usesThemeColors=!0;const t=this._theme.getColor(e.id);return t?t.toString():"transparent"}return e}}class HV{static getClassName(e,t){return"ced-"+e+"-"+t}static getSelector(e,t,i){let n=".monaco-editor ."+this.getClassName(e,i);return t&&(n=n+"."+this.getClassName(t,i)),3===i?n+="::before":4===i&&(n+="::after"),n}}class UV extends FV{getActiveCodeEditor(){return null}openCodeEditor(e,t,i){return t?Promise.resolve(this.doOpenEditor(t,e)):Promise.resolve(null)}doOpenEditor(e,t){if(!this.findModel(e,t.resource)){if(t.resource){const i=t.resource.scheme;if(i===Cs.http||i===Cs.https)return Uu(t.resource.toString()),e}return null}const i=t.options?t.options.selection:null;if(i)if("number"==typeof i.endLineNumber&&"number"==typeof i.endColumn)e.setSelection(i),e.revealRangeInCenter(i,1);else{const t={lineNumber:i.startLineNumber,column:i.startColumn};e.setPosition(t),e.revealPositionInCenter(t,1)}return e}findModel(e,t){const i=e.getModel();return i&&i.uri.toString()!==t.toString()?null:i}}class KV{constructor(e,t,i,n,o){this.token=e,this.index=t,this.fontStyle=i,this.foreground=n,this.background=o}}const $V=/^#?([0-9A-Fa-f]{6})([0-9A-Fa-f]{2})?$/;class jV{constructor(){this._lastColorId=0,this._id2color=[],this._color2id=new Map}getId(e){if(null===e)return 0;const t=e.match($V);if(!t)throw new Error("Illegal value for token color: "+e);e=t[1].toUpperCase();let i=this._color2id.get(e);return i||(i=++this._lastColorId,this._color2id.set(e,i),this._id2color[i]=uc.fromHex("#"+e),i)}getColorMap(){return this._id2color.slice(0)}}class qV{constructor(e,t){this._colorMap=e,this._root=t,this._cache=new Map}static createFromRawTokenTheme(e,t){return this.createFromParsedTokenTheme(function i(e){if(!e||!Array.isArray(e))return[];let t=[],i=0;for(let n=0,o=e.length;n{let i=function n(e,t){return et?1:0}(e.token,t.token);return 0!==i?i:e.index-t.index});let i=0,n="000000",o="ffffff";for(;e.length>=1&&""===e[0].token;){let t=e.shift();-1!==t.fontStyle&&(i=t.fontStyle),null!==t.foreground&&(n=t.foreground),null!==t.background&&(o=t.background)}let s=new jV;for(let e of t)s.getId(e);let r=s.getId(n),a=s.getId(o),l=new YV(i,r,a),h=new ZV(l);for(let t=0,i=e.length;t>>0)}return(i|e<<0)>>>0}}const GV=/\b(comment|string|regex|regexp)\b/;class YV{constructor(e,t,i){this._fontStyle=e,this._foreground=t,this._background=i,this.metadata=(this._fontStyle<<11|this._foreground<<14|this._background<<23)>>>0}clone(){return new YV(this._fontStyle,this._foreground,this._background)}acceptOverwrite(e,t,i){-1!==e&&(this._fontStyle=e),0!==t&&(this._foreground=t),0!==i&&(this._background=i),this.metadata=(this._fontStyle<<11|this._foreground<<14|this._background<<23)>>>0}}class ZV{constructor(e){this._mainRule=e,this._children=new Map}match(e){if(""===e)return this._mainRule;let t,i,n=e.indexOf(".");-1===n?(t=e,i=""):(t=e.substring(0,n),i=e.substring(n+1));let o=this._children.get(t);return void 0!==o?o.match(i):this._mainRule}insert(e,t,i,n){if(""===e)return void this._mainRule.acceptOverwrite(t,i,n);let o,s,r=e.indexOf(".");-1===r?(o=e,s=""):(o=e.substring(0,r),s=e.substring(r+1));let a=this._children.get(o);void 0===a&&(a=new ZV(this._mainRule.clone()),this._children.set(o,a)),a.insert(s,t,i,n)}}function XV(e,t=""){let i=[];for(let n=1,o=e.length;n0?(this.id=az(e)?e:i+" "+e,this.themeName=e):(this.id=i,this.themeName=i),this.colors=null,this.defaultColors=Object.create(null),this._tokenTheme=null}get base(){return this.themeData.base}notifyBaseUpdated(){this.themeData.inherit&&(this.colors=null,this._tokenTheme=null)}getColors(){if(!this.colors){const e=new Map;for(let t in this.themeData.colors)e.set(t,uc.fromHex(this.themeData.colors[t]));if(this.themeData.inherit){let t=lz(this.themeData.base);for(let i in t.colors)e.has(i)||e.set(i,uc.fromHex(t.colors[i]))}this.colors=e}return this.colors}getColor(e,t){return this.getColors().get(e)||(!1!==t?this.getDefault(e):void 0)}getDefault(e){let t=this.defaultColors[e];return t||(t=oz.resolveDefaultColor(e,this),this.defaultColors[e]=t,t)}defines(e){return Object.prototype.hasOwnProperty.call(this.getColors(),e)}get type(){switch(this.base){case tz:return ln.LIGHT;case nz:return ln.HIGH_CONTRAST;default:return ln.DARK}}get tokenTheme(){if(!this._tokenTheme){let e=[],t=[];if(this.themeData.inherit){let i=lz(this.themeData.base);e=i.rules,i.encodedTokensColors&&(t=i.encodedTokensColors)}e=e.concat(this.themeData.rules),this.themeData.encodedTokensColors&&(t=this.themeData.encodedTokensColors),this._tokenTheme=qV.createFromRawTokenTheme(e,t)}return this._tokenTheme}getTokenStyleMetadata(e,t,i){const n=this.tokenTheme._match([e].concat(t).join(".")).metadata,o=yl.getForeground(n),s=yl.getFontStyle(n);return{foreground:o,italic:Boolean(1&s),bold:Boolean(2&s),underline:Boolean(4&s)}}}function az(e){return e===tz||e===iz||e===nz}function lz(e){switch(e){case tz:return QV;case iz:return JV;case nz:return ez}}function hz(e){let t=lz(e);return new rz(e,t)}class cz extends C{constructor(){super(),this._onColorThemeChange=this._register(new oe),this.onDidColorThemeChange=this._onColorThemeChange.event,this._environment=Object.create(null),this._knownThemes=new Map,this._knownThemes.set(tz,hz(tz)),this._knownThemes.set(iz,hz(iz)),this._knownThemes.set(nz,hz(nz));const e=function t(){const e=new oe,t=function i(){return hy}();return t.onDidChange(()=>e.fire()),{onDidChange:e.event,getCSS(){const e={},i=i=>{let n=i.defaults;for(;fn.isThemeIcon(n);){const e=t.getIcon(n.id);if(!e)return;n=e.defaults}const o=n.fontId;if(o){const s=t.getIconFont(o);if(s)return e[o]=s,`.codicon-${i.id}:before { content: '${n.fontCharacter}'; font-family: ${$u(o)}; }`}return`.codicon-${i.id}:before { content: '${n.fontCharacter}'; }`},n=[];for(let e of t.getIcons()){const t=i(e);t&&n.push(t)}for(let t in e){const i=e[t].definition.src.map(e=>`${Ku(e.location)} format('${e.format}')`).join(", ");n.push(`@font-face { src: ${i}; font-family: ${$u(t)}; }`)}return n.join("\n")}}}();this._codiconCSS=e.getCSS(),this._themeCSS="",this._allCSS=`${this._codiconCSS}\n${this._themeCSS}`,this._globalStyleElement=null,this._styleElements=[],this._colorMapOverride=null,this.setTheme(tz),e.onDidChange(()=>{this._codiconCSS=e.getCSS(),this._updateCSS()})}registerEditorContainer(e){return Cu(e)?this._registerShadowDomContainer(e):this._registerRegularEditorContainer()}_registerRegularEditorContainer(){return this._globalStyleElement||(this._globalStyleElement=Su(),this._globalStyleElement.className="monaco-colors",this._globalStyleElement.textContent=this._allCSS,this._styleElements.push(this._globalStyleElement)),C.None}_registerShadowDomContainer(e){const t=Su(e);return t.className="monaco-colors",t.textContent=this._allCSS,this._styleElements.push(t),{dispose:()=>{for(let e=0;e{t.base===e&&t.notifyBaseUpdated()}),this._theme&&this._theme.themeName===e&&this.setTheme(e)}getColorTheme(){return this._theme}setColorMapOverride(e){this._colorMapOverride=e,this._updateThemeOrColorMap()}setTheme(e){let t;return t=this._knownThemes.has(e)?this._knownThemes.get(e):this._knownThemes.get(tz),this._theme===t?t.id:(this._theme=t,this._updateThemeOrColorMap(),t.id)}_updateThemeOrColorMap(){let e=[],t={},i={addRule:i=>{t[i]||(e.push(i),t[i]=!0)}};sz.getThemingParticipants().forEach(e=>e(this._theme,i,this._environment));const n=this._colorMapOverride||this._theme.tokenTheme.getColorMap();let o=monaco.languages.getLanguages();for(let t=0;t{t instanceof iW&&i.addRule(XV(n,`_${s}_`)),this._themeCSS=e.join("\n"),this._updateCSS()})}this._themeCSS=e.join("\n"),this._updateCSS(),th.setColorMap(n),this._onColorThemeChange.fire(this._theme)}_updateCSS(){this._allCSS=`${this._codiconCSS}\n${this._themeCSS}`,this._styleElements.forEach(e=>e.textContent=this._allCSS)}getFileIconTheme(){return{hasFileIcons:!1,hasFolderIcons:!1,hidesExplorerArrows:!1}}}const dz="data-keybinding-context";class uz{constructor(e,t){this._id=e,this._parent=t,this._value=Object.create(null),this._value._contextId=e}setValue(e,t){return this._value[e]!==t&&(this._value[e]=t,!0)}removeValue(e){return e in this._value&&(delete this._value[e],!0)}getValue(e){const t=this._value[e];return void 0===t&&this._parent?this._parent.getValue(e):t}}class gz extends uz{constructor(){super(-1,null)}setValue(e,t){return!1}removeValue(e){return!1}getValue(e){}}gz.INSTANCE=new gz;class pz extends uz{constructor(e,t,i){super(e,null),this._configurationService=t,this._values=Da.forConfigKeys(),this._listener=this._configurationService.onDidChangeConfiguration(e=>{if(6===e.source){const e=Array.from(c.map(this._values,([e])=>e));this._values.clear(),i.fire(new _z(e))}else{const t=[];for(const i of e.affectedKeys){const e=`config.${i}`,n=this._values.findSuperstr(e);void 0!==n&&(t.push(...c.map(n,([e])=>e)),this._values.deleteSuperstr(e)),this._values.has(e)&&(t.push(e),this._values.delete(e))}i.fire(new _z(t))}})}dispose(){this._listener.dispose()}getValue(e){if(0!==e.indexOf(pz._keyPrefix))return super.getValue(e);if(this._values.has(e))return this._values.get(e);const t=e.substr(pz._keyPrefix.length),i=this._configurationService.getValue(t);let n=void 0;switch(typeof i){case"number":case"boolean":case"string":n=i;break;default:n=Array.isArray(i)?JSON.stringify(i):i}return this._values.set(e,n),n}setValue(e,t){return super.setValue(e,t)}removeValue(e){return super.removeValue(e)}}pz._keyPrefix="config.";class mz{constructor(e,t,i){this._service=e,this._key=t,this._defaultValue=i,this.reset()}set(e){this._service.setContext(this._key,e)}reset(){void 0===this._defaultValue?this._service.removeContext(this._key):this._service.setContext(this._key,this._defaultValue)}get(){return this._service.getContextKeyValue(this._key)}}class fz{constructor(e){this.key=e}affectsSome(e){return e.has(this.key)}}class _z{constructor(e){this.keys=e}affectsSome(e){for(const t of this.keys)if(e.has(t))return!0;return!1}}class bz{constructor(e){this.events=e}affectsSome(e){for(const t of this.events)if(t.affectsSome(e))return!0;return!1}}class vz{constructor(e){this._onDidChangeContext=new se({merge:e=>new bz(e)}),this.onDidChangeContext=this._onDidChangeContext.event,this._isDisposed=!1,this._myContextId=e}createKey(e,t){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new mz(this,e,t)}bufferChangeEvents(e){this._onDidChangeContext.pause();try{e()}finally{this._onDidChangeContext.resume()}}createScoped(e){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new wz(this,e)}contextMatchesRules(e){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");const t=this.getContextValuesContainer(this._myContextId);return pW.contextMatchesRules(t,e)}getContextKeyValue(e){if(!this._isDisposed)return this.getContextValuesContainer(this._myContextId).getValue(e)}setContext(e,t){if(this._isDisposed)return;const i=this.getContextValuesContainer(this._myContextId);i&&i.setValue(e,t)&&this._onDidChangeContext.fire(new fz(e))}removeContext(e){this._isDisposed||this.getContextValuesContainer(this._myContextId).removeValue(e)&&this._onDidChangeContext.fire(new fz(e))}getContext(e){return this._isDisposed?gz.INSTANCE:this.getContextValuesContainer(function t(e){for(;e;){if(e.hasAttribute(dz)){const t=e.getAttribute(dz);return t?parseInt(t,10):NaN}e=e.parentElement}return 0}(e))}}let Cz=class extends vz{constructor(e){super(0),this._contexts=new Map,this._toDispose=new v,this._lastContextId=0;const t=new pz(this._myContextId,e,this._onDidChangeContext);this._contexts.set(this._myContextId,t),this._toDispose.add(t)}dispose(){this._onDidChangeContext.dispose(),this._isDisposed=!0,this._toDispose.dispose()}getContextValuesContainer(e){return this._isDisposed?gz.INSTANCE:this._contexts.get(e)||gz.INSTANCE}createChildContext(e=this._myContextId){if(this._isDisposed)throw new Error("ContextKeyService has been disposed");let t=++this._lastContextId;return this._contexts.set(t,new uz(t,this.getContextValuesContainer(e))),t}disposeContext(e){this._isDisposed||this._contexts.delete(e)}};Cz=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,0)}}(0,zL)],Cz);class wz extends vz{constructor(e,t){if(super(e.createChildContext()),this._parentChangeListener=new w,this._parent=e,this._updateParentChangeListener(),this._domNode=t,this._domNode.hasAttribute(dz)){let e="";this._domNode.classList&&(e=Array.from(this._domNode.classList.values()).join(", ")),console.error(`Element already has context attribute${e?": "+e:""}`)}this._domNode.setAttribute(dz,String(this._myContextId))}_updateParentChangeListener(){this._parentChangeListener.value=this._parent.onDidChangeContext(this._onDidChangeContext.fire,this._onDidChangeContext)}dispose(){this._isDisposed||(this._onDidChangeContext.dispose(),this._parent.disposeContext(this._myContextId),this._parentChangeListener.dispose(),this._domNode.removeAttribute(dz),this._isDisposed=!0)}getContextValuesContainer(e){return this._isDisposed?gz.INSTANCE:this._parent.getContextValuesContainer(e)}createChildContext(e=this._myContextId){if(this._isDisposed)throw new Error("ScopedContextKeyService has been disposed");return this._parent.createChildContext(e)}disposeContext(e){this._isDisposed||this._parent.disposeContext(e)}}var yz;function Sz(e,t,i){const n=i.mode===yz.ALIGN?i.offset:i.offset+i.size,o=i.mode===yz.ALIGN?i.offset+i.size:i.offset;return 0===i.position?t<=e-n?n:t<=o?o-t:Math.max(e-t,0):t<=o?o-t:t<=e-n?n:0}sn.registerCommand("setContext",(function(e,t,i){e.get(en).createKey(String(t),i)})),sn.registerCommand({id:"getContextKeyInfo",handler:()=>[...Ji.all()].sort((e,t)=>e.key.localeCompare(t.key)),description:{description:t(0,"A command that returns information about context keys"),args:[]}}),sn.registerCommand("_generateContextKeyInfo",(function(){const e=[],t=new Set;for(let i of Ji.all())t.has(i.key)||(t.add(i.key),e.push(i));e.sort((e,t)=>e.key.localeCompare(t.key)),console.log(JSON.stringify(e,void 0,2))})),function(e){e[e.AVOID=0]="AVOID",e[e.ALIGN=1]="ALIGN"}(yz||(yz={}));class Lz extends C{constructor(e,t){super(),this.container=null,this.delegate=null,this.toDisposeOnClean=C.None,this.toDisposeOnSetContainer=C.None,this.shadowRoot=null,this.shadowRootHostElement=null,this.view=Bu(".context-view"),this.useFixedPosition=!1,this.useShadowDOM=!1,Vu(this.view),this.setContainer(e,t),this._register(b(()=>this.setContainer(null,1)))}setContainer(e,t){var i;if(this.container&&(this.toDisposeOnSetContainer.dispose(),this.shadowRoot?(this.shadowRoot.removeChild(this.view),this.shadowRoot=null,null===(i=this.shadowRootHostElement)||void 0===i||i.remove(),this.shadowRootHostElement=null):this.container.removeChild(this.view),this.container=null),e){if(this.container=e,this.useFixedPosition=1!==t,this.useShadowDOM=3===t,this.useShadowDOM){this.shadowRootHostElement=Bu(".shadow-root-host"),this.container.appendChild(this.shadowRootHostElement),this.shadowRoot=this.shadowRootHostElement.attachShadow({mode:"open"});const e=document.createElement("style");e.textContent=Dz,this.shadowRoot.appendChild(e),this.shadowRoot.appendChild(this.view),this.shadowRoot.appendChild(Bu("slot"))}else this.container.appendChild(this.view);const i=new v;Lz.BUBBLE_UP_EVENTS.forEach(e=>{i.add(Gd(this.container,e,e=>{this.onDOMEvent(e,!1)}))}),Lz.BUBBLE_DOWN_EVENTS.forEach(e=>{i.add(Gd(this.container,e,e=>{this.onDOMEvent(e,!0)},!0))}),this.toDisposeOnSetContainer=i}}show(e){this.isVisible()&&this.hide(),Ud(this.view),this.view.className="context-view",this.view.style.top="0px",this.view.style.left="0px",this.view.style.zIndex="2500",this.view.style.position=this.useFixedPosition?"fixed":"absolute",Wu(this.view),this.toDisposeOnClean=e.render(this.view)||C.None,this.delegate=e,this.doLayout(),this.delegate.focus&&this.delegate.focus()}getViewElement(){return this.view}layout(){this.isVisible()&&(!1!==this.delegate.canRelayout||j&&Hd.pointerEvents?(this.delegate.layout&&this.delegate.layout(),this.doLayout()):this.hide())}doLayout(){if(!this.isVisible())return;let e,t=this.delegate.getAnchor();if(ku(t)){let i=cu(t);e={top:i.top,left:i.left,width:i.width,height:i.height}}else e={top:t.y,left:t.x,width:t.width||1,height:t.height||2};const i=uu(this.view),n=mu(this.view),o=this.delegate.anchorPosition||0,s=this.delegate.anchorAlignment||0;let r,a;if(0===(this.delegate.anchorAxisAlignment||0)){const t={offset:e.top-window.pageYOffset,size:e.height,position:0===o?0:1},l={offset:e.left,size:e.width,position:0===s?0:1,mode:yz.ALIGN};r=Sz(window.innerHeight,n,t)+window.pageYOffset,nE.intersects({start:r,end:r+n},{start:t.offset,end:t.offset+t.size})&&(l.mode=yz.AVOID),a=Sz(window.innerWidth,i,l)}else{const t={offset:e.left,size:e.width,position:0===s?0:1},l={offset:e.top,size:e.height,position:0===o?0:1,mode:yz.ALIGN};a=Sz(window.innerWidth,i,t),nE.intersects({start:a,end:a+i},{start:t.offset,end:t.offset+t.size})&&(l.mode=yz.AVOID),r=Sz(window.innerHeight,n,l)+window.pageYOffset}this.view.classList.remove("top","bottom","left","right"),this.view.classList.add(0===o?"bottom":"top"),this.view.classList.add(0===s?"left":"right"),this.view.classList.toggle("fixed",this.useFixedPosition);const l=cu(this.container);this.view.style.top=`${r-(this.useFixedPosition?cu(this.view).top:l.top)}px`,this.view.style.left=`${a-(this.useFixedPosition?cu(this.view).left:l.left)}px`,this.view.style.width="initial"}hide(e){const t=this.delegate;this.delegate=null,(null==t?void 0:t.onHide)&&t.onHide(e),this.toDisposeOnClean.dispose(),Vu(this.view)}isVisible(){return!!this.delegate}onDOMEvent(e,t){this.delegate&&(this.delegate.onDOMEvent?this.delegate.onDOMEvent(e,document.activeElement):t&&!fu(e.target,this.container)&&this.hide())}dispose(){this.hide(),super.dispose()}}Lz.BUBBLE_UP_EVENTS=["click","keydown","focus","blur"],Lz.BUBBLE_DOWN_EVENTS=["click"];let Dz='\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t@font-face {\n\t\tfont-family: "codicon";\n\t\tsrc: url("./codicon.ttf?5d4d76ab2ce5108968ad644d591a16a6") format("truetype");\n\t}\n\n\t.codicon[class*=\'codicon-\'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "HelveticaNeue-Light", system-ui, "Ubuntu", "Droid Sans", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, "Nanum Gothic", "Apple SD Gothic Neo", "AppleGothic", sans-serif; }\n\n\t:host-context(.windows) { font-family: "Segoe WPC", "Segoe UI", sans-serif; }\n\t:host-context(.windows:lang(zh-Hans)) { font-family: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; }\n\t:host-context(.windows:lang(zh-Hant)) { font-family: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; }\n\t:host-context(.windows:lang(ja)) { font-family: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; }\n\t:host-context(.windows:lang(ko)) { font-family: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; }\n\n\t:host-context(.linux) { font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif; }\n\t:host-context(.linux:lang(zh-Hans)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; }\n\t:host-context(.linux:lang(zh-Hant)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; }\n\t:host-context(.linux:lang(ja)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; }\n\t:host-context(.linux:lang(ko)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; }\n';const Ez=/\(&([^\s&])\)|(^|[^&])&([^\s&])/,xz=/(&)?(&)([^\s&])/g,kz=dn("menu-selection",un.check),Nz=dn("menu-submenu",un.chevronRight);var Iz;!function(e){e[e.Right=0]="Right",e[e.Left=1]="Left"}(Iz||(Iz={}));class Tz extends ly{constructor(e,t,i={}){e.classList.add("monaco-menu-container"),e.setAttribute("role","presentation");const n=document.createElement("div");n.classList.add("monaco-menu"),n.setAttribute("role","presentation"),super(n,{orientation:2,actionViewItemProvider:e=>this.doGetActionViewItem(e,i,o),context:i.context,actionRunner:i.actionRunner,ariaLabel:i.ariaLabel,focusOnlyEnabledItems:!0,triggerKeys:{keys:[3,...H||U?[10]:[]],keyDown:!0}}),this.menuElement=n,this.actionsList.setAttribute("role","menu"),this.actionsList.tabIndex=0,this.menuDisposables=this._register(new v),this.initializeStyleSheet(e),jd(n,Nu.KEY_DOWN,e=>{new Rd(e).equals(2)&&e.preventDefault()}),i.enableMnemonics&&this.menuDisposables.add(jd(n,Nu.KEY_DOWN,e=>{const t=e.key.toLocaleLowerCase();if(this.mnemonics.has(t)){Iu.stop(e,!0);const i=this.mnemonics.get(t);if(1===i.length&&(i[0]instanceof Mz&&i[0].container&&this.focusItemByElement(i[0].container),i[0].onClick(e)),i.length>1){const e=i.shift();e&&e.container&&(this.focusItemByElement(e.container),i.push(e)),this.mnemonics.set(t,i)}}})),U&&this._register(jd(n,Nu.KEY_DOWN,e=>{const t=new Rd(e);t.equals(14)||t.equals(11)?(this.focusedItem=this.viewItems.length-1,this.focusNext(),Iu.stop(e,!0)):(t.equals(13)||t.equals(12))&&(this.focusedItem=0,this.focusPrevious(),Iu.stop(e,!0))})),this._register(jd(this.domNode,Nu.MOUSE_OUT,e=>{fu(e.relatedTarget,this.domNode)||(this.focusedItem=void 0,this.updateFocus(),e.stopPropagation())})),this._register(jd(this.actionsList,Nu.MOUSE_OVER,e=>{let t=e.target;if(t&&fu(t,this.actionsList)&&t!==this.actionsList){for(;t.parentElement!==this.actionsList&&null!==t.parentElement;)t=t.parentElement;if(t.classList.contains("action-item")){const e=this.focusedItem;this.setFocusedItem(t),e!==this.focusedItem&&this.updateFocus()}}}));let o={parent:this};this.mnemonics=new Map,this.scrollableElement=this._register(new Kb(n,{alwaysConsumeMouseWheel:!0,horizontal:2,vertical:3,verticalScrollbarSize:7,handleMouseWheel:!0,useShadows:!0}));const s=this.scrollableElement.getDomNode();s.style.position="",this._register(jd(s,Nu.MOUSE_UP,e=>{e.preventDefault()})),n.style.maxHeight=`${Math.max(10,window.innerHeight-e.getBoundingClientRect().top-35)}px`,t=t.filter(e=>{var t;return null===(t=i.submenuIds)||void 0===t||!t.has(e.id)||(console.warn(`Found submenu cycle: ${e.id}`),!1)}),this.push(t,{icon:!0,label:!0,isMenu:!0}),e.appendChild(this.scrollableElement.getDomNode()),this.scrollableElement.scanDomNode(),this.viewItems.filter(e=>!(e instanceof Oz)).forEach((e,t,i)=>{e.updatePositionInSet(t+1,i.length)})}initializeStyleSheet(e){Cu(e)?(this.styleSheet=Su(e),this.styleSheet.textContent=Rz):(Tz.globalStyleSheet||(Tz.globalStyleSheet=Su(),Tz.globalStyleSheet.textContent=Rz),this.styleSheet=Tz.globalStyleSheet)}style(e){const t=this.getContainer(),i=e.foregroundColor?`${e.foregroundColor}`:"",n=e.backgroundColor?`${e.backgroundColor}`:"",o=e.shadowColor?`0 2px 4px ${e.shadowColor}`:"";t.style.border=e.borderColor?`1px solid ${e.borderColor}`:"",this.domNode.style.color=i,this.domNode.style.backgroundColor=n,t.style.boxShadow=o,this.viewItems&&this.viewItems.forEach(t=>{(t instanceof Az||t instanceof Oz)&&t.style(e)})}getContainer(){return this.scrollableElement.getDomNode()}get onScroll(){return this.scrollableElement.onScroll}focusItemByElement(e){const t=this.focusedItem;this.setFocusedItem(e),t!==this.focusedItem&&this.updateFocus()}setFocusedItem(e){for(let t=0;t{this.element&&(this._register(jd(this.element,Nu.MOUSE_UP,e=>{if(Iu.stop(e,!0),ge){if(new Vd(e).rightButton)return;this.onClick(e)}else setTimeout(()=>{this.onClick(e)},0)})),this._register(jd(this.element,Nu.CONTEXT_MENU,e=>{Iu.stop(e,!0)})))},100),this._register(this.runOnceToEnableMouseUp)}render(e){super.render(e),this.element&&(this.container=e,this.item=Mu(this.element,Bu("a.action-menu-item")),this._action.id===Bt.ID?this.item.setAttribute("role","presentation"):(this.item.setAttribute("role","menuitem"),this.mnemonic&&this.item.setAttribute("aria-keyshortcuts",`${this.mnemonic}`)),this.check=Mu(this.item,Bu("span.menu-item-check"+kz.cssSelector)),this.check.setAttribute("role","none"),this.label=Mu(this.item,Bu("span.action-label")),this.options.label&&this.options.keybinding&&(Mu(this.item,Bu("span.keybinding")).textContent=this.options.keybinding),this.runOnceToEnableMouseUp.schedule(),this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked())}blur(){super.blur(),this.applyStyle()}focus(){super.focus(),this.item&&this.item.focus(),this.applyStyle()}updatePositionInSet(e,t){this.item&&(this.item.setAttribute("aria-posinset",`${e}`),this.item.setAttribute("aria-setsize",`${t}`))}updateLabel(){if(this.label&&this.options.label){Ud(this.label);let e=function e(t){return-1===t.indexOf(XT)?t:t.replace(tA,(e,t,i,n)=>i?e:t||n||"")}(this.getAction().label);if(e){const t=function t(e){const t=Ez,i=t.exec(e);return i?e.replace(t,i[1]?"":"$2$3").trim():e}(e);this.options.enableMnemonics||(e=t),this.label.setAttribute("aria-label",t.replace(/&&/g,"&"));const i=Ez.exec(e);if(i){e=Kt(e),xz.lastIndex=0;let t=xz.exec(e);for(;t&&t[1];)t=xz.exec(e);const n=e=>e.replace(/&&/g,"&");t?this.label.append(jt(n(e.substr(0,t.index))," "),Bu("u",{"aria-hidden":"true"},t[3]),function i(e,t){if(!e||!t)return e;const i=t.length,n=e.length;if(0===i||0===n)return e;let o=n,s=-1;for(;-1!==(s=e.lastIndexOf(t,o-1))&&s+i===o;){if(0===s)return"";o=s}return e.substring(0,o)}(n(e.substr(t.index+t[0].length))," ")):this.label.innerText=n(e).trim(),this.item&&this.item.setAttribute("aria-keyshortcuts",(i[1]?i[1]:i[3]).toLocaleLowerCase())}else this.label.innerText=e.replace(/&&/g,"&").trim()}}}updateTooltip(){let e=null;this.getAction().tooltip?e=this.getAction().tooltip:!this.options.label&&this.getAction().label&&this.options.icon&&(e=this.getAction().label,this.options.keybinding&&(e=t(0,"{0} ({1})",e,this.options.keybinding))),e&&this.item&&(this.item.title=e)}updateClass(){this.cssClass&&this.item&&this.item.classList.remove(...this.cssClass.split(" ")),this.options.icon&&this.label?(this.cssClass=this.getAction().class||"",this.label.classList.add("icon"),this.cssClass&&this.label.classList.add(...this.cssClass.split(" ")),this.updateEnabled()):this.label&&this.label.classList.remove("icon")}updateEnabled(){this.getAction().enabled?(this.element&&(this.element.classList.remove("disabled"),this.element.removeAttribute("aria-disabled")),this.item&&(this.item.classList.remove("disabled"),this.item.removeAttribute("aria-disabled"),this.item.tabIndex=0)):(this.element&&(this.element.classList.add("disabled"),this.element.setAttribute("aria-disabled","true")),this.item&&(this.item.classList.add("disabled"),this.item.setAttribute("aria-disabled","true")))}updateChecked(){this.item&&(this.getAction().checked?(this.item.classList.add("checked"),this.item.setAttribute("role","menuitemcheckbox"),this.item.setAttribute("aria-checked","true")):(this.item.classList.remove("checked"),this.item.setAttribute("role","menuitem"),this.item.setAttribute("aria-checked","false")))}getMnemonic(){return this.mnemonic}applyStyle(){if(!this.menuStyle)return;const e=this.element&&this.element.classList.contains("focused"),t=e&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor,i=e&&this.menuStyle.selectionBackgroundColor?this.menuStyle.selectionBackgroundColor:void 0,n=e&&this.menuStyle.selectionBorderColor?`thin solid ${this.menuStyle.selectionBorderColor}`:"";this.item&&(this.item.style.color=t?t.toString():"",this.item.style.backgroundColor=i?i.toString():""),this.check&&(this.check.style.color=t?t.toString():""),this.container&&(this.container.style.border=n)}style(e){this.menuStyle=e,this.applyStyle()}}class Mz extends Az{constructor(e,t,i,n){super(e,e,n),this.submenuActions=t,this.parentData=i,this.submenuOptions=n,this.mysubmenu=null,this.submenuDisposables=this._register(new v),this.mouseOver=!1,this.expandDirection=n&&void 0!==n.expandDirection?n.expandDirection:Iz.Right,this.showScheduler=new $a(()=>{this.mouseOver&&(this.cleanupExistingSubmenu(!1),this.createSubmenu(!1))},250),this.hideScheduler=new $a(()=>{this.element&&!fu(yu(),this.element)&&this.parentData.submenu===this.mysubmenu&&(this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!0))},750)}render(e){super.render(e),this.element&&(this.item&&(this.item.classList.add("monaco-submenu-item"),this.item.tabIndex=0,this.item.setAttribute("aria-haspopup","true"),this.updateAriaExpanded("false"),this.submenuIndicator=Mu(this.item,Bu("span.submenu-indicator"+Nz.cssSelector)),this.submenuIndicator.setAttribute("aria-hidden","true")),this._register(jd(this.element,Nu.KEY_UP,e=>{let t=new Rd(e);(t.equals(17)||t.equals(3))&&(Iu.stop(e,!0),this.createSubmenu(!0))})),this._register(jd(this.element,Nu.KEY_DOWN,e=>{let t=new Rd(e);yu()===this.item&&(t.equals(17)||t.equals(3))&&Iu.stop(e,!0)})),this._register(jd(this.element,Nu.MOUSE_OVER,e=>{this.mouseOver||(this.mouseOver=!0,this.showScheduler.schedule())})),this._register(jd(this.element,Nu.MOUSE_LEAVE,e=>{this.mouseOver=!1})),this._register(jd(this.element,Nu.FOCUS_OUT,e=>{this.element&&!fu(yu(),this.element)&&this.hideScheduler.schedule()})),this._register(this.parentData.parent.onScroll(()=>{this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!1)})))}updateEnabled(){}onClick(e){Iu.stop(e,!0),this.cleanupExistingSubmenu(!1),this.createSubmenu(!0)}cleanupExistingSubmenu(e){if(this.parentData.submenu&&(e||this.parentData.submenu!==this.mysubmenu)){try{this.parentData.submenu.dispose()}catch(e){}this.parentData.submenu=void 0,this.updateAriaExpanded("false"),this.submenuContainer&&(this.submenuDisposables.clear(),this.submenuContainer=void 0)}}calculateSubmenuMenuLayout(e,t,i,n){const o={top:0,left:0};return o.left=Sz(e.width,t.width,{position:n===Iz.Right?0:1,offset:i.left,size:i.width}),o.left>=i.left&&o.left{new Rd(e).equals(15)&&(Iu.stop(e,!0),this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0))})),this.submenuDisposables.add(jd(this.submenuContainer,Nu.KEY_DOWN,e=>{new Rd(e).equals(15)&&Iu.stop(e,!0)})),this.submenuDisposables.add(this.parentData.submenu.onDidCancel(()=>{this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0)})),this.parentData.submenu.focus(e),this.mysubmenu=this.parentData.submenu}}updateAriaExpanded(e){var t;this.item&&(null===(t=this.item)||void 0===t||t.setAttribute("aria-expanded",e))}applyStyle(){if(super.applyStyle(),!this.menuStyle)return;const e=this.element&&this.element.classList.contains("focused")&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor;this.submenuIndicator&&(this.submenuIndicator.style.color=e?`${e}`:""),this.parentData.submenu&&this.parentData.submenu.style(this.menuStyle)}dispose(){super.dispose(),this.hideScheduler.dispose(),this.mysubmenu&&(this.mysubmenu.dispose(),this.mysubmenu=null),this.submenuContainer&&(this.submenuContainer=void 0)}}class Oz extends ay{style(e){this.label&&(this.label.style.borderBottomColor=e.separatorColor?`${e.separatorColor}`:"")}}let Rz=`\n.monaco-menu {\n\tfont-size: 13px;\n\n}\n\n${lR(kz)}\n${lR(Nz)}\n\n.monaco-menu .monaco-action-bar {\n\ttext-align: right;\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n\n.monaco-menu .monaco-action-bar .actions-container {\n\tdisplay: flex;\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 100%;\n\tjustify-content: flex-end;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar.reverse .actions-container {\n\tflex-direction: row-reverse;\n}\n\n.monaco-menu .monaco-action-bar .action-item {\n\tcursor: pointer;\n\tdisplay: inline-block;\n\ttransition: transform 50ms ease;\n\tposition: relative; /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled {\n\tcursor: default;\n}\n\n.monaco-menu .monaco-action-bar.animated .action-item.active {\n\ttransform: scale(1.272019649, 1.272019649); /* 1.272019649 = √φ */\n}\n\n.monaco-menu .monaco-action-bar .action-item .icon,\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar .action-label {\n\tfont-size: 11px;\n\tmargin-right: 4px;\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label,\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label:hover {\n\topacity: 0.4;\n}\n\n/* Vertical actions */\n\n.monaco-menu .monaco-action-bar.vertical {\n\ttext-align: left;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tdisplay: block;\n\tborder-bottom: 1px solid #bbb;\n\tpadding-top: 1px;\n\tmargin-left: .8em;\n\tmargin-right: .8em;\n}\n\n.monaco-menu .secondary-actions .monaco-action-bar .action-label {\n\tmargin-left: 6px;\n}\n\n/* Action Items */\n.monaco-menu .monaco-action-bar .action-item.select-container {\n\toverflow: hidden; /* somehow the dropdown overflows its container, we prevent it here to not push */\n\tflex: 1;\n\tmax-width: 170px;\n\tmin-width: 60px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: 10px;\n}\n\n.monaco-menu .monaco-action-bar.vertical {\n\tmargin-left: 0;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tpadding: 0;\n\ttransform: none;\n\tdisplay: flex;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.active {\n\ttransform: none;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\tflex: 1 1 auto;\n\tdisplay: flex;\n\theight: 2em;\n\talign-items: center;\n\tposition: relative;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label {\n\tflex: 1 1 auto;\n\ttext-decoration: none;\n\tpadding: 0 1em;\n\tbackground: none;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .keybinding,\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tdisplay: inline-block;\n\tflex: 2 1 auto;\n\tpadding: 0 1em;\n\ttext-align: right;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon {\n\tfont-size: 16px !important;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon::before {\n\tmargin-left: auto;\n\tmargin-right: -20px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .submenu-indicator {\n\topacity: 0.4;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator) {\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\tmargin: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tposition: static;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item .monaco-submenu {\n\tposition: absolute;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tpadding: 0.5em 0 0 0;\n\tmargin-bottom: 0.5em;\n\twidth: 100%;\n\theight: 0px !important;\n\tmargin-left: .8em !important;\n\tmargin-right: .8em !important;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator.text {\n\tpadding: 0.7em 1em 0.1em 1em;\n\tfont-weight: bold;\n\topacity: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:hover {\n\tcolor: inherit;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tposition: absolute;\n\tvisibility: hidden;\n\twidth: 1em;\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item.checked .menu-item-check {\n\tvisibility: visible;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Context Menu */\n\n.context-view.monaco-menu-container {\n\toutline: 0;\n\tborder: none;\n\tanimation: fadeIn 0.083s linear;\n\t-webkit-app-region: no-drag;\n}\n\n.context-view.monaco-menu-container :focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical:focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical :focus {\n\toutline: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tborder: thin solid transparent; /* prevents jumping behaviour on hover or focus */\n}\n\n\n/* High Contrast Theming */\n:host-context(.hc-black) .context-view.monaco-menu-container {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-menu .monaco-action-bar.vertical .action-item.focused {\n\tbackground: none;\n}\n\n/* Vertical Action Bar Styles */\n\n.monaco-menu .monaco-action-bar.vertical {\n\tpadding: .5em 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\theight: 1.8em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator),\n.monaco-menu .monaco-action-bar.vertical .keybinding {\n\tfont-size: inherit;\n\tpadding: 0 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tfont-size: inherit;\n\twidth: 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tfont-size: inherit;\n\tpadding: 0.2em 0 0 0;\n\tmargin-bottom: 0.2em;\n}\n\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tfont-size: 60%;\n\tpadding: 0 1.8em;\n}\n\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n\tmask-size: 10px 10px;\n\t-webkit-mask-size: 10px 10px;\n}\n\n.monaco-menu .action-item {\n\tcursor: default;\n}\n\n/* Arrows */\n.monaco-scrollable-element > .scrollbar > .scra {\n\tcursor: pointer;\n\tfont-size: 11px !important;\n}\n\n.monaco-scrollable-element > .visible {\n\topacity: 1;\n\n\t/* Background rule added for IE9 - to allow clicks on dom node */\n\tbackground:rgba(0,0,0,0);\n\n\ttransition: opacity 100ms linear;\n}\n.monaco-scrollable-element > .invisible {\n\topacity: 0;\n\tpointer-events: none;\n}\n.monaco-scrollable-element > .invisible.fade {\n\ttransition: opacity 800ms linear;\n}\n\n/* Scrollable Content Inset Shadow */\n.monaco-scrollable-element > .shadow {\n\tposition: absolute;\n\tdisplay: none;\n}\n.monaco-scrollable-element > .shadow.top {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 3px;\n\theight: 3px;\n\twidth: 100%;\n\tbox-shadow: #DDD 0 6px 6px -6px inset;\n}\n.monaco-scrollable-element > .shadow.left {\n\tdisplay: block;\n\ttop: 3px;\n\tleft: 0;\n\theight: 100%;\n\twidth: 3px;\n\tbox-shadow: #DDD 6px 0 6px -6px inset;\n}\n.monaco-scrollable-element > .shadow.top-left-corner {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 0;\n\theight: 3px;\n\twidth: 3px;\n}\n.monaco-scrollable-element > .shadow.top.left {\n\tbox-shadow: #DDD 6px 6px 6px -6px inset;\n}\n\n/* ---------- Default Style ---------- */\n\n:host-context(.vs) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(100, 100, 100, .4);\n}\n:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(121, 121, 121, .4);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(111, 195, 223, .6);\n}\n\n.monaco-scrollable-element > .scrollbar > .slider:hover {\n\tbackground: rgba(100, 100, 100, .7);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider:hover {\n\tbackground: rgba(111, 195, 223, .8);\n}\n\n.monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(0, 0, 0, .6);\n}\n:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(191, 191, 191, .4);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(111, 195, 223, 1);\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.top {\n\tbox-shadow: none;\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.left {\n\tbox-shadow: #000 6px 0 6px -6px inset;\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.top.left {\n\tbox-shadow: #000 6px 6px 6px -6px inset;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.top {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.left {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.top.left {\n\tbox-shadow: none;\n}\n`;class Pz{constructor(e,t,i,n,o){this.contextViewService=e,this.telemetryService=t,this.notificationService=i,this.keybindingService=n,this.themeService=o,this.focusToReturn=null,this.block=null,this.options={blockMouse:!0}}configure(e){this.options=e}showContextMenu(e){const t=e.getActions();if(!t.length)return;let i;this.focusToReturn=document.activeElement;let n=ku(e.domForShadowRoot)?e.domForShadowRoot:void 0;this.contextViewService.showContextView({getAnchor:()=>e.getAnchor(),canRelayout:!1,anchorAlignment:e.anchorAlignment,anchorAxisAlignment:e.anchorAxisAlignment,render:n=>{let o=e.getMenuClassName?e.getMenuClassName():"";o&&(n.className+=" "+o),this.options.blockMouse&&(this.block=n.appendChild(Bu(".context-view-block")),this.block.style.position="fixed",this.block.style.cursor="initial",this.block.style.left="0",this.block.style.top="0",this.block.style.width="100%",this.block.style.height="100%",this.block.style.zIndex="-1",Ed(this.block,Nu.MOUSE_DOWN)(e=>e.stopPropagation()));const s=new v,r=e.actionRunner||new Ft;return r.onBeforeRun(this.onActionRun,this,s),r.onDidRun(this.onDidActionRun,this,s),i=new Tz(n,t,{actionViewItemProvider:e.getActionViewItem,context:e.getActionsContext?e.getActionsContext():null,actionRunner:r,getKeyBinding:e.getKeyBinding?e.getKeyBinding:e=>this.keybindingService.lookupKeybinding(e.id)}),s.add(function a(e,t,i){return vE(t,Object.assign(Object.assign({},yE),i),e)}(i,this.themeService)),i.onDidCancel(()=>this.contextViewService.hideContextView(!0),null,s),i.onDidBlur(()=>this.contextViewService.hideContextView(!0),null,s),Ed(window,Nu.BLUR)(()=>{this.contextViewService.hideContextView(!0)},null,s),Ed(window,Nu.MOUSE_DOWN)(e=>{if(e.defaultPrevented)return;let t=new Vd(e),i=t.target;if(!t.rightButton){for(;i;){if(i===n)return;i=i.parentElement}this.contextViewService.hideContextView(!0)}},null,s),_(s,i)},focus:()=>{i&&i.focus(!!e.autoSelectFirstItem)},onHide:t=>{e.onHide&&e.onHide(!!t),this.block&&(this.block.remove(),this.block=null),this.focusToReturn&&this.focusToReturn.focus()}},n,!!n)}onActionRun(e){this.telemetryService&&this.telemetryService.publicLog2("workbenchActionExecuted",{id:e.action.id,from:"contextMenu"}),this.contextViewService.hideContextView(!1),this.focusToReturn&&this.focusToReturn.focus()}onDidActionRun(e){e.error&&this.notificationService.error(e.error)}}var Fz=function(e,t){return function(i,n){t(i,n,e)}};let Bz=class extends C{constructor(e,t,i,n,o){super(),this.contextMenuHandler=new Pz(i,e,t,n,o)}configure(e){this.contextMenuHandler.configure(e)}showContextMenu(e){this.contextMenuHandler.showContextMenu(e),ju.getInstance().resetKeyStatus()}};Bz=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([Fz(0,Kn),Fz(1,cw),Fz(2,Ly),Fz(3,FS),Fz(4,pn)],Bz);const Wz=kt("layoutService");let Vz=class extends C{constructor(e){super(),this.layoutService=e,this.currentViewDisposable=C.None,this.container=e.container,this.contextView=this._register(new Lz(this.container,1)),this.layout(),this._register(e.onDidLayout(()=>this.layout()))}setContainer(e,t){this.contextView.setContainer(e,t||1)}showContextView(e,t,i){t?t!==this.container&&(this.container=t,this.setContainer(t,i?3:2)):this.container!==this.layoutService.container&&(this.container=this.layoutService.container,this.setContainer(this.container,1)),this.contextView.show(e);const n=b(()=>{this.currentViewDisposable===n&&this.hideContextView()});return this.currentViewDisposable=n,n}getContextViewElement(){return this.contextView.getViewElement()}layout(){this.contextView.layout()}hideContextView(e){this.contextView.hide(e)}};Vz=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([function(e,t){return function(e,i){t(e,i,0)}}(0,Wz)],Vz);const zz=kt("dialogService");class Hz{constructor(e){this.incoming=new Map,this.outgoing=new Map,this.data=e}}class Uz{constructor(e){this._hashFn=e,this._nodes=new Map}roots(){const e=[];for(let t of this._nodes.values())0===t.outgoing.size&&e.push(t);return e}insertEdge(e,t){const i=this.lookupOrInsertNode(e),n=this.lookupOrInsertNode(t);i.outgoing.set(this._hashFn(t),n),n.incoming.set(this._hashFn(e),i)}removeNode(e){const t=this._hashFn(e);this._nodes.delete(t);for(let e of this._nodes.values())e.outgoing.delete(t),e.incoming.delete(t)}lookupOrInsertNode(e){const t=this._hashFn(e);let i=this._nodes.get(t);return i||(i=new Hz(e),this._nodes.set(t,i)),i}isEmpty(){return 0===this._nodes.size}toString(){let e=[];for(let[t,i]of this._nodes)e.push(`${t}, (incoming)[${[...i.incoming.keys()].join(", ")}], (outgoing)[${[...i.outgoing.keys()].join(",")}]`);return e.join("\n")}}class Kz extends Error{constructor(e){super("cyclic dependency between services"),this.message=e.toString()}}class $z{constructor(e=new aw,t=!1,i){this._activeInstantiations=new Set,this._services=e,this._strict=t,this._parent=i,this._services.set(Et,this)}createChild(e){return new $z(e,this._strict,this)}invokeFunction(e,...t){let i=jz.traceInvocation(e),n=!1;try{return e({get:(e,t)=>{if(n)throw function o(e){return e?new Error(`Illegal state: ${e}`):new Error("Illegal state")}("service accessor is only valid during the invocation of its target method");const s=this._getOrCreateServiceInstance(e,i);if(!s&&t!==Nt)throw new Error(`[invokeFunction] unknown service '${e}'`);return s}},...t)}finally{n=!0,i.stop()}}createInstance(e,...t){let i,n;return e instanceof qw?(i=jz.traceCreation(e.ctor),n=this._createInstance(e.ctor,e.staticArguments.concat(t),i)):(i=jz.traceCreation(e),n=this._createInstance(e,t,i)),i.stop(),n}_createInstance(e,t=[],i){let n=Dt.getServiceDependencies(e).sort((e,t)=>e.index-t.index),o=[];for(const t of n){let n=this._getOrCreateServiceInstance(t.id,i);if(!n&&this._strict&&!t.optional)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id}.`);o.push(n)}let s=n.length>0?n[0].index:t.length;if(t.length!==s){console.warn(`[createInstance] First service dependency of ${e.name} at position ${s+1} conflicts with ${t.length} static arguments`);let i=s-t.length;t=i>0?t.concat(new Array(i)):t.slice(0,s)}return new e(...[...t,...o])}_setServiceInstance(e,t){if(this._services.get(e)instanceof qw)this._services.set(e,t);else{if(!this._parent)throw new Error("illegalState - setting UNKNOWN service instance");this._parent._setServiceInstance(e,t)}}_getServiceInstanceOrDescriptor(e){let t=this._services.get(e);return!t&&this._parent?this._parent._getServiceInstanceOrDescriptor(e):t}_getOrCreateServiceInstance(e,t){let i=this._getServiceInstanceOrDescriptor(e);return i instanceof qw?this._safeCreateAndCacheServiceInstance(e,i,t.branch(e,!0)):(t.branch(e,!1),i)}_safeCreateAndCacheServiceInstance(e,t,i){if(this._activeInstantiations.has(e))throw new Error(`illegal state - RECURSIVELY instantiating service '${e}'`);this._activeInstantiations.add(e);try{return this._createAndCacheServiceInstance(e,t,i)}finally{this._activeInstantiations.delete(e)}}_createAndCacheServiceInstance(e,t,i){const n=new Uz(e=>e.id.toString());let o=0;const s=[{id:e,desc:t,_trace:i}];for(;s.length;){const t=s.pop();if(n.lookupOrInsertNode(t),o++>1e3)throw new Kz(n);for(let i of Dt.getServiceDependencies(t.desc.ctor)){let o=this._getServiceInstanceOrDescriptor(i.id);if(o||i.optional||console.warn(`[createInstance] ${e} depends on ${i.id} which is NOT registered.`),o instanceof qw){const e={id:i.id,desc:o,_trace:t._trace.branch(i.id,!0)};n.insertEdge(t,e),s.push(e)}}}for(;;){const e=n.roots();if(0===e.length){if(!n.isEmpty())throw new Kz(n);break}for(const{data:t}of e){if(this._getServiceInstanceOrDescriptor(t.id)instanceof qw){const e=this._createServiceInstanceWithOwner(t.id,t.desc.ctor,t.desc.staticArguments,t.desc.supportsDelayedInstantiation,t._trace);this._setServiceInstance(t.id,e)}n.removeNode(t)}}return this._getServiceInstanceOrDescriptor(e)}_createServiceInstanceWithOwner(e,t,i=[],n,o){if(this._services.get(e)instanceof qw)return this._createServiceInstance(t,i,n,o);if(this._parent)return this._parent._createServiceInstanceWithOwner(e,t,i,n,o);throw new Error(`illegalState - creating UNKNOWN service instance ${t.name}`)}_createServiceInstance(e,t=[],i,n){if(i){const i=new qa(()=>this._createInstance(e,t,n));return new Proxy(Object.create(null),{get(e,t){if(t in e)return e[t];let n=i.value,o=n[t];return"function"!=typeof o?o:(o=o.bind(n),e[t]=o,o)},set:(e,t,n)=>(i.value[t]=n,!0)})}return this._createInstance(e,t,n)}}class jz{constructor(e,t){this.type=e,this.name=t,this._start=Date.now(),this._dep=[]}static traceInvocation(e){return jz._None}static traceCreation(e){return jz._None}branch(e,t){let i=new jz(2,e.toString());return this._dep.push([e,t,i]),i}stop(){let e=Date.now()-this._start;jz._totals+=e;let t=!1,i=[`${0===this.type?"CREATE":"CALL"} ${this.name}`,`${function e(i,n){let o=[],s=new Array(i+1).join("\t");for(const[r,a,l]of n._dep)if(a&&l){t=!0,o.push(`${s}CREATES -> ${r}`);let n=e(i+1,l);n&&o.push(n)}else o.push(`${s}uses -> ${r}`);return o.join("\n")}(1,this)}`,`DONE, took ${e.toFixed(2)}ms (grand total ${jz._totals.toFixed(2)}ms)`];(e>2||t)&&console.log(i.join("\n"))}}jz._None=new class extends jz{constructor(){super(-1,null)}stop(){}branch(){return this}},jz._totals=0;class qz{constructor(){this._byResource=new Ea,this._byOwner=new Map}set(e,t,i){let n=this._byResource.get(e);n||(n=new Map,this._byResource.set(e,n)),n.set(t,i);let o=this._byOwner.get(t);o||(o=new Ea,this._byOwner.set(t,o)),o.set(e,i)}get(e,t){let i=this._byResource.get(e);return null==i?void 0:i.get(t)}delete(e,t){let i=!1,n=!1,o=this._byResource.get(e);o&&(i=o.delete(t));let s=this._byOwner.get(t);if(s&&(n=s.delete(e)),i!==n)throw new Error("illegal state");return i&&n}values(e){var t,i,n,o;return"string"==typeof e?null!==(i=null===(t=this._byOwner.get(e))||void 0===t?void 0:t.values())&&void 0!==i?i:c.empty():mt.isUri(e)?null!==(o=null===(n=this._byResource.get(e))||void 0===n?void 0:n.values())&&void 0!==o?o:c.empty():c.map(c.concat(...this._byOwner.values()),e=>e[1])}}class Gz{constructor(e){this.errors=0,this.infos=0,this.warnings=0,this.unknowns=0,this._data=new Ea,this._service=e,this._subscription=e.onMarkerChanged(this._update,this)}dispose(){this._subscription.dispose()}_update(e){for(const t of e){const e=this._data.get(t);e&&this._substract(e);const i=this._resourceStats(t);this._add(i),this._data.set(t,i)}}_resourceStats(e){const t={errors:0,warnings:0,infos:0,unknowns:0};if(e.scheme===Cs.inMemory||e.scheme===Cs.walkThrough||e.scheme===Cs.walkThroughSnippet)return t;for(const{severity:i}of this._service.read({resource:e}))i===qS.Error?t.errors+=1:i===qS.Warning?t.warnings+=1:i===qS.Info?t.infos+=1:t.unknowns+=1;return t}_substract(e){this.errors-=e.errors,this.warnings-=e.warnings,this.infos-=e.infos,this.unknowns-=e.unknowns}_add(e){this.errors+=e.errors,this.warnings+=e.warnings,this.infos+=e.infos,this.unknowns+=e.unknowns}}class Yz{constructor(){this._onMarkerChanged=new oe,this.onMarkerChanged=ie.debounce(this._onMarkerChanged.event,Yz._debouncer,0),this._data=new qz,this._stats=new Gz(this)}dispose(){this._stats.dispose(),this._onMarkerChanged.dispose()}remove(e,t){for(const i of t||[])this.changeOne(e,i,[])}changeOne(e,t,i){if(ia(i))this._data.delete(t,e)&&this._onMarkerChanged.fire([t]);else{const n=[];for(const o of i){const i=Yz._toMarker(e,t,o);i&&n.push(i)}this._data.set(t,e,n),this._onMarkerChanged.fire([t])}}static _toMarker(e,t,i){let{code:n,severity:o,message:s,source:r,startLineNumber:a,startColumn:l,endLineNumber:h,endColumn:c,relatedInformation:d,tags:u}=i;if(s)return{resource:t,owner:e,code:n,severity:o,message:s,source:r,startLineNumber:a=a>0?a:1,startColumn:l=l>0?l:1,endLineNumber:h=h>=a?h:a,endColumn:c=c>0?c:l,relatedInformation:d,tags:u}}read(e=Object.create(null)){let{owner:t,resource:i,severities:n,take:o}=e;if((!o||o<0)&&(o=-1),t&&i){const e=this._data.get(i,t);if(e){const t=[];for(const i of e)if(Yz._accept(i,n)){const e=t.push(i);if(o>0&&e===o)break}return t}return[]}if(t||i){const e=this._data.values(null!=i?i:t),s=[];for(const t of e)for(const e of t)if(Yz._accept(e,n)){const t=s.push(e);if(o>0&&t===o)return s}return s}{const e=[];for(let t of this._data.values())for(let i of t)if(Yz._accept(i,n)){const t=e.push(i);if(o>0&&t===o)return e}return e}}static _accept(e,t){return void 0===t||(t&e.severity)===e.severity}static _debouncer(e,t){e||(Yz._dedupeMap=new Ea,e=[]);for(const i of t)Yz._dedupeMap.has(i)||(Yz._dedupeMap.set(i,!0),e.push(i));return e}}var Zz=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Xz=function(e,t){return function(i,n){t(i,n,e)}};let Qz=class{constructor(e){this._commandService=e}createMenu(e,t,i=!1){return new Jz(e,i,this._commandService,t,this)}};Qz=Zz([Xz(0,on)],Qz);let Jz=class e{constructor(e,t,i,n,o){this._id=e,this._fireEventsForSubmenuChanges=t,this._commandService=i,this._contextKeyService=n,this._menuService=o,this._dispoables=new v,this._onDidChange=new oe,this.onDidChange=this._onDidChange.event,this._menuGroups=[],this._contextKeys=new Set,this._build();const s=new $a(()=>this._build(),50);this._dispoables.add(s),this._dispoables.add(En.onDidChangeMenu(t=>{t.has(e)&&s.schedule()}));const r=new $a(()=>this._onDidChange.fire(this),50);this._dispoables.add(r),this._dispoables.add(n.onDidChangeContext(e=>{e.affectsSome(this._contextKeys)&&r.schedule()}))}dispose(){this._dispoables.dispose(),this._onDidChange.dispose()}_build(){this._menuGroups.length=0,this._contextKeys.clear();const t=En.getMenuItems(this._id);let i;t.sort(e._compareMenuItems);for(let e of t){const t=e.group||"";i&&i[0]===t||this._menuGroups.push(i=[t,[]]),i[1].push(e),this._collectContextKeys(e)}this._onDidChange.fire(this)}_collectContextKeys(t){e._fillInKbExprKeys(t.when,this._contextKeys),Sn(t)?(t.command.precondition&&e._fillInKbExprKeys(t.command.precondition,this._contextKeys),t.command.toggled&&e._fillInKbExprKeys(t.command.toggled.condition||t.command.toggled,this._contextKeys)):this._fireEventsForSubmenuChanges&&En.getMenuItems(t.submenu).forEach(this._collectContextKeys,this)}getActions(e){const t=[];for(let i of this._menuGroups){const[n,o]=i,s=[];for(const t of o)if(this._contextKeyService.contextMatchesRules(t.when)){const i=Sn(t)?new kn(t.command,t.alt,e,this._contextKeyService,this._commandService):new xn(t,this._menuService,this._contextKeyService,e);s.push(i)}s.length>0&&t.push([n,s])}return t}static _fillInKbExprKeys(e,t){if(e)for(let i of e.keys())t.add(i)}static _compareMenuItems(t,i){let n=t.group,o=i.group;if(n!==o){if(!n)return 1;if(!o)return-1;if("navigation"===n)return-1;if("navigation"===o)return 1;let e=n.localeCompare(o);if(0!==e)return e}let s=t.order||0,r=i.order||0;return sr?1:e._compareTitles(Sn(t)?t.command.title:t.title,Sn(i)?i.command.title:i.title)}static _compareTitles(e,t){return("string"==typeof e?e:e.original).localeCompare("string"==typeof t?t:t.original)}};Jz=Zz([Xz(2,on),Xz(3,en),Xz(4,Dn)],Jz);var eH=function(e,t){return function(i,n){t(i,n,e)}};function tH(e){return e.toString()}class iH extends C{constructor(e){super(),this.model=e,this._markersData=new Map,this._register(b(()=>{this.model.deltaDecorations([...this._markersData.keys()],[]),this._markersData.clear()}))}update(e,t){const i=[...this._markersData.keys()];this._markersData.clear();const n=this.model.deltaDecorations(i,t);for(let t=0;tthis._onModelAdded(e)),this._register(e.onModelAdded(this._onModelAdded,this)),this._register(e.onModelRemoved(this._onModelRemoved,this)),this._register(this._markerService.onMarkerChanged(this._handleMarkerChange,this))}dispose(){super.dispose(),this._markerDecorations.forEach(e=>e.dispose()),this._markerDecorations.clear()}getMarker(e,t){const i=this._markerDecorations.get(tH(e));return i&&i.getMarker(t)||null}_handleMarkerChange(e){e.forEach(e=>{const t=this._markerDecorations.get(tH(e));t&&this._updateDecorations(t)})}_onModelAdded(e){const t=new iH(e);this._markerDecorations.set(tH(e.uri),t),this._updateDecorations(t)}_onModelRemoved(e){const t=this._markerDecorations.get(tH(e.uri));t&&(t.dispose(),this._markerDecorations.delete(tH(e.uri))),e.uri.scheme!==Cs.inMemory&&e.uri.scheme!==Cs.internal&&e.uri.scheme!==Cs.vscode||this._markerService&&this._markerService.read({resource:e.uri}).map(e=>e.owner).forEach(t=>this._markerService.remove(t,[e.uri]))}_updateDecorations(e){const t=this._markerService.read({resource:e.model.uri,take:500});let i=t.map(t=>({range:this._createDecorationRange(e.model,t),options:this._createDecorationOption(t)}));e.update(t,i)&&this._onDidChangeMarker.fire(e.model)}_createDecorationRange(e,t){let i=ro.lift(t);if(t.severity!==qS.Hint||this._hasMarkerTag(t,1)||this._hasMarkerTag(t,2)||(i=i.setEndPosition(i.startLineNumber,i.startColumn+2)),(i=e.validateRange(i)).isEmpty()){let t=e.getWordAtPosition(i.getStartPosition());if(t)i=new ro(i.startLineNumber,t.startColumn,i.endLineNumber,t.endColumn);else{let t=e.getLineLastNonWhitespaceColumn(i.startLineNumber)||e.getLineMaxColumn(i.startLineNumber);1===t||(i=i.endColumn>=t?new ro(i.startLineNumber,t-1,i.endLineNumber,t):new ro(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn+1))}}else if(t.endColumn===Number.MAX_VALUE&&1===t.startColumn&&i.startLineNumber===i.endLineNumber){let n=e.getLineFirstNonWhitespaceColumn(t.startLineNumber);n=0}};nH=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([eH(0,At),eH(1,YS)],nH);var oH=function(e,t){return function(i,n){t(i,n,e)}};let sH=class extends C{constructor(e,t){super(),this._contextKeyService=e,this._configurationService=t,this._accessibilitySupport=0,this._onDidChangeScreenReaderOptimized=new oe,this._accessibilityModeEnabledContext=uw.bindTo(this._contextKeyService);const i=()=>this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized());this._register(this._configurationService.onDidChangeConfiguration(e=>{e.affectsConfiguration("editor.accessibilitySupport")&&(i(),this._onDidChangeScreenReaderOptimized.fire())})),i(),this.onDidChangeScreenReaderOptimized(()=>i())}get onDidChangeScreenReaderOptimized(){return this._onDidChangeScreenReaderOptimized.event}isScreenReaderOptimized(){const e=this._configurationService.getValue("editor.accessibilitySupport");return"on"===e||"auto"===e&&2===this._accessibilitySupport}getAccessibilitySupport(){return this._accessibilitySupport}};sH=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([oH(0,en),oH(1,zL)],sH);var rH=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class aH{constructor(){this.mapTextToType=new Map,this.findText=""}writeText(e,t){return rH(this,void 0,void 0,(function*(){if(t)return void this.mapTextToType.set(t,e);try{return yield navigator.clipboard.writeText(e)}catch(e){console.error(e)}const i=document.activeElement,n=document.body.appendChild(Bu("textarea",{"aria-hidden":!0}));n.style.height="1px",n.style.width="1px",n.style.position="absolute",n.value=e,n.focus(),n.select(),document.execCommand("copy"),i instanceof HTMLElement&&i.focus(),document.body.removeChild(n)}))}readText(e){return rH(this,void 0,void 0,(function*(){if(e)return this.mapTextToType.get(e)||"";try{return yield navigator.clipboard.readText()}catch(e){return console.error(e),""}}))}readFindText(){return rH(this,void 0,void 0,(function*(){return this.findText}))}writeFindText(e){return rH(this,void 0,void 0,(function*(){this.findText=e}))}}var lH=function(e,t){return function(i,n){t(i,n,e)}},hH=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function cH(e){return e.scheme===Cs.file?e.fsPath:e.path}let dH=0;class uH{constructor(e,t,i,n,o,s,r){this.id=++dH,this.type=0,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabel=t,this.strResource=i,this.resourceLabels=[this.resourceLabel],this.strResources=[this.strResource],this.groupId=n,this.groupOrder=o,this.sourceId=s,this.sourceOrder=r,this.isValid=!0}setValid(e){this.isValid=e}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.isValid?" VALID":"INVALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class gH{constructor(e,t){this.resourceLabel=e,this.reason=t}}class pH{constructor(){this.elements=new Map}createMessage(){const e=[],i=[];for(const[,t]of this.elements)(0===t.reason?e:i).push(t.resourceLabel);let n=[];return e.length>0&&n.push(t(0,"The following files have been closed and modified on disk: {0}.",e.join(", "))),i.length>0&&n.push(t(0,"The following files have been modified in an incompatible way: {0}.",i.join(", "))),n.join("\n")}get size(){return this.elements.size}has(e){return this.elements.has(e)}set(e,t){this.elements.set(e,t)}delete(e){return this.elements.delete(e)}}class mH{constructor(e,t,i,n,o,s,r){this.id=++dH,this.type=1,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabels=t,this.strResources=i,this.groupId=n,this.groupOrder=o,this.sourceId=s,this.sourceOrder=r,this.removedResources=null,this.invalidatedResources=null}canSplit(){return"function"==typeof this.actual.split}removeResource(e,t,i){this.removedResources||(this.removedResources=new pH),this.removedResources.has(t)||this.removedResources.set(t,new gH(e,i))}setValid(e,t,i){i?this.invalidatedResources&&(this.invalidatedResources.delete(t),0===this.invalidatedResources.size&&(this.invalidatedResources=null)):(this.invalidatedResources||(this.invalidatedResources=new pH),this.invalidatedResources.has(t)||this.invalidatedResources.set(t,new gH(e,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?"INVALID":" VALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class fH{constructor(e,t){this.resourceLabel=e,this.strResource=t,this._past=[],this._future=[],this.locked=!1,this.versionId=1}dispose(){for(const e of this._past)1===e.type&&e.removeResource(this.resourceLabel,this.strResource,0);for(const e of this._future)1===e.type&&e.removeResource(this.resourceLabel,this.strResource,0);this.versionId++}toString(){let e=[];e.push(`* ${this.strResource}:`);for(let t=0;t=0;t--)e.push(` * [REDO] ${this._future[t]}`);return e.join("\n")}flushAllElements(){this._past=[],this._future=[],this.versionId++}_setElementValidFlag(e,t){1===e.type?e.setValid(this.resourceLabel,this.strResource,t):e.setValid(t)}setElementsValidFlag(e,t){for(const i of this._past)t(i.actual)&&this._setElementValidFlag(i,e);for(const i of this._future)t(i.actual)&&this._setElementValidFlag(i,e)}pushElement(e){for(const e of this._future)1===e.type&&e.removeResource(this.resourceLabel,this.strResource,1);this._future=[],this._past.push(e),this.versionId++}createSnapshot(e){const t=[];for(let e=0,i=this._past.length;e=0;e--)t.push(this._future[e].id);return new pI(e,t)}restoreSnapshot(e){const t=e.elements.length;let i=!0,n=0,o=-1;for(let s=0,r=this._past.length;s=t||r.id!==e.elements[n])&&(i=!1,o=0),i||1!==r.type||r.removeResource(this.resourceLabel,this.strResource,0)}let s=-1;for(let o=this._future.length-1;o>=0;o--,n++){const r=this._future[o];i&&(n>=t||r.id!==e.elements[n])&&(i=!1,s=o),i||1!==r.type||r.removeResource(this.resourceLabel,this.strResource,0)}-1!==o&&(this._past=this._past.slice(0,o)),-1!==s&&(this._future=this._future.slice(s+1)),this.versionId++}getElements(){const e=[],t=[];for(const t of this._past)e.push(t.actual);for(const e of this._future)t.push(e.actual);return{past:e,future:t}}getClosestPastElement(){return 0===this._past.length?null:this._past[this._past.length-1]}getSecondClosestPastElement(){return this._past.length<2?null:this._past[this._past.length-2]}getClosestFutureElement(){return 0===this._future.length?null:this._future[this._future.length-1]}hasPastElements(){return this._past.length>0}hasFutureElements(){return this._future.length>0}splitPastWorkspaceElement(e,t){for(let i=this._past.length-1;i>=0;i--)if(this._past[i]===e){t.has(this.strResource)?this._past[i]=t.get(this.strResource):this._past.splice(i,1);break}this.versionId++}splitFutureWorkspaceElement(e,t){for(let i=this._future.length-1;i>=0;i--)if(this._future[i]===e){t.has(this.strResource)?this._future[i]=t.get(this.strResource):this._future.splice(i,1);break}this.versionId++}moveBackward(e){this._past.pop(),this._future.push(e),this.versionId++}moveForward(e){this._future.pop(),this._past.push(e),this.versionId++}}class _H{constructor(e){this.editStacks=e,this._versionIds=[];for(let e=0,t=this.editStacks.length;et.sourceOrder)&&(t=s,i=n)}return[t,i]}canUndo(e){if(e instanceof fI){const[,t]=this._findClosestUndoElementWithSource(e.id);return!!t}const t=this.getUriComparisonKey(e);return!!this._editStacks.has(t)&&this._editStacks.get(t).hasPastElements()}_onError(e,t){n(e);for(const e of t.strResources)this.removeElements(e);this._notificationService.error(e)}_acquireLocks(e){for(const t of e.editStacks)if(t.locked)throw new Error("Cannot acquire edit stack lock");for(const t of e.editStacks)t.locked=!0;return()=>{for(const t of e.editStacks)t.locked=!1}}_safeInvokeWithLocks(e,t,i,n,o){const s=this._acquireLocks(i);let r;try{r=t()}catch(t){return s(),n.dispose(),this._onError(t,e)}return r?r.then(()=>(s(),n.dispose(),o()),t=>(s(),n.dispose(),this._onError(t,e))):(s(),n.dispose(),o())}_invokeWorkspacePrepare(e){return hH(this,void 0,void 0,(function*(){if(void 0===e.actual.prepareUndoRedo)return C.None;const t=e.actual.prepareUndoRedo();return void 0===t?C.None:t}))}_invokeResourcePrepare(e,t){if(1!==e.actual.type||void 0===e.actual.prepareUndoRedo)return t(C.None);const i=e.actual.prepareUndoRedo();return i?m(i)?t(i):i.then(e=>t(e)):t(C.None)}_getAffectedEditStacks(e){const t=[];for(const i of e.strResources)t.push(this._editStacks.get(i)||bH);return new _H(t)}_tryToSplitAndUndo(e,t,i,n){if(t.canSplit())return this._splitPastWorkspaceElement(t,i),this._notificationService.info(n),new CH(this._undo(e,0,!0));for(const e of t.strResources)this.removeElements(e);return this._notificationService.info(n),new CH}_checkWorkspaceUndo(e,i,n,o){if(i.removedResources)return this._tryToSplitAndUndo(e,i,i.removedResources,t(0,"Could not undo '{0}' across all files. {1}",i.label,i.removedResources.createMessage()));if(o&&i.invalidatedResources)return this._tryToSplitAndUndo(e,i,i.invalidatedResources,t(0,"Could not undo '{0}' across all files. {1}",i.label,i.invalidatedResources.createMessage()));const s=[];for(const e of n.editStacks)e.getClosestPastElement()!==i&&s.push(e.resourceLabel);if(s.length>0)return this._tryToSplitAndUndo(e,i,null,t(0,"Could not undo '{0}' across all files because changes were made to {1}",i.label,s.join(", ")));const r=[];for(const e of n.editStacks)e.locked&&r.push(e.resourceLabel);return r.length>0?this._tryToSplitAndUndo(e,i,null,t(0,"Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}",i.label,r.join(", "))):n.isValid()?null:this._tryToSplitAndUndo(e,i,null,t(0,"Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime",i.label))}_workspaceUndo(e,t,i){const n=this._getAffectedEditStacks(t),o=this._checkWorkspaceUndo(e,t,n,!1);return o?o.returnValue:this._confirmAndExecuteWorkspaceUndo(e,t,n,i)}_isPartOfUndoGroup(e){if(!e.groupId)return!1;for(const[,t]of this._editStacks){const i=t.getClosestPastElement();if(i){if(i===e){const i=t.getSecondClosestPastElement();if(i&&i.groupId===e.groupId)return!0}if(i.groupId===e.groupId)return!0}}return!1}_confirmAndExecuteWorkspaceUndo(e,i,n,o){return hH(this,void 0,void 0,(function*(){if(i.canSplit()&&!this._isPartOfUndoGroup(i)){const s=yield this._dialogService.show(hw.Info,t(0,"Would you like to undo '{0}' across all files?",i.label),[t(0,"Undo in {0} Files",n.editStacks.length),t(0,"Undo this File"),t(0,"Cancel")],{cancelId:2});if(2===s.choice)return;if(1===s.choice)return this._splitPastWorkspaceElement(i,null),this._undo(e,0,!0);const r=this._checkWorkspaceUndo(e,i,n,!1);if(r)return r.returnValue;o=!0}let s;try{s=yield this._invokeWorkspacePrepare(i)}catch(e){return this._onError(e,i)}const r=this._checkWorkspaceUndo(e,i,n,!0);if(r)return s.dispose(),r.returnValue;for(const e of n.editStacks)e.moveBackward(i);return this._safeInvokeWithLocks(i,()=>i.actual.undo(),n,s,()=>this._continueUndoInGroup(i.groupId,o))}))}_resourceUndo(e,i,n){if(i.isValid){if(!e.locked)return this._invokeResourcePrepare(i,t=>(e.moveBackward(i),this._safeInvokeWithLocks(i,()=>i.actual.undo(),new _H([e]),t,()=>this._continueUndoInGroup(i.groupId,n))));{const e=t(0,"Could not undo '{0}' because there is already an undo or redo operation running.",i.label);this._notificationService.info(e)}}else e.flushAllElements()}_findClosestUndoElementInGroup(e){if(!e)return[null,null];let t=null,i=null;for(const[n,o]of this._editStacks){const s=o.getClosestPastElement();s&&s.groupId===e&&(!t||s.groupOrder>t.groupOrder)&&(t=s,i=n)}return[t,i]}_continueUndoInGroup(e,t){if(!e)return;const[,i]=this._findClosestUndoElementInGroup(e);return i?this._undo(i,0,t):void 0}undo(e){if(e instanceof fI){const[,t]=this._findClosestUndoElementWithSource(e.id);return t?this._undo(t,e.id,!1):void 0}return this._undo("string"==typeof e?e:this.getUriComparisonKey(e),0,!1)}_undo(e,t=0,i){if(!this._editStacks.has(e))return;const n=this._editStacks.get(e),o=n.getClosestPastElement();if(o){if(o.groupId){const[e,n]=this._findClosestUndoElementInGroup(o.groupId);if(o!==e&&n)return this._undo(n,t,i)}if((o.sourceId!==t||o.confirmBeforeUndo)&&!i)return this._confirmAndContinueUndo(e,t,o);try{return 1===o.type?this._workspaceUndo(e,o,i):this._resourceUndo(n,o,i)}finally{}}}_confirmAndContinueUndo(e,i,n){return hH(this,void 0,void 0,(function*(){if(1!==(yield this._dialogService.show(hw.Info,t(0,"Would you like to undo '{0}'?",n.label),[t(0,"Undo"),t(0,"Cancel")],{cancelId:1})).choice)return this._undo(e,i,!0)}))}_findClosestRedoElementWithSource(e){if(!e)return[null,null];let t=null,i=null;for(const[n,o]of this._editStacks){const s=o.getClosestFutureElement();s&&s.sourceId===e&&(!t||s.sourceOrder0)return this._tryToSplitAndRedo(e,i,null,t(0,"Could not redo '{0}' across all files because changes were made to {1}",i.label,s.join(", ")));const r=[];for(const e of n.editStacks)e.locked&&r.push(e.resourceLabel);return r.length>0?this._tryToSplitAndRedo(e,i,null,t(0,"Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}",i.label,r.join(", "))):n.isValid()?null:this._tryToSplitAndRedo(e,i,null,t(0,"Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime",i.label))}_workspaceRedo(e,t){const i=this._getAffectedEditStacks(t),n=this._checkWorkspaceRedo(e,t,i,!1);return n?n.returnValue:this._executeWorkspaceRedo(e,t,i)}_executeWorkspaceRedo(e,t,i){return hH(this,void 0,void 0,(function*(){let n;try{n=yield this._invokeWorkspacePrepare(t)}catch(e){return this._onError(e,t)}const o=this._checkWorkspaceRedo(e,t,i,!0);if(o)return n.dispose(),o.returnValue;for(const e of i.editStacks)e.moveForward(t);return this._safeInvokeWithLocks(t,()=>t.actual.redo(),i,n,()=>this._continueRedoInGroup(t.groupId))}))}_resourceRedo(e,i){if(i.isValid){if(!e.locked)return this._invokeResourcePrepare(i,t=>(e.moveForward(i),this._safeInvokeWithLocks(i,()=>i.actual.redo(),new _H([e]),t,()=>this._continueRedoInGroup(i.groupId))));{const e=t(0,"Could not redo '{0}' because there is already an undo or redo operation running.",i.label);this._notificationService.info(e)}}else e.flushAllElements()}_findClosestRedoElementInGroup(e){if(!e)return[null,null];let t=null,i=null;for(const[n,o]of this._editStacks){const s=o.getClosestFutureElement();s&&s.groupId===e&&(!t||s.groupOrder=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([lH(0,zz),lH(1,cw)],vH);class CH{constructor(e){this.returnValue=e}}Yw(gI,vH);const wH=new qa(()=>{const e=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});return{collator:e,collatorIsNumeric:e.resolvedOptions().numeric}}),yH={},SH=new wD("quick-input-button-icon-");function LH(e){if(!e)return;let t;const i=e.dark.toString();return yH[i]?t=yH[i]:(Eu(`.${t=SH.nextId()}`,`background-image: ${Ku(e.light||e.dark)}`),Eu(`.vs-dark .${t}, .hc-black .${t}`,`background-image: ${Ku(e.dark)}`),yH[i]=t),t}const DH=Bu;class EH{constructor(e,t,i){this.os=t,this.options=i,this.domNode=Mu(e,DH(".monaco-keybinding")),this.didEverRender=!1,e.appendChild(this.domNode)}set(e,t){this.didEverRender&&this.keybinding===e&&EH.areSame(this.matches,t)||(this.keybinding=e,this.matches=t,this.render())}render(){if(Ud(this.domNode),this.keybinding){let[e,t]=this.keybinding.getParts();e&&this.renderPart(this.domNode,e,this.matches?this.matches.firstPart:null),t&&(Mu(this.domNode,DH("span.monaco-keybinding-key-chord-separator",void 0," ")),this.renderPart(this.domNode,t,this.matches?this.matches.chordPart:null)),this.domNode.title=this.keybinding.getAriaLabel()||""}else this.options&&this.options.renderUnboundKeybindings&&this.renderUnbound(this.domNode);this.didEverRender=!0}renderPart(e,t,i){const n=CW.modifierLabels[this.os];t.ctrlKey&&this.renderKey(e,n.ctrlKey,Boolean(null==i?void 0:i.ctrlKey),n.separator),t.shiftKey&&this.renderKey(e,n.shiftKey,Boolean(null==i?void 0:i.shiftKey),n.separator),t.altKey&&this.renderKey(e,n.altKey,Boolean(null==i?void 0:i.altKey),n.separator),t.metaKey&&this.renderKey(e,n.metaKey,Boolean(null==i?void 0:i.metaKey),n.separator);const o=t.keyLabel;o&&this.renderKey(e,o,Boolean(null==i?void 0:i.keyCode),"")}renderKey(e,t,i,n){Mu(e,DH("span.monaco-keybinding-key"+(i?".highlight":""),void 0,t)),n&&Mu(e,DH("span.monaco-keybinding-key-separator",void 0,n))}renderUnbound(e){Mu(e,DH("span.monaco-keybinding-key",void 0,t(0,"Unbound")))}static areSame(e,t){return e===t||!e&&!t||!!e&&!!t&&Ju(e.firstPart,t.firstPart)&&Ju(e.chordPart,t.chordPart)}}var xH=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},kH=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const NH=Bu;class IH{constructor(e){this.hidden=!1,this._onChecked=new oe,this.onChecked=this._onChecked.event,Object.assign(this,e)}get checked(){return!!this._checked}set checked(e){e!==this._checked&&(this._checked=e,this._onChecked.fire(e))}dispose(){this._onChecked.dispose()}}class TH{get templateId(){return TH.ID}renderTemplate(e){const t=Object.create(null);t.toDisposeElement=[],t.toDisposeTemplate=[],t.entry=Mu(e,NH(".quick-input-list-entry"));const i=Mu(t.entry,NH("label.quick-input-list-label"));t.toDisposeTemplate.push(Gd(i,Nu.CLICK,e=>{t.checkbox.offsetParent||e.preventDefault()})),t.checkbox=Mu(i,NH("input.quick-input-list-checkbox")),t.checkbox.type="checkbox",t.toDisposeTemplate.push(Gd(t.checkbox,Nu.CHANGE,e=>{t.element.checked=t.checkbox.checked}));const n=Mu(i,NH(".quick-input-list-rows")),o=Mu(n,NH(".quick-input-list-row")),s=Mu(n,NH(".quick-input-list-row"));t.label=new uE(o,{supportHighlights:!0,supportDescriptionHighlights:!0,supportIcons:!0});const r=Mu(o,NH(".quick-input-list-entry-keybinding"));t.keybinding=new EH(r,Z);const a=Mu(s,NH(".quick-input-list-label-meta"));return t.detail=new hE(a,!0),t.separator=Mu(t.entry,NH(".quick-input-list-separator")),t.actionBar=new ly(t.entry),t.actionBar.domNode.classList.add("quick-input-list-entry-action-bar"),t.toDisposeTemplate.push(t.actionBar),t}renderElement(e,t,i){i.toDisposeElement=f(i.toDisposeElement),i.element=e,i.checkbox.checked=e.checked,i.toDisposeElement.push(e.onChecked(e=>i.checkbox.checked=e));const{labelHighlights:n,descriptionHighlights:o,detailHighlights:s}=e,r=Object.create(null);r.matches=n||[],r.descriptionTitle=e.saneDescription,r.descriptionMatches=o||[],r.extraClasses=e.item.iconClasses,r.italic=e.item.italic,r.strikethrough=e.item.strikethrough,i.label.setLabel(e.saneLabel,e.saneDescription,r),i.keybinding.set(e.item.keybinding),i.detail.set(e.saneDetail,s),e.separator&&e.separator.label?(i.separator.textContent=e.separator.label,i.separator.style.display=""):i.separator.style.display="none",i.entry.classList.toggle("quick-input-list-separator-border",!!e.separator),i.actionBar.clear();const a=e.item.buttons;a&&a.length?(i.actionBar.push(a.map((t,i)=>{let n=t.iconClass||(t.iconPath?LH(t.iconPath):void 0);t.alwaysVisible&&(n=n?`${n} always-visible`:"always-visible");const o=new Pt(`id-${i}`,"",n,!0,()=>kH(this,void 0,void 0,(function*(){e.fireButtonTriggered({button:t,item:e.item})})));return o.tooltip=t.tooltip||"",o}),{icon:!0,label:!1}),i.entry.classList.add("has-actions")):i.entry.classList.remove("has-actions")}disposeElement(e,t,i){i.toDisposeElement=f(i.toDisposeElement)}disposeTemplate(e){e.toDisposeElement=f(e.toDisposeElement),e.toDisposeTemplate=f(e.toDisposeTemplate)}}TH.ID="listelement";class AH{getHeight(e){return e.saneDetail?44:22}getTemplateId(e){return TH.ID}}var MH;!function(e){e[e.First=1]="First",e[e.Second=2]="Second",e[e.Last=3]="Last",e[e.Next=4]="Next",e[e.Previous=5]="Previous",e[e.NextPage=6]="NextPage",e[e.PreviousPage=7]="PreviousPage"}(MH||(MH={}));class OH{constructor(e,t,i){this.parent=e,this.inputElements=[],this.elements=[],this.elementsToIndexes=new Map,this.matchOnDescription=!1,this.matchOnDetail=!1,this.matchOnLabel=!0,this.matchOnMeta=!0,this.sortByLabel=!0,this._onChangedAllVisibleChecked=new oe,this.onChangedAllVisibleChecked=this._onChangedAllVisibleChecked.event,this._onChangedCheckedCount=new oe,this.onChangedCheckedCount=this._onChangedCheckedCount.event,this._onChangedVisibleCount=new oe,this.onChangedVisibleCount=this._onChangedVisibleCount.event,this._onChangedCheckedElements=new oe,this.onChangedCheckedElements=this._onChangedCheckedElements.event,this._onButtonTriggered=new oe,this.onButtonTriggered=this._onButtonTriggered.event,this._onKeyDown=new oe,this.onKeyDown=this._onKeyDown.event,this._onLeave=new oe,this.onLeave=this._onLeave.event,this._fireCheckedEvents=!0,this.elementDisposables=[],this.disposables=[],this.id=t,this.container=Mu(this.parent,NH(".quick-input-list"));const n=new AH,o=new RH;this.list=i.createList("QuickInput",this.container,n,[new TH],{identityProvider:{getId:e=>e.saneLabel},setRowLineHeight:!1,multipleSelectionSupport:!1,horizontalScrolling:!1,accessibilityProvider:o}),this.list.getHTMLElement().id=t,this.disposables.push(this.list),this.disposables.push(this.list.onKeyDown(e=>{const t=new Rd(e);switch(t.keyCode){case 10:this.toggleCheckbox();break;case 31:(H?e.metaKey:e.ctrlKey)&&this.list.setFocus(la(this.list.length));break;case 16:const t=this.list.getFocus();1===t.length&&0===t[0]&&this._onLeave.fire();break;case 18:const i=this.list.getFocus();1===i.length&&i[0]===this.list.length-1&&this._onLeave.fire()}this._onKeyDown.fire(t)})),this.disposables.push(this.list.onMouseDown(e=>{2!==e.browserEvent.button&&e.browserEvent.preventDefault()})),this.disposables.push(jd(this.container,Nu.CLICK,e=>{(e.x||e.y)&&this._onLeave.fire()})),this.disposables.push(this.list.onMouseMiddleClick(e=>{this._onLeave.fire()})),this.disposables.push(this.list.onContextMenu(e=>{"number"==typeof e.index&&(e.browserEvent.preventDefault(),this.list.setSelection([e.index]))})),this.disposables.push(this._onChangedAllVisibleChecked,this._onChangedCheckedCount,this._onChangedVisibleCount,this._onChangedCheckedElements,this._onButtonTriggered,this._onLeave,this._onKeyDown)}get onDidChangeFocus(){return ie.map(this.list.onDidChangeFocus,e=>e.elements.map(e=>e.item))}get onDidChangeSelection(){return ie.map(this.list.onDidChangeSelection,e=>({items:e.elements.map(e=>e.item),event:e.browserEvent}))}getAllVisibleChecked(){return this.allVisibleChecked(this.elements,!1)}allVisibleChecked(e,t=!0){for(let i=0,n=e.length;i{t.hidden||(t.checked=e)})}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}setElements(e){this.elementDisposables=f(this.elementDisposables);const t=e=>this.fireButtonTriggered(e);this.inputElements=e,this.elements=e.reduce((i,n,o)=>{var s,r,a;if("separator"!==n.type){const l=o&&e[o-1],h=n.label&&n.label.replace(/\r?\n/g," "),c=n.meta&&n.meta.replace(/\r?\n/g," "),d=n.description&&n.description.replace(/\r?\n/g," "),u=n.detail&&n.detail.replace(/\r?\n/g," "),g=n.ariaLabel||[h,d,u].map(e=>e&&iA(e).text).filter(e=>!!e).join(", ");i.push(new IH({index:o,item:n,saneLabel:h,saneMeta:c,saneAriaLabel:g,saneDescription:d,saneDetail:u,labelHighlights:null===(s=n.highlights)||void 0===s?void 0:s.label,descriptionHighlights:null===(r=n.highlights)||void 0===r?void 0:r.description,detailHighlights:null===(a=n.highlights)||void 0===a?void 0:a.detail,checked:!1,separator:l&&"separator"===l.type?l:void 0,fireButtonTriggered:t}))}return i},[]),this.elementDisposables.push(...this.elements),this.elementDisposables.push(...this.elements.map(e=>e.onChecked(()=>this.fireCheckedEvents()))),this.elementsToIndexes=this.elements.reduce((e,t,i)=>(e.set(t.item,i),e),new Map),this.list.splice(0,this.list.length),this.list.splice(0,this.list.length,this.elements),this._onChangedVisibleCount.fire(this.elements.length)}getFocusedElements(){return this.list.getFocusedElements().map(e=>e.item)}setFocusedElements(e){if(this.list.setFocus(e.filter(e=>this.elementsToIndexes.has(e)).map(e=>this.elementsToIndexes.get(e))),e.length>0){const e=this.list.getFocus()[0];"number"==typeof e&&this.list.reveal(e)}}getActiveDescendant(){return this.list.getHTMLElement().getAttribute("aria-activedescendant")}setSelectedElements(e){this.list.setSelection(e.filter(e=>this.elementsToIndexes.has(e)).map(e=>this.elementsToIndexes.get(e)))}getCheckedElements(){return this.elements.filter(e=>e.checked).map(e=>e.item)}setCheckedElements(e){try{this._fireCheckedEvents=!1;const t=new Set;for(const i of e)t.add(i);for(const e of this.elements)e.checked=t.has(e.item)}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}set enabled(e){this.list.getHTMLElement().style.pointerEvents=e?"":"none"}focus(e){if(!this.list.length)return;switch(e===MH.Next&&this.list.getFocus()[0]===this.list.length-1&&(e=MH.First),e===MH.Previous&&0===this.list.getFocus()[0]&&(e=MH.Last),e===MH.Second&&this.list.length<2&&(e=MH.First),e){case MH.First:this.list.focusFirst();break;case MH.Second:this.list.focusNth(1);break;case MH.Last:this.list.focusLast();break;case MH.Next:this.list.focusNext();break;case MH.Previous:this.list.focusPrevious();break;case MH.NextPage:this.list.focusNextPage();break;case MH.PreviousPage:this.list.focusPreviousPage()}const t=this.list.getFocus()[0];"number"==typeof t&&this.list.reveal(t)}clearFocus(){this.list.setFocus([])}domFocus(){this.list.domFocus()}layout(e){this.list.getHTMLElement().style.maxHeight=e?`calc(${44*Math.floor(e/44)}px)`:"",this.list.layout()}filter(e){if(!(this.sortByLabel||this.matchOnLabel||this.matchOnDescription||this.matchOnDetail))return this.list.layout(),!1;e=e.trim(),this.elements.forEach(e&&(this.matchOnLabel||this.matchOnDescription||this.matchOnDetail)?t=>{const i=this.matchOnLabel?Re(nA(e,iA(t.saneLabel))):void 0,n=this.matchOnDescription?Re(nA(e,iA(t.saneDescription||""))):void 0,o=this.matchOnDetail?Re(nA(e,iA(t.saneDetail||""))):void 0,s=this.matchOnMeta?Re(nA(e,iA(t.saneMeta||""))):void 0;i||n||o||s?(t.labelHighlights=i,t.descriptionHighlights=n,t.detailHighlights=o,t.hidden=!1):(t.labelHighlights=void 0,t.descriptionHighlights=void 0,t.detailHighlights=void 0,t.hidden=!t.item.alwaysShow),t.separator=void 0}:e=>{e.labelHighlights=void 0,e.descriptionHighlights=void 0,e.detailHighlights=void 0,e.hidden=!1;const t=e.index&&this.inputElements[e.index-1];e.separator=t&&"separator"===t.type?t:void 0});const t=this.elements.filter(e=>!e.hidden);if(this.sortByLabel&&e){const i=e.toLowerCase();t.sort((e,t)=>(function n(e,t,i){const n=e.labelHighlights||[],o=t.labelHighlights||[];return n.length&&!o.length?-1:!n.length&&o.length?1:0===n.length&&0===o.length?0:function s(e,t,i){const n=e.toLowerCase(),o=t.toLowerCase(),s=function r(e,t,i){const n=e.toLowerCase(),o=t.toLowerCase(),s=n.startsWith(i),r=o.startsWith(i);if(s!==r)return s?-1:1;if(s&&r){if(n.lengtho.length)return 1}return 0}(e,t,i);if(s)return s;const a=n.endsWith(i);if(a!==o.endsWith(i))return a?-1:1;const l=function h(e,t,i=!1){const n=e||"",o=t||"",s=wH.value.collator.compare(n,o);return wH.value.collatorIsNumeric&&0===s&&n!==o?n(e.set(t.item,i),e),new Map),this.list.splice(0,this.list.length,t),this.list.setFocus([]),this.list.layout(),this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedVisibleCount.fire(t.length),!0}toggleCheckbox(){try{this._fireCheckedEvents=!1;const e=this.list.getFocusedElements(),t=this.allVisibleChecked(e);for(const i of e)i.checked=!t}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}display(e){this.container.style.display=e?"":"none"}isDisplayed(){return"none"!==this.container.style.display}dispose(){this.elementDisposables=f(this.elementDisposables),this.disposables=f(this.disposables)}fireCheckedEvents(){this._fireCheckedEvents&&(this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedCheckedCount.fire(this.getCheckedCount()),this._onChangedCheckedElements.fire(this.getCheckedElements()))}fireButtonTriggered(e){this._onButtonTriggered.fire(e)}style(e){this.list.style(e)}}xH([Rg],OH.prototype,"onDidChangeFocus",null),xH([Rg],OH.prototype,"onDidChangeSelection",null);class RH{getWidgetAriaLabel(){return t(0,"Quick Input")}getAriaLabel(e){return e.saneAriaLabel}getWidgetRole(){return"listbox"}getRole(){return"option"}}const PH=Bu,FH={inputBackground:uc.fromHex("#3C3C3C"),inputForeground:uc.fromHex("#CCCCCC"),inputValidationInfoBorder:uc.fromHex("#55AAFF"),inputValidationInfoBackground:uc.fromHex("#063B49"),inputValidationWarningBorder:uc.fromHex("#B89500"),inputValidationWarningBackground:uc.fromHex("#352A05"),inputValidationErrorBorder:uc.fromHex("#BE1100"),inputValidationErrorBackground:uc.fromHex("#5A1D1D")};class BH extends bb{constructor(e,t,i){super(),this.state="idle",this.maxHeight=Number.POSITIVE_INFINITY,this._onDidChange=this._register(new oe),this.onDidChange=this._onDidChange.event,this._onDidHeightChange=this._register(new oe),this.onDidHeightChange=this._onDidHeightChange.event,this.contextViewProvider=t,this.options=i||Object.create(null),Qu(this.options,FH,!1),this.message=null,this.placeholder=this.options.placeholder||"",this.ariaLabel=this.options.ariaLabel||"",this.inputBackground=this.options.inputBackground,this.inputForeground=this.options.inputForeground,this.inputBorder=this.options.inputBorder,this.inputValidationInfoBorder=this.options.inputValidationInfoBorder,this.inputValidationInfoBackground=this.options.inputValidationInfoBackground,this.inputValidationInfoForeground=this.options.inputValidationInfoForeground,this.inputValidationWarningBorder=this.options.inputValidationWarningBorder,this.inputValidationWarningBackground=this.options.inputValidationWarningBackground,this.inputValidationWarningForeground=this.options.inputValidationWarningForeground,this.inputValidationErrorBorder=this.options.inputValidationErrorBorder,this.inputValidationErrorBackground=this.options.inputValidationErrorBackground,this.inputValidationErrorForeground=this.options.inputValidationErrorForeground,this.options.validationOptions&&(this.validation=this.options.validationOptions.validation),this.element=Mu(e,PH(".monaco-inputbox.idle"));let n=this.options.flexibleHeight?"textarea":"input",o=Mu(this.element,PH(".ibwrapper"));if(this.input=Mu(o,PH(n+".input.empty")),this.input.setAttribute("autocorrect","off"),this.input.setAttribute("autocapitalize","off"),this.input.setAttribute("spellcheck","false"),this.onfocus(this.input,()=>this.element.classList.add("synthetic-focus")),this.onblur(this.input,()=>this.element.classList.remove("synthetic-focus")),this.options.flexibleHeight){this.maxHeight="number"==typeof this.options.flexibleMaxHeight?this.options.flexibleMaxHeight:Number.POSITIVE_INFINITY,this.mirror=Mu(o,PH("div.mirror")),this.mirror.innerText=" ",this.scrollableElement=new Hb(this.element,{vertical:1}),this.options.flexibleWidth&&(this.input.setAttribute("wrap","off"),this.mirror.style.whiteSpace="pre",this.mirror.style.wordWrap="initial"),Mu(e,this.scrollableElement.getDomNode()),this._register(this.scrollableElement),this._register(this.scrollableElement.onScroll(e=>this.input.scrollTop=e.scrollTop));const t=ie.filter(Ed(document,"selectionchange"),()=>{const e=document.getSelection();return(null==e?void 0:e.anchorNode)===o});this._register(t(this.updateScrollDimensions,this)),this._register(this.onDidHeightChange(this.updateScrollDimensions,this))}else this.input.type=this.options.type||"text",this.input.setAttribute("wrap","off");this.ariaLabel&&this.input.setAttribute("aria-label",this.ariaLabel),this.placeholder&&this.setPlaceHolder(this.placeholder),this.oninput(this.input,()=>this.onValueChange()),this.onblur(this.input,()=>this.onBlur()),this.onfocus(this.input,()=>this.onFocus()),this.ignoreGesture(this.input),setTimeout(()=>this.updateMirror(),0),this.options.actions&&(this.actionbar=this._register(new ly(this.element)),this.actionbar.push(this.options.actions,{icon:!0,label:!1})),this.applyStyles()}onBlur(){this._hideMessage()}onFocus(){this._showMessage()}setPlaceHolder(e){this.placeholder=e,this.input.setAttribute("placeholder",e),this.input.title=e}setAriaLabel(e){this.ariaLabel=e,e?this.input.setAttribute("aria-label",this.ariaLabel):this.input.removeAttribute("aria-label")}getAriaLabel(){return this.ariaLabel}get inputElement(){return this.input}get value(){return this.input.value}set value(e){this.input.value!==e&&(this.input.value=e,this.onValueChange())}get height(){return"number"==typeof this.cachedHeight?this.cachedHeight:mu(this.element)}focus(){this.input.focus()}blur(){this.input.blur()}hasFocus(){return document.activeElement===this.input}select(e=null){this.input.select(),e&&(this.input.setSelectionRange(e.start,e.end),e.end===this.input.value.length&&(this.input.scrollLeft=this.input.scrollWidth))}isSelectionAtEnd(){return this.input.selectionEnd===this.input.value.length&&this.input.selectionStart===this.input.selectionEnd}enable(){this.input.removeAttribute("disabled")}disable(){this.blur(),this.input.disabled=!0,this._hideMessage()}get width(){return uu(this.input)}set width(e){if(this.options.flexibleHeight&&this.options.flexibleWidth){let t=0;this.mirror&&(t=(parseFloat(this.mirror.style.paddingLeft||"")||0)+(parseFloat(this.mirror.style.paddingRight||"")||0)),this.input.style.width=e-t+"px"}else this.input.style.width=e+"px";this.mirror&&(this.mirror.style.width=e+"px")}set paddingRight(e){this.options.flexibleHeight&&this.options.flexibleWidth?this.input.style.width=`calc(100% - ${e}px)`:this.input.style.paddingRight=e+"px",this.mirror&&(this.mirror.style.paddingRight=e+"px")}updateScrollDimensions(){if("number"!=typeof this.cachedContentHeight||"number"!=typeof this.cachedHeight||!this.scrollableElement)return;const e=this.input.scrollTop;this.scrollableElement.setScrollDimensions({scrollHeight:this.cachedContentHeight,height:this.cachedHeight}),this.scrollableElement.setScrollPosition({scrollTop:e})}showMessage(e,t){this.message=e,this.element.classList.remove("idle"),this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add(this.classForType(e.type));const i=this.stylesForType(this.message.type);this.element.style.border=i.border?`1px solid ${i.border}`:"",(this.hasFocus()||t)&&this._showMessage()}hideMessage(){this.message=null,this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add("idle"),this._hideMessage(),this.applyStyles()}validate(){let e=null;return this.validation&&((e=this.validation(this.value))?(this.inputElement.setAttribute("aria-invalid","true"),this.showMessage(e)):this.inputElement.hasAttribute("aria-invalid")&&(this.inputElement.removeAttribute("aria-invalid"),this.hideMessage())),null==e?void 0:e.type}stylesForType(e){switch(e){case 1:return{border:this.inputValidationInfoBorder,background:this.inputValidationInfoBackground,foreground:this.inputValidationInfoForeground};case 2:return{border:this.inputValidationWarningBorder,background:this.inputValidationWarningBackground,foreground:this.inputValidationWarningForeground};default:return{border:this.inputValidationErrorBorder,background:this.inputValidationErrorBackground,foreground:this.inputValidationErrorForeground}}}classForType(e){switch(e){case 1:return"info";case 2:return"warning";default:return"error"}}_showMessage(){if(!this.contextViewProvider||!this.message)return;let e,i,n=()=>e.style.width=uu(this.element)+"px";this.contextViewProvider.showContextView({getAnchor:()=>this.element,anchorAlignment:1,render:t=>{if(!this.message)return null;e=Mu(t,PH(".monaco-inputbox-container")),n();const i={inline:!0,className:"monaco-inputbox-message"},o=this.message.formatContent?function s(e,t={}){const i=hA(t);return function e(t,i,n){let o;if(2===i.type)o=document.createTextNode(i.content||"");else if(3===i.type)o=document.createElement("b");else if(4===i.type)o=document.createElement("i");else if(5===i.type&&n){const e=document.createElement("a");e.href="#",n.disposeables.add(Gd(e,"click",e=>{n.callback(String(i.index),e)})),o=e}else 7===i.type?o=document.createElement("br"):1===i.type&&(o=t);o&&t!==o&&t.appendChild(o),o&&Array.isArray(i.children)&&i.children.forEach(t=>{e(o,t,n)})}(i,function n(e){const t={type:1,children:[]};let i=0,n=t;const o=[],s=new cA(e);for(;!s.eos();){let e=s.next();const t="\\"===e&&0!==dA(s.peek());if(t&&(e=s.next()),t||0===dA(e)||e!==s.peek())if("\n"===e)2===n.type&&(n=o.pop()),n.children.push({type:7});else if(2!==n.type){const t={type:2,content:e};n.children.push(t),o.push(n),n=t}else n.content+=e;else{s.advance(),2===n.type&&(n=o.pop());const t=dA(e);if(n.type===t||5===n.type&&6===t)n=o.pop();else{const e={type:t,children:[]};5===t&&(e.index=i,i++),n.children.push(e),o.push(n),n=e}}}return 2===n.type&&(n=o.pop()),t}(e),t.actionHandler),i}(this.message.content,i):function r(e,t={}){const i=hA(t);return i.textContent=e,i}(this.message.content,i);o.classList.add(this.classForType(this.message.type));const a=this.stylesForType(this.message.type);return o.style.backgroundColor=a.background?a.background.toString():"",o.style.color=a.foreground?a.foreground.toString():"",o.style.border=a.border?`1px solid ${a.border}`:"",Mu(e,o),null},onHide:()=>{this.state="closed"},layout:n}),MS(i=t(0,3===this.message.type?"Error: {0}":2===this.message.type?"Warning: {0}":"Info: {0}",this.message.content)),this.state="open"}_hideMessage(){this.contextViewProvider&&("open"===this.state&&this.contextViewProvider.hideContextView(),this.state="idle")}onValueChange(){this._onDidChange.fire(this.value),this.validate(),this.updateMirror(),this.input.classList.toggle("empty",!this.value),"open"===this.state&&this.contextViewProvider&&this.contextViewProvider.layout()}updateMirror(){if(!this.mirror)return;const e=this.value,t=10===e.charCodeAt(e.length-1)?" ":"";e+t?this.mirror.textContent=e+t:this.mirror.innerText=" ",this.layout()}style(e){this.inputBackground=e.inputBackground,this.inputForeground=e.inputForeground,this.inputBorder=e.inputBorder,this.inputValidationInfoBackground=e.inputValidationInfoBackground,this.inputValidationInfoForeground=e.inputValidationInfoForeground,this.inputValidationInfoBorder=e.inputValidationInfoBorder,this.inputValidationWarningBackground=e.inputValidationWarningBackground,this.inputValidationWarningForeground=e.inputValidationWarningForeground,this.inputValidationWarningBorder=e.inputValidationWarningBorder,this.inputValidationErrorBackground=e.inputValidationErrorBackground,this.inputValidationErrorForeground=e.inputValidationErrorForeground,this.inputValidationErrorBorder=e.inputValidationErrorBorder,this.applyStyles()}applyStyles(){const e=this.inputBackground?this.inputBackground.toString():"",t=this.inputForeground?this.inputForeground.toString():"",i=this.inputBorder?this.inputBorder.toString():"";this.element.style.backgroundColor=e,this.element.style.color=t,this.input.style.backgroundColor="inherit",this.input.style.color=t,this.element.style.borderWidth=i?"1px":"",this.element.style.borderStyle=i?"solid":"",this.element.style.borderColor=i}layout(){if(!this.mirror)return;const e=this.cachedContentHeight;this.cachedContentHeight=mu(this.mirror),e!==this.cachedContentHeight&&(this.cachedHeight=Math.min(this.cachedContentHeight,this.maxHeight),this.input.style.height=this.cachedHeight+"px",this._onDidHeightChange.fire(this.cachedContentHeight))}insertAtCursor(e){const t=this.inputElement,i=t.selectionStart,n=t.selectionEnd,o=t.value;null!==i&&null!==n&&(this.value=o.substr(0,i)+e+o.substr(n),t.setSelectionRange(i+1,i+1),this.layout())}dispose(){this._hideMessage(),this.message=null,this.actionbar&&this.actionbar.dispose(),super.dispose()}}const WH=Bu;class VH extends C{constructor(e){super(),this.parent=e,this.onKeyDown=e=>jd(this.inputBox.inputElement,Nu.KEY_DOWN,t=>{e(new Rd(t))}),this.onMouseDown=e=>jd(this.inputBox.inputElement,Nu.MOUSE_DOWN,t=>{e(new Vd(t))}),this.onDidChange=e=>this.inputBox.onDidChange(e),this.container=Mu(this.parent,WH(".quick-input-box")),this.inputBox=this._register(new BH(this.container,void 0))}get value(){return this.inputBox.value}set value(e){this.inputBox.value=e}select(e=null){this.inputBox.select(e)}isSelectionAtEnd(){return this.inputBox.isSelectionAtEnd()}get placeholder(){return this.inputBox.inputElement.getAttribute("placeholder")||""}set placeholder(e){this.inputBox.setPlaceHolder(e)}get ariaLabel(){return this.inputBox.getAriaLabel()}set ariaLabel(e){this.inputBox.setAriaLabel(e)}get password(){return"password"===this.inputBox.inputElement.type}set password(e){this.inputBox.inputElement.type=e?"password":"text"}setAttribute(e,t){this.inputBox.inputElement.setAttribute(e,t)}removeAttribute(e){this.inputBox.inputElement.removeAttribute(e)}showDecoration(e){e===hw.Ignore?this.inputBox.hideMessage():this.inputBox.showMessage({type:e===hw.Info?1:e===hw.Warning?2:3,content:""})}stylesForType(e){return this.inputBox.stylesForType(e===hw.Info?1:e===hw.Warning?2:3)}setFocus(){this.inputBox.focus()}layout(){this.inputBox.layout()}style(e){this.inputBox.style(e)}}const zH="done",HH="active",UH="infinite",KH="discrete",$H={progressBarBackground:uc.fromHex("#0E70C0")};class jH extends C{constructor(e,t){super(),this.options=t||Object.create(null),Qu(this.options,$H,!1),this.workedVal=0,this.progressBarBackground=this.options.progressBarBackground,this._register(this.showDelayedScheduler=new $a(()=>Wu(this.element),0)),this.create(e)}create(e){this.element=document.createElement("div"),this.element.classList.add("monaco-progress-container"),this.element.setAttribute("role","progressbar"),this.element.setAttribute("aria-valuemin","0"),e.appendChild(this.element),this.bit=document.createElement("div"),this.bit.classList.add("progress-bit"),this.element.appendChild(this.bit),this.applyStyles()}off(){this.bit.style.width="inherit",this.bit.style.opacity="1",this.element.classList.remove(HH,UH,KH),this.workedVal=0,this.totalWork=void 0}stop(){return this.doDone(!1)}doDone(e){return this.element.classList.add(zH),this.element.classList.contains(UH)?(this.bit.style.opacity="0",e?setTimeout(()=>this.off(),200):this.off()):(this.bit.style.width="inherit",e?setTimeout(()=>this.off(),200):this.off()),this}infinite(){return this.bit.style.width="2%",this.bit.style.opacity="1",this.element.classList.remove(KH,zH),this.element.classList.add(HH,UH),this}getContainer(){return this.element}style(e){this.progressBarBackground=e.progressBarBackground,this.applyStyles()}applyStyles(){if(this.bit){const e=this.progressBarBackground?this.progressBarBackground.toString():"";this.bit.style.backgroundColor=e}}}const qH={buttonBackground:uc.fromHex("#0E639C"),buttonHoverBackground:uc.fromHex("#006BB3"),buttonForeground:uc.white};class GH extends C{constructor(e,t){super(),this._onDidClick=this._register(new oe),this.options=t||Object.create(null),Qu(this.options,qH,!1),this.buttonForeground=this.options.buttonForeground,this.buttonBackground=this.options.buttonBackground,this.buttonHoverBackground=this.options.buttonHoverBackground,this.buttonSecondaryForeground=this.options.buttonSecondaryForeground,this.buttonSecondaryBackground=this.options.buttonSecondaryBackground,this.buttonSecondaryHoverBackground=this.options.buttonSecondaryHoverBackground,this.buttonBorder=this.options.buttonBorder,this._element=document.createElement("a"),this._element.classList.add("monaco-button"),this._element.tabIndex=0,this._element.setAttribute("role","button"),e.appendChild(this._element),this._register(Fg.addTarget(this._element)),[Nu.CLICK,Pg.Tap].forEach(e=>{this._register(jd(this._element,e,e=>{this.enabled?this._onDidClick.fire(e):Iu.stop(e)}))}),this._register(jd(this._element,Nu.KEY_DOWN,e=>{const t=new Rd(e);let i=!1;this.enabled&&(t.equals(3)||t.equals(10))?(this._onDidClick.fire(e),i=!0):t.equals(9)&&(this._element.blur(),i=!0),i&&Iu.stop(t,!0)})),this._register(jd(this._element,Nu.MOUSE_OVER,e=>{this._element.classList.contains("disabled")||this.setHoverBackground()})),this._register(jd(this._element,Nu.MOUSE_OUT,e=>{this.applyStyles()})),this.focusTracker=this._register(Au(this._element)),this._register(this.focusTracker.onDidFocus(()=>this.setHoverBackground())),this._register(this.focusTracker.onDidBlur(()=>this.applyStyles())),this.applyStyles()}get onDidClick(){return this._onDidClick.event}setHoverBackground(){let e;(e=this.options.secondary?this.buttonSecondaryHoverBackground?this.buttonSecondaryHoverBackground.toString():null:this.buttonHoverBackground?this.buttonHoverBackground.toString():null)&&(this._element.style.backgroundColor=e)}style(e){this.buttonForeground=e.buttonForeground,this.buttonBackground=e.buttonBackground,this.buttonHoverBackground=e.buttonHoverBackground,this.buttonSecondaryForeground=e.buttonSecondaryForeground,this.buttonSecondaryBackground=e.buttonSecondaryBackground,this.buttonSecondaryHoverBackground=e.buttonSecondaryHoverBackground,this.buttonBorder=e.buttonBorder,this.applyStyles()}applyStyles(){if(this._element){let e,t;this.options.secondary?(t=this.buttonSecondaryForeground?this.buttonSecondaryForeground.toString():"",e=this.buttonSecondaryBackground?this.buttonSecondaryBackground.toString():""):(t=this.buttonForeground?this.buttonForeground.toString():"",e=this.buttonBackground?this.buttonBackground.toString():"");const i=this.buttonBorder?this.buttonBorder.toString():"";this._element.style.color=t,this._element.style.backgroundColor=e,this._element.style.borderWidth=i?"1px":"",this._element.style.borderStyle=i?"solid":"",this._element.style.borderColor=i}}get element(){return this._element}set label(e){this._element.classList.add("monaco-text-button"),this.options.supportIcons?Ou(this._element,..._L(e)):this._element.textContent=e,"string"==typeof this.options.title?this._element.title=this.options.title:this.options.title&&(this._element.title=e)}set enabled(e){e?(this._element.classList.remove("disabled"),this._element.setAttribute("aria-disabled",String(!1)),this._element.tabIndex=0):(this._element.classList.add("disabled"),this._element.setAttribute("aria-disabled",String(!0)))}get enabled(){return!this._element.classList.contains("disabled")}}var YH=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):function t(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const ZH=Bu,XH={iconClass:dn("quick-input-back",un.arrowLeft).classNames,tooltip:t(0,"Back"),handle:-1};class QH extends C{constructor(e){super(),this.ui=e,this.visible=!1,this._enabled=!0,this._busy=!1,this._ignoreFocusOut=!1,this._buttons=[],this.buttonsUpdated=!1,this.onDidTriggerButtonEmitter=this._register(new oe),this.onDidHideEmitter=this._register(new oe),this.onDisposeEmitter=this._register(new oe),this.visibleDisposables=this._register(new v),this.onDidHide=this.onDidHideEmitter.event}get title(){return this._title}set title(e){this._title=e,this.update()}get description(){return this._description}set description(e){this._description=e,this.update()}get step(){return this._steps}set step(e){this._steps=e,this.update()}get totalSteps(){return this._totalSteps}set totalSteps(e){this._totalSteps=e,this.update()}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this.update()}get contextKey(){return this._contextKey}set contextKey(e){this._contextKey=e,this.update()}get busy(){return this._busy}set busy(e){this._busy=e,this.update()}get ignoreFocusOut(){return this._ignoreFocusOut}set ignoreFocusOut(e){this._ignoreFocusOut=e,this.update()}get buttons(){return this._buttons}set buttons(e){this._buttons=e,this.buttonsUpdated=!0,this.update()}show(){this.visible||(this.visibleDisposables.add(this.ui.onDidTriggerButton(e=>{-1!==this.buttons.indexOf(e)&&this.onDidTriggerButtonEmitter.fire(e)})),this.ui.show(this),this.visible=!0,this.update())}hide(){this.visible&&this.ui.hide()}didHide(){this.visible=!1,this.visibleDisposables.clear(),this.onDidHideEmitter.fire()}update(){if(!this.visible)return;const e=this.getTitle();e&&this.ui.title.textContent!==e?this.ui.title.textContent=e:e||" "===this.ui.title.innerHTML||(this.ui.title.innerText=" ;");const t=this.getDescription();if(this.ui.description1.textContent!==t&&(this.ui.description1.textContent=t),this.ui.description2.textContent!==t&&(this.ui.description2.textContent=t),this.busy&&!this.busyDelay&&(this.busyDelay=new Ua,this.busyDelay.setIfNotSet(()=>{this.visible&&this.ui.progressBar.infinite()},800)),!this.busy&&this.busyDelay&&(this.ui.progressBar.stop(),this.busyDelay.cancel(),this.busyDelay=void 0),this.buttonsUpdated){this.buttonsUpdated=!1,this.ui.leftActionBar.clear();const e=this.buttons.filter(e=>e===XH);this.ui.leftActionBar.push(e.map((e,t)=>{const i=new Pt(`id-${t}`,"",e.iconClass||LH(e.iconPath),!0,()=>YH(this,void 0,void 0,(function*(){this.onDidTriggerButtonEmitter.fire(e)})));return i.tooltip=e.tooltip||"",i}),{icon:!0,label:!1}),this.ui.rightActionBar.clear();const t=this.buttons.filter(e=>e!==XH);this.ui.rightActionBar.push(t.map((e,t)=>{const i=new Pt(`id-${t}`,"",e.iconClass||LH(e.iconPath),!0,()=>YH(this,void 0,void 0,(function*(){this.onDidTriggerButtonEmitter.fire(e)})));return i.tooltip=e.tooltip||"",i}),{icon:!0,label:!1})}this.ui.ignoreFocusOut=this.ignoreFocusOut,this.ui.setEnabled(this.enabled),this.ui.setContextKey(this.contextKey)}getTitle(){return this.title&&this.step?`${this.title} (${this.getSteps()})`:this.title?this.title:this.step?this.getSteps():""}getDescription(){return this.description||""}getSteps(){return this.step&&this.totalSteps?t(0,"{0}/{1}",this.step,this.totalSteps):this.step?String(this.step):""}showMessageDecoration(e){if(this.ui.inputBox.showDecoration(e),e===hw.Error){const t=this.ui.inputBox.stylesForType(e);this.ui.message.style.color=t.foreground?`${t.foreground}`:"",this.ui.message.style.backgroundColor=t.background?`${t.background}`:"",this.ui.message.style.border=t.border?`1px solid ${t.border}`:"",this.ui.message.style.paddingBottom="4px"}else this.ui.message.style.color="",this.ui.message.style.backgroundColor="",this.ui.message.style.border="",this.ui.message.style.paddingBottom=""}dispose(){this.hide(),this.onDisposeEmitter.fire(),super.dispose()}}class JH extends QH{constructor(){super(...arguments),this._value="",this.onDidChangeValueEmitter=this._register(new oe),this.onDidAcceptEmitter=this._register(new oe),this.onDidCustomEmitter=this._register(new oe),this._items=[],this.itemsUpdated=!1,this._canSelectMany=!1,this._canAcceptInBackground=!1,this._matchOnDescription=!1,this._matchOnDetail=!1,this._matchOnLabel=!0,this._sortByLabel=!0,this._autoFocusOnList=!0,this._itemActivation=this.ui.isScreenReaderOptimized()?PL.NONE:PL.FIRST,this._activeItems=[],this.activeItemsUpdated=!1,this.activeItemsToConfirm=[],this.onDidChangeActiveEmitter=this._register(new oe),this._selectedItems=[],this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=[],this.onDidChangeSelectionEmitter=this._register(new oe),this.onDidTriggerItemButtonEmitter=this._register(new oe),this.valueSelectionUpdated=!0,this._ok="default",this._customButton=!1,this.filterValue=e=>e,this.onDidChangeValue=this.onDidChangeValueEmitter.event,this.onDidAccept=this.onDidAcceptEmitter.event,this.onDidChangeActive=this.onDidChangeActiveEmitter.event,this.onDidChangeSelection=this.onDidChangeSelectionEmitter.event,this.onDidTriggerItemButton=this.onDidTriggerItemButtonEmitter.event}get quickNavigate(){return this._quickNavigate}set quickNavigate(e){this._quickNavigate=e,this.update()}get value(){return this._value}set value(e){this._value=e||"",this.update()}set ariaLabel(e){this._ariaLabel=e,this.update()}get ariaLabel(){return this._ariaLabel}get placeholder(){return this._placeholder}set placeholder(e){this._placeholder=e,this.update()}get items(){return this._items}set items(e){this._items=e,this.itemsUpdated=!0,this.update()}get canSelectMany(){return this._canSelectMany}set canSelectMany(e){this._canSelectMany=e,this.update()}get canAcceptInBackground(){return this._canAcceptInBackground}set canAcceptInBackground(e){this._canAcceptInBackground=e}get matchOnDescription(){return this._matchOnDescription}set matchOnDescription(e){this._matchOnDescription=e,this.update()}get matchOnDetail(){return this._matchOnDetail}set matchOnDetail(e){this._matchOnDetail=e,this.update()}get matchOnLabel(){return this._matchOnLabel}set matchOnLabel(e){this._matchOnLabel=e,this.update()}get sortByLabel(){return this._sortByLabel}set sortByLabel(e){this._sortByLabel=e,this.update()}get autoFocusOnList(){return this._autoFocusOnList}set autoFocusOnList(e){this._autoFocusOnList=e,this.update()}get itemActivation(){return this._itemActivation}set itemActivation(e){this._itemActivation=e}get activeItems(){return this._activeItems}set activeItems(e){this._activeItems=e,this.activeItemsUpdated=!0,this.update()}get selectedItems(){return this._selectedItems}set selectedItems(e){this._selectedItems=e,this.selectedItemsUpdated=!0,this.update()}get keyMods(){return this._quickNavigate?RL:this.ui.keyMods}set valueSelection(e){this._valueSelection=e,this.valueSelectionUpdated=!0,this.update()}get validationMessage(){return this._validationMessage}set validationMessage(e){this._validationMessage=e,this.update()}get customButton(){return this._customButton}set customButton(e){this._customButton=e,this.update()}get customLabel(){return this._customButtonLabel}set customLabel(e){this._customButtonLabel=e,this.update()}get customHover(){return this._customButtonHover}set customHover(e){this._customButtonHover=e,this.update()}get ok(){return this._ok}set ok(e){this._ok=e,this.update()}get hideInput(){return!!this._hideInput}set hideInput(e){this._hideInput=e,this.update()}trySelectFirst(){this.autoFocusOnList&&(this.canSelectMany||this.ui.list.focus(MH.First))}show(){this.visible||(this.visibleDisposables.add(this.ui.inputBox.onDidChange(e=>{e!==this.value&&(this._value=e,this.ui.list.filter(this.filterValue(this.ui.inputBox.value))&&this.trySelectFirst(),this.onDidChangeValueEmitter.fire(e))})),this.visibleDisposables.add(this.ui.inputBox.onMouseDown(e=>{this.autoFocusOnList||this.ui.list.clearFocus()})),this.visibleDisposables.add((this._hideInput?this.ui.list:this.ui.inputBox).onKeyDown(e=>{switch(e.keyCode){case 18:this.ui.list.focus(MH.Next),this.canSelectMany&&this.ui.list.domFocus(),Iu.stop(e,!0);break;case 16:this.ui.list.getFocusedElements().length?this.ui.list.focus(MH.Previous):this.ui.list.focus(MH.Last),this.canSelectMany&&this.ui.list.domFocus(),Iu.stop(e,!0);break;case 12:this.ui.list.focus(MH.NextPage),this.canSelectMany&&this.ui.list.domFocus(),Iu.stop(e,!0);break;case 11:this.ui.list.focus(MH.PreviousPage),this.canSelectMany&&this.ui.list.domFocus(),Iu.stop(e,!0);break;case 17:if(!this._canAcceptInBackground)return;if(!this.ui.inputBox.isSelectionAtEnd())return;this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.onDidAcceptEmitter.fire({inBackground:!0}));break;case 14:!e.ctrlKey&&!e.metaKey||e.shiftKey||e.altKey||(this.ui.list.focus(MH.First),Iu.stop(e,!0));break;case 13:!e.ctrlKey&&!e.metaKey||e.shiftKey||e.altKey||(this.ui.list.focus(MH.Last),Iu.stop(e,!0))}})),this.visibleDisposables.add(this.ui.onDidAccept(()=>{!this.canSelectMany&&this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems)),this.onDidAcceptEmitter.fire({inBackground:!1})})),this.visibleDisposables.add(this.ui.onDidCustom(()=>{this.onDidCustomEmitter.fire()})),this.visibleDisposables.add(this.ui.list.onDidChangeFocus(e=>{this.activeItemsUpdated||this.activeItemsToConfirm!==this._activeItems&&Zr(e,this._activeItems,(e,t)=>e===t)||(this._activeItems=e,this.onDidChangeActiveEmitter.fire(e))})),this.visibleDisposables.add(this.ui.list.onDidChangeSelection(({items:e,event:t})=>{this.canSelectMany?e.length&&this.ui.list.setSelectedElements([]):this.selectedItemsToConfirm!==this._selectedItems&&Zr(e,this._selectedItems,(e,t)=>e===t)||(this._selectedItems=e,this.onDidChangeSelectionEmitter.fire(e),e.length&&this.onDidAcceptEmitter.fire({inBackground:t instanceof MouseEvent&&1===t.button}))})),this.visibleDisposables.add(this.ui.list.onChangedCheckedElements(e=>{this.canSelectMany&&(this.selectedItemsToConfirm!==this._selectedItems&&Zr(e,this._selectedItems,(e,t)=>e===t)||(this._selectedItems=e,this.onDidChangeSelectionEmitter.fire(e)))})),this.visibleDisposables.add(this.ui.list.onButtonTriggered(e=>this.onDidTriggerItemButtonEmitter.fire(e))),this.visibleDisposables.add(this.registerQuickNavigation()),this.valueSelectionUpdated=!0),super.show()}registerQuickNavigation(){return jd(this.ui.container,Nu.KEY_UP,e=>{if(this.canSelectMany||!this._quickNavigate)return;const t=new Rd(e),i=t.keyCode;this._quickNavigate.keybindings.some(e=>{const[n,o]=e.getParts();return!(o||(n.shiftKey&&4===i?t.ctrlKey||t.altKey||t.metaKey:!(n.altKey&&6===i||n.ctrlKey&&5===i||n.metaKey&&57===i)))})&&(this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.onDidAcceptEmitter.fire({inBackground:!1})),this._quickNavigate=void 0)})}update(){if(!this.visible)return;let e=!1,t=!1;this._hideInput&&this._items.length>0&&(this.ui.isScreenReaderOptimized()?t=!0:e=!0),this.ui.container.classList.toggle("hidden-input",e&&!this.description);const i={title:!!this.title||!!this.step||!!this.buttons.length,description:!!this.description,checkAll:this.canSelectMany&&!this._hideCheckAll,checkBox:this.canSelectMany,inputBox:!e,progressBar:!e,visibleCount:!0,count:this.canSelectMany,ok:"default"===this.ok?this.canSelectMany:this.ok,list:!0,message:!!this.validationMessage,customButton:this.customButton};if(this.ui.setVisibilities(i),super.update(),this.ui.inputBox.value!==this.value&&(this.ui.inputBox.value=this.value),this.valueSelectionUpdated&&(this.valueSelectionUpdated=!1,this.ui.inputBox.select(this._valueSelection&&{start:this._valueSelection[0],end:this._valueSelection[1]})),this.ui.inputBox.placeholder!==(this.placeholder||"")&&(this.ui.inputBox.placeholder=this.placeholder||""),t)this.ui.inputBox.ariaLabel="";else{const e=this.ariaLabel||this.placeholder||JH.DEFAULT_ARIA_LABEL;this.ui.inputBox.ariaLabel!==e&&(this.ui.inputBox.ariaLabel=e)}if(this.ui.list.matchOnDescription=this.matchOnDescription,this.ui.list.matchOnDetail=this.matchOnDetail,this.ui.list.matchOnLabel=this.matchOnLabel,this.ui.list.sortByLabel=this.sortByLabel,this.itemsUpdated)switch(this.itemsUpdated=!1,this.ui.list.setElements(this.items),this.ui.list.filter(this.filterValue(this.ui.inputBox.value)),this.ui.checkAll.checked=this.ui.list.getAllVisibleChecked(),this.ui.visibleCount.setCount(this.ui.list.getVisibleCount()),this.ui.count.setCount(this.ui.list.getCheckedCount()),this._itemActivation){case PL.NONE:this._itemActivation=PL.FIRST;break;case PL.SECOND:this.ui.list.focus(MH.Second),this._itemActivation=PL.FIRST;break;case PL.LAST:this.ui.list.focus(MH.Last),this._itemActivation=PL.FIRST;break;default:this.trySelectFirst()}this.ui.container.classList.contains("show-checkboxes")!==!!this.canSelectMany&&(this.canSelectMany?this.ui.list.clearFocus():this.trySelectFirst()),this.activeItemsUpdated&&(this.activeItemsUpdated=!1,this.activeItemsToConfirm=this._activeItems,this.ui.list.setFocusedElements(this.activeItems),this.activeItemsToConfirm===this._activeItems&&(this.activeItemsToConfirm=null)),this.selectedItemsUpdated&&(this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=this._selectedItems,this.canSelectMany?this.ui.list.setCheckedElements(this.selectedItems):this.ui.list.setSelectedElements(this.selectedItems),this.selectedItemsToConfirm===this._selectedItems&&(this.selectedItemsToConfirm=null));const n=this.validationMessage||"";this._lastValidationMessage!==n&&(this._lastValidationMessage=n,Ou(this.ui.message,..._L(Kt(n))),this.showMessageDecoration(this.validationMessage?hw.Error:hw.Ignore)),this.ui.customButton.label=this.customLabel||"",this.ui.customButton.element.title=this.customHover||"",this.ui.setComboboxAccessibility(!0),i.inputBox||(this.ui.list.domFocus(),this.canSelectMany&&this.ui.list.focus(MH.First))}}JH.DEFAULT_ARIA_LABEL=t(0,"Type to narrow down results.");class eU extends C{constructor(e){super(),this.options=e,this.comboboxAccessibility=!1,this.enabled=!0,this.onDidAcceptEmitter=this._register(new oe),this.onDidCustomEmitter=this._register(new oe),this.onDidTriggerButtonEmitter=this._register(new oe),this.keyMods={ctrlCmd:!1,alt:!1},this.controller=null,this.onShowEmitter=this._register(new oe),this.onShow=this.onShowEmitter.event,this.onHideEmitter=this._register(new oe),this.onHide=this.onHideEmitter.event,this.idPrefix=e.idPrefix,this.parentElement=e.container,this.styles=e.styles,this.registerKeyModsListeners()}registerKeyModsListeners(){const e=e=>{this.keyMods.ctrlCmd=e.ctrlKey||e.metaKey,this.keyMods.alt=e.altKey};this._register(jd(window,Nu.KEY_DOWN,e,!0)),this._register(jd(window,Nu.KEY_UP,e,!0)),this._register(jd(window,Nu.MOUSE_DOWN,e,!0))}getUI(){if(this.ui)return this.ui;const e=Mu(this.parentElement,ZH(".quick-input-widget.show-file-icons"));e.tabIndex=-1,e.style.display="none";const i=Su(e),n=Mu(e,ZH(".quick-input-titlebar")),o=this._register(new ly(n));o.domNode.classList.add("quick-input-left-action-bar");const s=Mu(n,ZH(".quick-input-title")),r=this._register(new ly(n));r.domNode.classList.add("quick-input-right-action-bar");const a=Mu(e,ZH(".quick-input-description")),l=Mu(e,ZH(".quick-input-header")),h=Mu(l,ZH("input.quick-input-check-all"));h.type="checkbox",this._register(Gd(h,Nu.CHANGE,e=>{L.setAllVisibleChecked(h.checked)})),this._register(jd(h,Nu.CLICK,e=>{(e.x||e.y)&&g.setFocus()}));const c=Mu(l,ZH(".quick-input-description")),d=Mu(l,ZH(".quick-input-and-message")),u=Mu(d,ZH(".quick-input-filter")),g=this._register(new VH(u));g.setAttribute("aria-describedby",`${this.idPrefix}message`);const p=Mu(u,ZH(".quick-input-visible-count"));p.setAttribute("aria-live","polite"),p.setAttribute("aria-atomic","true");const m=new fE(p,{countFormat:t(0,"{0} Results")}),f=Mu(u,ZH(".quick-input-count"));f.setAttribute("aria-live","polite");const _=new fE(f,{countFormat:t(0,"{0} Selected")}),b=Mu(l,ZH(".quick-input-action")),v=new GH(b);v.label=t(0,"OK"),this._register(v.onDidClick(e=>{this.onDidAcceptEmitter.fire()}));const C=Mu(l,ZH(".quick-input-action")),w=new GH(C);w.label=t(0,"Custom"),this._register(w.onDidClick(e=>{this.onDidCustomEmitter.fire()}));const y=Mu(d,ZH(`#${this.idPrefix}message.quick-input-message`)),S=new jH(e);S.getContainer().classList.add("quick-input-progress");const L=this._register(new OH(e,this.idPrefix+"list",this.options));this._register(L.onChangedAllVisibleChecked(e=>{h.checked=e})),this._register(L.onChangedVisibleCount(e=>{m.setCount(e)})),this._register(L.onChangedCheckedCount(e=>{_.setCount(e)})),this._register(L.onLeave(()=>{setTimeout(()=>{g.setFocus(),this.controller instanceof JH&&this.controller.canSelectMany&&L.clearFocus()},0)})),this._register(L.onDidChangeFocus(()=>{this.comboboxAccessibility&&this.getUI().inputBox.setAttribute("aria-activedescendant",this.getUI().list.getActiveDescendant()||"")}));const D=Au(e);return this._register(D),this._register(jd(e,Nu.FOCUS,e=>{this.previousFocusElement=e.relatedTarget instanceof HTMLElement?e.relatedTarget:void 0},!0)),this._register(D.onDidBlur(()=>{this.getUI().ignoreFocusOut||this.options.ignoreFocusOut()||this.hide(),this.previousFocusElement=void 0})),this._register(jd(e,Nu.FOCUS,e=>{g.setFocus()})),this._register(jd(e,Nu.KEY_DOWN,t=>{const i=new Rd(t);switch(i.keyCode){case 3:Iu.stop(t,!0),this.onDidAcceptEmitter.fire();break;case 9:Iu.stop(t,!0),this.hide();break;case 2:if(!i.altKey&&!i.ctrlKey&&!i.metaKey){const n=[".action-label.codicon"];e.classList.contains("show-checkboxes")?n.push("input"):n.push("input[type=text]"),this.getUI().list.isDisplayed()&&n.push(".monaco-list");const o=e.querySelectorAll(n.join(", "));i.shiftKey&&i.target===o[0]?(Iu.stop(t,!0),o[o.length-1].focus()):i.shiftKey||i.target!==o[o.length-1]||(Iu.stop(t,!0),o[0].focus())}}})),this.ui={container:e,styleSheet:i,leftActionBar:o,titleBar:n,title:s,description1:a,description2:c,rightActionBar:r,checkAll:h,filterContainer:u,inputBox:g,visibleCountContainer:p,visibleCount:m,countContainer:f,count:_,okContainer:b,ok:v,message:y,customButtonContainer:C,customButton:w,progressBar:S,list:L,onDidAccept:this.onDidAcceptEmitter.event,onDidCustom:this.onDidCustomEmitter.event,onDidTriggerButton:this.onDidTriggerButtonEmitter.event,ignoreFocusOut:!1,keyMods:this.keyMods,isScreenReaderOptimized:()=>this.options.isScreenReaderOptimized(),show:e=>this.show(e),hide:()=>this.hide(),setVisibilities:e=>this.setVisibilities(e),setComboboxAccessibility:e=>this.setComboboxAccessibility(e),setEnabled:e=>this.setEnabled(e),setContextKey:e=>this.options.setContextKey(e)},this.updateStyles(),this.ui}pick(e,t={},i=Aa.None){return new Promise((n,o)=>{let s=e=>{s=n,t.onKeyMods&&t.onKeyMods(r.keyMods),n(e)};if(i.isCancellationRequested)return void s(void 0);const r=this.createQuickPick();let a;const l=[r,r.onDidAccept(()=>{if(r.canSelectMany)s(r.selectedItems.slice()),r.hide();else{const e=r.activeItems[0];e&&(s(e),r.hide())}}),r.onDidChangeActive(e=>{const i=e[0];i&&t.onDidFocus&&t.onDidFocus(i)}),r.onDidChangeSelection(e=>{if(!r.canSelectMany){const t=e[0];t&&(s(t),r.hide())}}),r.onDidTriggerItemButton(e=>t.onDidTriggerItemButton&&t.onDidTriggerItemButton(Object.assign(Object.assign({},e),{removeItem:()=>{const t=r.items.indexOf(e.item);if(-1!==t){const e=r.items.slice();e.splice(t,1),r.items=e}}}))),r.onDidChangeValue(e=>{!a||e||1===r.activeItems.length&&r.activeItems[0]===a||(r.activeItems=[a])}),i.onCancellationRequested(()=>{r.hide()}),r.onDidHide(()=>{f(l),s(void 0)})];r.canSelectMany=!!t.canPickMany,r.placeholder=t.placeHolder,r.ignoreFocusOut=!!t.ignoreFocusLost,r.matchOnDescription=!!t.matchOnDescription,r.matchOnDetail=!!t.matchOnDetail,r.matchOnLabel=void 0===t.matchOnLabel||t.matchOnLabel,r.autoFocusOnList=void 0===t.autoFocusOnList||t.autoFocusOnList,r.quickNavigate=t.quickNavigate,r.contextKey=t.contextKey,r.busy=!0,Promise.all([e,t.activeItem]).then(([e,t])=>{a=t,r.busy=!1,r.items=e,r.canSelectMany&&(r.selectedItems=e.filter(e=>"separator"!==e.type&&e.picked)),a&&(r.activeItems=[a])}),r.show(),Promise.resolve(e).then(void 0,e=>{o(e),r.hide()})})}createQuickPick(){const e=this.getUI();return new JH(e)}show(e){const i=this.getUI();this.onShowEmitter.fire();const n=this.controller;this.controller=e,n&&n.didHide(),this.setEnabled(!0),i.leftActionBar.clear(),i.title.textContent="",i.description1.textContent="",i.description2.textContent="",i.rightActionBar.clear(),i.checkAll.checked=!1,i.inputBox.placeholder="",i.inputBox.password=!1,i.inputBox.showDecoration(hw.Ignore),i.visibleCount.setCount(0),i.count.setCount(0),Ou(i.message),i.progressBar.stop(),i.list.setElements([]),i.list.matchOnDescription=!1,i.list.matchOnDetail=!1,i.list.matchOnLabel=!0,i.list.sortByLabel=!0,i.ignoreFocusOut=!1,this.setComboboxAccessibility(!1),i.inputBox.ariaLabel="";const o=this.options.backKeybindingLabel();XH.tooltip=o?t(0,"Back ({0})",o):t(0,"Back"),i.container.style.display="",this.updateLayout(),i.inputBox.setFocus()}setVisibilities(e){const t=this.getUI();t.title.style.display=e.title?"":"none",t.description1.style.display=e.description&&(e.inputBox||e.checkAll)?"":"none",t.description2.style.display=!e.description||e.inputBox||e.checkAll?"none":"",t.checkAll.style.display=e.checkAll?"":"none",t.filterContainer.style.display=e.inputBox?"":"none",t.visibleCountContainer.style.display=e.visibleCount?"":"none",t.countContainer.style.display=e.count?"":"none",t.okContainer.style.display=e.ok?"":"none",t.customButtonContainer.style.display=e.customButton?"":"none",t.message.style.display=e.message?"":"none",t.progressBar.getContainer().style.display=e.progressBar?"":"none",t.list.display(!!e.list),t.container.classList[e.checkBox?"add":"remove"]("show-checkboxes"),this.updateLayout()}setComboboxAccessibility(e){if(e!==this.comboboxAccessibility){const t=this.getUI();this.comboboxAccessibility=e,this.comboboxAccessibility?(t.inputBox.setAttribute("role","combobox"),t.inputBox.setAttribute("aria-haspopup","true"),t.inputBox.setAttribute("aria-autocomplete","list"),t.inputBox.setAttribute("aria-activedescendant",t.list.getActiveDescendant()||"")):(t.inputBox.removeAttribute("role"),t.inputBox.removeAttribute("aria-haspopup"),t.inputBox.removeAttribute("aria-autocomplete"),t.inputBox.removeAttribute("aria-activedescendant"))}}setEnabled(e){if(e!==this.enabled){this.enabled=e;for(const t of this.getUI().leftActionBar.viewItems)t.getAction().enabled=e;for(const t of this.getUI().rightActionBar.viewItems)t.getAction().enabled=e;this.getUI().checkAll.disabled=!e,this.getUI().ok.enabled=e,this.getUI().list.enabled=e}}hide(){var e;const t=this.controller;if(t){const i=!(null===(e=this.ui)||void 0===e?void 0:e.container.contains(document.activeElement));this.controller=null,this.onHideEmitter.fire(),this.getUI().container.style.display="none",i||(this.previousFocusElement&&this.previousFocusElement.offsetParent?(this.previousFocusElement.focus(),this.previousFocusElement=void 0):this.options.returnFocus()),t.didHide()}}layout(e,t){this.dimension=e,this.titleBarOffset=t,this.updateLayout()}updateLayout(){if(this.ui){this.ui.container.style.top=`${this.titleBarOffset}px`;const e=this.ui.container.style,t=Math.min(.62*this.dimension.width,eU.MAX_WIDTH);e.width=t+"px",e.marginLeft="-"+t/2+"px",this.ui.inputBox.layout(),this.ui.list.layout(this.dimension&&.4*this.dimension.height)}}applyStyles(e){this.styles=e,this.updateStyles()}updateStyles(){if(this.ui){const{quickInputTitleBackground:e,quickInputBackground:t,quickInputForeground:i,contrastBorder:n,widgetShadow:o}=this.styles.widget;this.ui.titleBar.style.backgroundColor=e?e.toString():"",this.ui.container.style.backgroundColor=t?t.toString():"",this.ui.container.style.color=i?i.toString():"",this.ui.container.style.border=n?`1px solid ${n}`:"",this.ui.container.style.boxShadow=o?`0 0 8px 2px ${o}`:"",this.ui.inputBox.style(this.styles.inputBox),this.ui.count.style(this.styles.countBadge),this.ui.ok.style(this.styles.button),this.ui.customButton.style(this.styles.button),this.ui.progressBar.style(this.styles.progressBar),this.ui.list.style(this.styles.list);const s=[];this.styles.list.pickerGroupBorder&&s.push(`.quick-input-list .quick-input-list-entry { border-top-color: ${this.styles.list.pickerGroupBorder}; }`),this.styles.list.pickerGroupForeground&&s.push(`.quick-input-list .quick-input-list-separator { color: ${this.styles.list.pickerGroupForeground}; }`);const r=s.join("\n");r!==this.ui.styleSheet.textContent&&(this.ui.styleSheet.textContent=r)}}}var tU;eU.MAX_WIDTH=600,function(e){e[e.PRESERVE=0]="PRESERVE",e[e.LAST=1]="LAST"}(tU||(tU={})),an.add("workbench.contributions.quickaccess",new class{constructor(){this.providers=[],this.defaultProvider=void 0}registerQuickAccessProvider(e){return 0===e.prefix.length?this.defaultProvider=e:this.providers.push(e),this.providers.sort((e,t)=>t.prefix.length-e.prefix.length),b(()=>{this.providers.splice(this.providers.indexOf(e),1),this.defaultProvider===e&&(this.defaultProvider=void 0)})}getQuickAccessProviders(){return ta([this.defaultProvider,...this.providers])}getQuickAccessProvider(e){return e&&this.providers.find(t=>e.startsWith(t.prefix))||this.defaultProvider}});var iU=function(e,t){return function(i,n){t(i,n,e)}};let nU=class extends C{constructor(e,t){super(),this.quickInputService=e,this.instantiationService=t,this.registry=an.as("workbench.contributions.quickaccess"),this.mapProviderToDescriptor=new Map,this.lastAcceptedPickerValues=new Map,this.visibleQuickAccess=void 0}show(e="",t){var i;const[n,o]=this.getOrInstantiateProvider(e),s=this.visibleQuickAccess,r=null==s?void 0:s.descriptor;if(s&&o&&r===o)return e===o.prefix||(null==t?void 0:t.preserveValue)||(s.picker.value=e),void this.adjustValueSelection(s.picker,o,t);if(o&&!(null==t?void 0:t.preserveValue)){let t=void 0;if(s&&r&&r!==o){const e=s.value.substr(r.prefix.length);e&&(t=`${o.prefix}${e}`)}if(!t){const e=null==n?void 0:n.defaultFilterValue;e===tU.LAST?t=this.lastAcceptedPickerValues.get(o):"string"==typeof e&&(t=`${o.prefix}${e}`)}"string"==typeof t&&(e=t)}const a=new v,l=a.add(this.quickInputService.createQuickPick());l.value=e,this.adjustValueSelection(l,o,t),l.placeholder=null==o?void 0:o.placeholder,l.quickNavigate=null==t?void 0:t.quickNavigateConfiguration,l.hideInput=!!l.quickNavigate&&!s,("number"==typeof(null==t?void 0:t.itemActivation)||(null==t?void 0:t.quickNavigateConfiguration))&&(l.itemActivation=null!==(i=null==t?void 0:t.itemActivation)&&void 0!==i?i:PL.SECOND),l.contextKey=null==o?void 0:o.contextKey,l.filterValue=e=>e.substring(o?o.prefix.length:0),(null==o?void 0:o.placeholder)&&(l.ariaLabel=null==o?void 0:o.placeholder);const h=this.registerPickerListeners(l,n,o,e,a);n&&a.add(n.provide(l,h)),l.show()}adjustValueSelection(e,t,i){var n;let o;o=(null==i?void 0:i.preserveValue)?[e.value.length,e.value.length]:[null!==(n=null==t?void 0:t.prefix.length)&&void 0!==n?n:0,e.value.length],e.valueSelection=o}registerPickerListeners(e,t,i,n,o){const s=this.visibleQuickAccess={picker:e,descriptor:i,value:n};o.add(b(()=>{s===this.visibleQuickAccess&&(this.visibleQuickAccess=void 0)})),o.add(e.onDidChangeValue(e=>{const[i]=this.getOrInstantiateProvider(e);i!==t?this.show(e,{preserveValue:!0}):s.value=e})),i&&o.add(e.onDidAccept(()=>{this.lastAcceptedPickerValues.set(i,e.value)}));const r=o.add(new Oa);return mv(e.onDidHide)(()=>{0===e.selectedItems.length&&r.cancel(),o.dispose()}),r.token}getOrInstantiateProvider(e){const t=this.registry.getQuickAccessProvider(e);if(!t)return[void 0,void 0];let i=this.mapProviderToDescriptor.get(t);return i||(i=this.instantiationService.createInstance(t.ctor),this.mapProviderToDescriptor.set(t,i)),[i,t]}};nU=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([iU(0,FL),iU(1,Et)],nU);var oU=function(e,t){return function(i,n){t(i,n,e)}};let sU=class extends wn{constructor(e,t,i,n,o){super(i),this.instantiationService=e,this.contextKeyService=t,this.accessibilityService=n,this.layoutService=o,this.contexts=new Map}get controller(){return this._controller||(this._controller=this._register(this.createController())),this._controller}get quickAccess(){return this._quickAccess||(this._quickAccess=this._register(this.instantiationService.createInstance(nU))),this._quickAccess}createController(e=this.layoutService,t){var i,n;const o={idPrefix:"quickInput_",container:e.container,ignoreFocusOut:()=>!1,isScreenReaderOptimized:()=>this.accessibilityService.isScreenReaderOptimized(),backKeybindingLabel:()=>void 0,setContextKey:e=>this.setContextKey(e),returnFocus:()=>e.focus(),createList:(e,t,i,n,o)=>this.instantiationService.createInstance(QN,e,t,i,n,o),styles:this.computeStyles()},s=this._register(new eU(Object.assign(Object.assign({},o),t)));return s.layout(e.dimension,null!==(n=null===(i=e.offset)||void 0===i?void 0:i.top)&&void 0!==n?n:0),this._register(e.onDidLayout(t=>{var i,n;return s.layout(t,null!==(n=null===(i=e.offset)||void 0===i?void 0:i.top)&&void 0!==n?n:0)})),this._register(s.onShow(()=>this.resetContextKeys())),this._register(s.onHide(()=>this.resetContextKeys())),s}setContextKey(e){let t;e&&((t=this.contexts.get(e))||(t=new Ji(e,!1).bindTo(this.contextKeyService),this.contexts.set(e,t))),t&&t.get()||(this.resetContextKeys(),t&&t.set(!0))}resetContextKeys(){this.contexts.forEach(e=>{e.get()&&e.reset()})}pick(e,t={},i=Aa.None){return this.controller.pick(e,t,i)}createQuickPick(){return this.controller.createQuickPick()}updateStyles(){this.controller.applyStyles(this.computeStyles())}computeStyles(){return{widget:Object.assign({},bE(this.theme,{quickInputBackground:Zm,quickInputForeground:Xm,quickInputTitleBackground:Qm,contrastBorder:sm,widgetShadow:hm})),inputBox:bE(this.theme,{inputForeground:dm,inputBackground:cm,inputBorder:um,inputValidationInfoBackground:gm,inputValidationInfoForeground:pm,inputValidationInfoBorder:mm,inputValidationWarningBackground:fm,inputValidationWarningForeground:_m,inputValidationWarningBorder:bm,inputValidationErrorBackground:vm,inputValidationErrorForeground:Cm,inputValidationErrorBorder:wm}),countBadge:bE(this.theme,{badgeBackground:xm,badgeForeground:km,badgeBorder:sm}),button:bE(this.theme,{buttonForeground:Lm,buttonBackground:Dm,buttonHoverBackground:Em,buttonBorder:sm}),progressBar:bE(this.theme,{progressBarBackground:Mm}),list:bE(this.theme,{listBackground:Zm,listInactiveFocusForeground:Ef,listInactiveFocusBackground:Jm,listFocusOutline:rm,listInactiveFocusOutline:rm,pickerGroupBorder:tf,pickerGroupForeground:ef})}}};sU=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r}([oU(0,Et),oU(1,en),oU(2,pn),oU(3,dw),oU(4,Wz)],sU);var rU=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},aU=function(e,t){return function(i,n){t(i,n,e)}};let lU=class extends sU{constructor(e,t,i,n,o,s){super(t,i,n,o,s),this.host=void 0;const r=cU.get(e);this.host={_serviceBrand:void 0,get container(){return r.widget.getDomNode()},get dimension(){return e.getLayoutInfo()},get onDidLayout(){return e.onDidLayoutChange},focus:()=>e.focus()}}createController(){return super.createController(this.host)}};lU=rU([aU(1,Et),aU(2,en),aU(3,pn),aU(4,dw),aU(5,Wz)],lU);let hU=class{constructor(e,t){this.instantiationService=e,this.codeEditorService=t,this.mapEditorToService=new Map}get activeService(){const e=this.codeEditorService.getFocusedCodeEditor();if(!e)throw new Error("Quick input service needs a focused editor to work.");let t=this.mapEditorToService.get(e);if(!t){const i=t=this.instantiationService.createInstance(lU,e);this.mapEditorToService.set(e,t),mv(e.onDidDispose)(()=>{i.dispose(),this.mapEditorToService.delete(e)})}return t}get quickAccess(){return this.activeService.quickAccess}pick(e,t={},i=Aa.None){return this.activeService.pick(e,t,i)}createQuickPick(){return this.activeService.createQuickPick()}};hU=rU([aU(0,Et),aU(1,It)],hU);class cU{constructor(e){this.editor=e,this.widget=new dU(this.editor)}static get(e){return e.getContribution(cU.ID)}dispose(){this.widget.dispose()}}cU.ID="editor.controller.quickInput";class dU{constructor(e){this.codeEditor=e,this.domNode=document.createElement("div"),this.codeEditor.addOverlayWidget(this)}getId(){return dU.ID}getDomNode(){return this.domNode}getPosition(){return{preference:2}}dispose(){this.codeEditor.removeOverlayWidget(this)}}var uU,gU,pU;dU.ID="editor.contrib.quickInputWidget",Jn(cU.ID,cU),function(e){const t=new aw;class i{constructor(e,t){this._serviceId=e,this._factory=t,this._value=null}get id(){return this._serviceId}get(e){if(!this._value){if(e&&(this._value=e[this._serviceId.toString()]),this._value||(this._value=this._factory(e)),!this._value)throw new Error("Service "+this._serviceId+" is missing!");t.set(this._serviceId,this._value)}return this._value}}e.LazyStaticService=i;let n=[];function o(e,t){let o=new i(e,t);return n.push(o),o}e.init=function s(e){let t=new aw;for(const[e,i]of function i(){return Gw}())t.set(e,i);for(let i in e)e.hasOwnProperty(i)&&t.set(kt(i),e[i]);n.forEach(i=>t.set(i.id,i.get(e)));let o=new $z(t,!0);return t.set(Et,o),[t,o]},e.instantiationService=o(Et,()=>new $z(t,!0));const r=new PW;e.configurationService=o(zL,()=>r),e.resourceConfigurationService=o(HM,()=>new FW(r)),e.resourcePropertiesService=o(UM,()=>new BW(r)),e.contextService=o(kO,()=>new VW),e.labelService=o(_E,()=>new UW),e.telemetryService=o(Kn,()=>new WW),e.dialogService=o(zz,()=>new TW),e.notificationService=o(cw,()=>new AW),e.markerService=o(YS,()=>new Yz),e.modeService=o(nT,e=>new dV),e.standaloneThemeService=o(jP,()=>new cz),e.logService=o(PM,()=>new zM(new VM)),e.undoRedoService=o(gI,t=>new vH(e.dialogService.get(t),e.notificationService.get(t))),e.modelService=o(At,t=>new xV(e.configurationService.get(t),e.resourcePropertiesService.get(t),e.standaloneThemeService.get(t),e.logService.get(t),e.undoRedoService.get(t))),e.markerDecorationsService=o(Sd,t=>new nH(e.modelService.get(t),e.markerService.get(t))),e.codeEditorService=o(It,t=>new UV(e.standaloneThemeService.get(t))),e.editorProgressService=o(Iy,()=>new IW),e.storageService=o(kL,()=>new TL),e.editorWorkerService=o(Sy,t=>new MB(e.modelService.get(t),e.resourceConfigurationService.get(t),e.logService.get(t)))}(uU||(uU={}));class mU extends C{constructor(e,t){super();const[i,n]=uU.init(t);this._serviceCollection=i,this._instantiationService=n;const o=this.get(zL),s=this.get(cw),r=this.get(Kn),a=this.get(pn),l=this.get(PM);let h=(e,i)=>{let n=null;return t&&(n=t[e.toString()]),n||(n=i()),this._serviceCollection.set(e,n),n},c=h(en,()=>this._register(new Cz(o)));h(dw,()=>new sH(c,o)),h(xN,()=>new kN(a));let d=h(on,()=>new MW(this._instantiationService)),u=h(FS,()=>this._register(new OW(c,d,r,s,l,e))),g=h(Wz,()=>new KW(uU.codeEditorService.get(It),e));h(FL,()=>new hU(n,uU.codeEditorService.get(It)));let p=h(Ly,()=>this._register(new Vz(g)));h(ky,()=>new aH),h(Dy,()=>{const e=new Bz(r,s,p,u,a);return e.configure({blockMouse:!1}),this._register(e)}),h(Dn,()=>new Qz(d)),h(gS,()=>new HW(uU.modelService.get(At)))}get(e){let t=this._serviceCollection.get(e);if(!t)throw new Error("Missing service "+e);return t}set(e,t){this._serviceCollection.set(e,t)}has(e){return this._serviceCollection.has(e)}}function fU(e,t,i){let n=new mU(e,t),o=null;n.has(Ot)||(o=new NW(uU.modelService.get()),n.set(Ot,o)),n.has(vT)||n.set(vT,new ZF(n.get(It),n.get(on)));let s=i(n);return o&&o.setEditor(s),s}function _U(e,t,i){return fU(e,i||{},i=>new ZW(e,t,i,i.get(Et),i.get(It),i.get(on),i.get(en),i.get(FS),i.get(Ly),i.get(jP),i.get(cw),i.get(zL),i.get(dw),i.get(At),i.get(nT)))}function bU(e){return uU.codeEditorService.get().onCodeEditorAdd(t=>{e(t)})}function vU(e,t,i){return fU(e,i||{},i=>new XW(e,t,i,i.get(Et),i.get(en),i.get(FS),i.get(Ly),i.get(Sy),i.get(It),i.get(jP),i.get(cw),i.get(zL),i.get(Dy),i.get(Iy),i.get(ky)))}function CU(e,t){return new QF(e,t)}function wU(e,t,i){return QW(uU.modelService.get(),uU.modeService.get(),e,t,i)}function yU(e,t){uU.modelService.get().setMode(e,uU.modeService.get().create(t))}function SU(e,t,i){e&&uU.markerService.get().changeOne(t,e.uri,i)}function LU(e){return uU.markerService.get().read(e)}function DU(e){return uU.markerService.get().onMarkerChanged(e)}function EU(e){return uU.modelService.get().getModel(e)}function xU(){return uU.modelService.get().getModels()}function kU(e){return uU.modelService.get().onModelAdded(e)}function NU(e){return uU.modelService.get().onModelRemoved(e)}function IU(e){return uU.modelService.get().onModelModeChanged(t=>{e({model:t.model,oldLanguage:t.oldModeId})})}function TU(e){return function t(e,i){return new VB(e,i)}(uU.modelService.get(),e)}function AU(e,t){const i=uU.standaloneThemeService.get();return i.registerEditorContainer(e),rW.colorizeElement(i,uU.modeService.get(),e,t)}function MU(e,t,i){return uU.standaloneThemeService.get().registerEditorContainer(document.body),rW.colorize(uU.modeService.get(),e,t,i)}function OU(e,t,i=4){return uU.standaloneThemeService.get().registerEditorContainer(document.body),rW.colorizeModelLine(e,t,i)}function RU(e,t){uU.modeService.get().triggerMode(t);let i=function n(e){return th.get(e)||{getInitialState:()=>kh,tokenize:(t,i,n,o)=>Th(e,0,n,o)}}(t),o=Yt(e),s=[],r=i.getInitialState();for(let e=0,t=o.length;e=100){n-=100;let e=i.split(".");if(e.unshift(i),n0&&"^"===i[0],this.name=this.name+": "+i,this.regex=UU(e,"^(?:"+(this.matchOnlyAtLineStart?i.substr(1):i)+")")}setAction(e,t){this.action=function e(t,i,n){if(n){if("string"==typeof n)return n;if(n.token||""===n.token){if("string"!=typeof n.token)throw jB(t,"a 'token' attribute must be of type string, in rule: "+i);{let e={token:n.token};if(n.token.indexOf("$")>=0&&(e.tokenSubst=!0),"string"==typeof n.bracket)if("@open"===n.bracket)e.bracket=1;else{if("@close"!==n.bracket)throw jB(t,"a 'bracket' attribute must be either '@open' or '@close', in rule: "+i);e.bracket=-1}if(n.next){if("string"!=typeof n.next)throw jB(t,"the next state must be a string value in rule: "+i);{let o=n.next;if(!/^(@pop|@push|@popall)$/.test(o)&&("@"===o[0]&&(o=o.substr(1)),o.indexOf("$")<0&&!function o(e,t){let i=t;for(;i&&i.length>0;){if(e.stateNames[i])return!0;const t=i.lastIndexOf(".");i=t<0?null:i.substr(0,t)}return!1}(t,qB(t,o,"",[],""))))throw jB(t,"the next state '"+n.next+"' is not defined in rule: "+i);e.next=o}}return"number"==typeof n.goBack&&(e.goBack=n.goBack),"string"==typeof n.switchTo&&(e.switchTo=n.switchTo),"string"==typeof n.log&&(e.log=n.log),"string"==typeof n.nextEmbedded&&(e.nextEmbedded=n.nextEmbedded,t.usesEmbedded=!0),e}}if(Array.isArray(n)){let o=[];for(let s=0,r=n.length;s{n.getId()===e&&(i.dispose(),t())});return i}function ZU(e,t){let i=uU.modeService.get().getLanguageIdentifier(e);if(!i)throw new Error(`Cannot set configuration for unknown language ${e}`);return ac.register(i,t,100)}class XU{constructor(e,t){this._languageIdentifier=e,this._actual=t}getInitialState(){return this._actual.getInitialState()}tokenize(e,t,i,n){if("function"==typeof this._actual.tokenize)return QU.adaptTokenize(this._languageIdentifier.language,this._actual,e,i,n);throw new Error("Not supported!")}tokenize2(e,t,i){let n=this._actual.tokenizeEncoded(e,i);return new xh(n.tokens,n.endState)}}class QU{constructor(e,t,i){this._standaloneThemeService=e,this._languageIdentifier=t,this._actual=i}getInitialState(){return this._actual.getInitialState()}static _toClassicTokens(e,t,i){let n=[],o=0;for(let s=0,r=e.length;s0&&o[s-1]===h)continue;let c=l.startIndex;0===a?c=0:c!function t(e){return"tokenizeEncoded"in e}(e)?new QU(uU.standaloneThemeService.get(),i,e):new XU(i,e);return JU(t)?th.registerPromise(e,t.then(e=>n(e))):th.register(e,n(t))}function iK(e,t){const i=t=>(function n(e,t,i,o){return new iW(e,t,i,o)})(uU.modeService.get(),uU.standaloneThemeService.get(),e,function i(e,t){if(!t||"object"!=typeof t)throw new Error("Monarch: expecting a language definition object");let i={};i.languageId=e,i.includeLF=VU(t.includeLF,!1),i.noThrow=!1,i.maxStack=100,i.start="string"==typeof t.start?t.start:null,i.ignoreCase=VU(t.ignoreCase,!1),i.unicode=VU(t.unicode,!1),i.tokenPostfix=zU(t.tokenPostfix,"."+i.languageId),i.defaultToken=zU(t.defaultToken,"source"),i.usesEmbedded=!1;let n=t;function o(e,s,r){for(const a of r){let r=a.include;if(r){if("string"!=typeof r)throw jB(i,"an 'include' attribute must be a string at: "+e);if("@"===r[0]&&(r=r.substr(1)),!t.tokenizer[r])throw jB(i,"include target '"+r+"' is not defined at: "+e);o(e+"."+r,s,t.tokenizer[r])}else{const t=new $U(e);if(Array.isArray(a)&&a.length>=1&&a.length<=3)if(t.setRegex(n,a[0]),a.length>=3)if("string"==typeof a[1])t.setAction(n,{token:a[1],next:a[2]});else{if("object"!=typeof a[1])throw jB(i,"a next state as the last element of a rule can only be given if the action is either an object or a string, at: "+e);{const e=a[1];e.next=a[2],t.setAction(n,e)}}else t.setAction(n,a[1]);else{if(!a.regex)throw jB(i,"a rule must either be an array, or an object with a 'regex' or 'include' field at: "+e);a.name&&"string"==typeof a.name&&(t.name=a.name),a.matchOnlyAtStart&&(t.matchOnlyAtLineStart=VU(a.matchOnlyAtLineStart,!1)),t.setRegex(n,a.regex),t.setAction(n,a.action)}s.push(t)}}}if(n.languageId=e,n.includeLF=i.includeLF,n.ignoreCase=i.ignoreCase,n.unicode=i.unicode,n.noThrow=i.noThrow,n.usesEmbedded=i.usesEmbedded,n.stateNames=t.tokenizer,n.defaultToken=i.defaultToken,!t.tokenizer||"object"!=typeof t.tokenizer)throw jB(i,"a language definition must define the 'tokenizer' attribute as an object");i.tokenizer=[];for(let e in t.tokenizer)if(t.tokenizer.hasOwnProperty(e)){i.start||(i.start=e);const n=t.tokenizer[e];i.tokenizer[e]=new Array,o("tokenizer."+e,i.tokenizer[e],n)}if(i.usesEmbedded=n.usesEmbedded,t.brackets){if(!Array.isArray(t.brackets))throw jB(i,"the 'brackets' attribute must be defined as an array")}else t.brackets=[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}];let s=[];for(let e of t.brackets){let t=e;if(t&&Array.isArray(t)&&3===t.length&&(t={token:t[2],open:t[0],close:t[1]}),t.open===t.close)throw jB(i,"open and close brackets in a 'brackets' attribute must be different: "+t.open+"\n hint: use the 'bracket' attribute if matching on equal brackets is required.");if("string"!=typeof t.open||"string"!=typeof t.token||"string"!=typeof t.close)throw jB(i,"every element in the 'brackets' array must be a '{open,close,token}' object or array");s.push({token:t.token+i.tokenPostfix,open:KB(i,t.open),close:KB(i,t.close)})}return i.brackets=s,i.noThrow=!0,i}(e,t));return JU(t)?th.registerPromise(e,t.then(e=>i(e))):th.register(e,i(t))}function nK(e,t){return Tl.register(e,t)}function oK(e,t){return Al.register(e,t)}function sK(e,t){return Ol.register(e,t)}function rK(e,t){return Rl.register(e,{provideHover:(e,i,n,o)=>{let s=e.getWordAtPosition(i);return Promise.resolve(t.provideHover(e,i,n,o)).then(e=>{if(e)return!e.range&&s&&(e.range=new ro(i.lineNumber,s.startColumn,i.lineNumber,s.endColumn)),e.range||(e.range=new ro(i.lineNumber,i.column,i.lineNumber,i.column)),e})}})}function aK(e,t){return Pl.register(e,t)}function lK(e,t){return Fl.register(e,t)}function hK(e,t){return Bl.register(e,t)}function cK(e,t){return Wl.register(e,t)}function dK(e,t){return zl.register(e,t)}function uK(e,t){return Hl.register(e,t)}function gK(e,t){return Ul.register(e,t)}function pK(e,t){return $l.register(e,{provideCodeActions:(e,i,n,o)=>{let s=uU.markerService.get().read({resource:e.uri}).filter(e=>ro.areIntersectingOrTouching(e,i));return t.provideCodeActions(e,i,{markers:s,only:n.only},o)}})}function mK(e,t){return jl.register(e,t)}function fK(e,t){return ql.register(e,t)}function _K(e,t){return Gl.register(e,t)}function bK(e,t){return Yl.register(e,t)}function vK(e,t){return Ml.register(e,t)}function CK(e,t){return Zl.register(e,t)}function wK(e,t){return Ql.register(e,t)}function yK(e,t){return Vl.register(e,t)}function SK(e,t){return Xl.register(e,t)}function LK(e,t){return Jl.register(e,t)}function DK(e,t){return eh.register(e,t)}Wo.wrappingIndent.defaultValue=0,Wo.glyphMargin.defaultValue=!1,Wo.autoIndent.defaultValue=3,Wo.overviewRulerLanes.defaultValue=2,lD.setFormatterSelector((e,t,i)=>Promise.resolve(e[0]));const EK=KF();EK.editor=function xK(){return{create:_U,onDidCreateEditor:bU,createDiffEditor:vU,createDiffNavigator:CU,createModel:wU,setModelLanguage:yU,setModelMarkers:SU,getModelMarkers:LU,onDidChangeMarkers:DU,getModels:xU,getModel:EU,onDidCreateModel:kU,onWillDisposeModel:NU,onDidChangeModelLanguage:IU,createWebWorker:TU,colorizeElement:AU,colorize:MU,colorizeModelLine:OU,tokenize:RU,defineTheme:PU,setTheme:FU,remeasureFonts:BU,registerCommand:WU,AccessibilitySupport:aF,ContentWidgetPositionPreference:uF,CursorChangeReason:gF,DefaultEndOfLine:pF,EditorAutoIndentStrategy:fF,EditorOption:_F,EndOfLinePreference:bF,EndOfLineSequence:vF,MinimapPosition:EF,MouseTargetType:xF,OverlayWidgetPositionPreference:kF,OverviewRulerLane:NF,RenderLineNumbersType:IF,RenderMinimap:TF,ScrollbarVisibility:MF,ScrollType:AF,TextEditorCursorBlinkingStyle:BF,TextEditorCursorStyle:WF,TrackedRangeStickiness:VF,WrappingIndent:zF,ConfigurationChangedEvent:fo,BareFontInfo:og,FontInfo:rg,TextModelResolvedOptions:qo,FindMatch:Go,EditorType:MC,EditorOptions:Wo}}(),EK.languages=function kK(){return{register:jU,getLanguages:qU,onLanguage:YU,getEncodedLanguageId:GU,setLanguageConfiguration:ZU,setColorMap:eK,setTokensProvider:tK,setMonarchTokensProvider:iK,registerReferenceProvider:nK,registerRenameProvider:oK,registerCompletionItemProvider:vK,registerSignatureHelpProvider:sK,registerHoverProvider:rK,registerDocumentSymbolProvider:aK,registerDocumentHighlightProvider:lK,registerLinkedEditingRangeProvider:hK,registerDefinitionProvider:cK,registerImplementationProvider:dK,registerTypeDefinitionProvider:uK,registerCodeLensProvider:gK,registerCodeActionProvider:pK,registerDocumentFormattingEditProvider:mK,registerDocumentRangeFormattingEditProvider:fK,registerOnTypeFormattingEditProvider:_K,registerLinkProvider:bK,registerColorProvider:CK,registerFoldingRangeProvider:wK,registerDeclarationProvider:yK,registerSelectionRangeProvider:SK,registerDocumentSemanticTokensProvider:LK,registerDocumentRangeSemanticTokensProvider:DK,DocumentHighlightKind:mF,CompletionItemKind:hF,CompletionItemTag:cF,CompletionItemInsertTextRule:lF,SymbolKind:PF,SymbolTag:FF,IndentAction:wF,CompletionTriggerKind:dF,SignatureHelpTriggerKind:RF,InlineHintKind:yF,HoverSource:CF,FoldingRangeKind:Il}}();const NK=EK.CancellationTokenSource,IK=EK.Emitter,TK=EK.KeyCode,AK=EK.KeyMod,MK=EK.Position,OK=EK.Range,RK=EK.Selection,PK=EK.SelectionDirection,FK=EK.MarkerSeverity,BK=EK.MarkerTag,WK=EK.Uri,VK=EK.Token,zK=EK.editor,HK=EK.languages;((null===(gU=G.MonacoEnvironment)||void 0===gU?void 0:gU.globalAPI)||(null===(pU=G.define)||void 0===pU?void 0:pU.amd))&&(self.monaco=EK),void 0!==self.require&&"function"==typeof self.require.config&&self.require.config({ignoreDuplicateModules:["vscode-languageserver-types","vscode-languageserver-types/main","vscode-languageserver-textdocument","vscode-languageserver-textdocument/main","vscode-nls","vscode-nls/vscode-nls","jsonc-parser","jsonc-parser/main","vscode-uri","vscode-uri/index","vs/basic-languages/typescript/typescript"]});var UK=Object.freeze({CancellationTokenSource:NK,Emitter:IK,KeyCode:TK,KeyMod:AK,Position:MK,Range:OK,Selection:RK,SelectionDirection:PK,MarkerSeverity:FK,MarkerTag:BK,Uri:WK,Token:VK,editor:zK,languages:HK}),KK={},$K={},jK=function(){function e(e){var t=this;this._languageId=e,this._loadingTriggered=!1,this._lazyLoadPromise=new Promise((function(e,i){t._lazyLoadPromiseResolve=e,t._lazyLoadPromiseReject=i}))}return e.getOrCreate=function(t){return $K[t]||($K[t]=new e(t)),$K[t]},e.prototype.whenLoaded=function(){return this._lazyLoadPromise},e.prototype.load=function(){var e=this;return this._loadingTriggered||(this._loadingTriggered=!0,KK[this._languageId].loader().then((function(t){return e._lazyLoadPromiseResolve(t)}),(function(t){return e._lazyLoadPromiseReject(t)}))),this._lazyLoadPromise},e}();function qK(e){var t=e.id;KK[t]=e,HK.register(e);var i=jK.getOrCreate(t);HK.setMonarchTokensProvider(t,i.whenLoaded().then((function(e){return e.language}))),HK.onLanguage(t,(function(){i.load().then((function(e){HK.setLanguageConfiguration(t,e.conf)}))}))}function GK(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){e.done?o(e.value):new i((function(t){t(e.value)})).then(r,a)}l((n=n.apply(e,t||[])).next())}))}function YK(e,t){var i,n,o,s,r={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function l(s){if(i)throw new TypeError("Generator is already executing.");for(;r;)try{if(i=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return r.label++,{value:s[1],done:!1};case 5:r.label++,n=s[1],s=[0];continue;case 7:s=r.ops.pop(),r.trys.pop();continue;default:if(!(o=(o=r.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){r=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]=0){var _=m.substring(0,f),b=m.substring(f+1);_===t.scopeName?u(e,t,t,b,p):_===i.scopeName?u(e,t,i,b,p):e.add(new h(_,m.substring(f+1)))}else e.add(new l(m))}}}}function u(e,t,i,n,o){void 0===o&&(o=i.repository),o&&o[n]&&d(e,t,i,[o[n]],o)}function g(e,t,i){if(i.patterns&&Array.isArray(i.patterns)&&d(e,t,i,i.patterns,i.repository),i.injections){var n=[];for(var o in i.injections)n.push(i.injections[o]);d(e,t,i,n,i.repository)}}function p(e,t){if(!e)return!1;if(e===t)return!0;var i=t.length;return e.length>i&&e.substr(0,i)===t&&"."===e[i]}function m(e,t){if(t.length>")}var h=Object.keys(this._embeddedLanguages).map((function(t){return e._escapeRegExpCharacters(t)}));0===h.length?this._embeddedLanguagesRegex=null:(h.sort(),h.reverse(),this._embeddedLanguagesRegex=new RegExp("^(("+h.join(")|(")+"))($|\\.)",""))}return e.prototype.onDidChangeTheme=function(){this._cache=new Map,this._defaultMetaData=new _("",this._initialLanguage,0,[this._themeProvider.getDefaults()])},e.prototype.getDefaultMetadata=function(){return this._defaultMetaData},e._escapeRegExpCharacters=function(e){return e.replace(/[\-\\\{\}\*\+\?\|\^\$\.\,\[\]\(\)\#\s]/g,"\\$&")},e.prototype.getMetadataForScope=function(t){if(null===t)return e._NULL_SCOPE_METADATA;var i=this._cache.get(t);return i||(i=this._doGetMetadataForScope(t),this._cache.set(t,i),i)},e.prototype._doGetMetadataForScope=function(e){var t=this._scopeToLanguage(e),i=this._toStandardTokenType(e),n=this._themeProvider.themeMatch(e);return new _(e,t,i,n)},e.prototype._scopeToLanguage=function(e){if(!e)return 0;if(!this._embeddedLanguagesRegex)return 0;var t=e.match(this._embeddedLanguagesRegex);return t&&(this._embeddedLanguages[t[1]]||0)||0},e.prototype._toStandardTokenType=function(t){var i=t.match(e.STANDARD_TOKEN_TYPE_REGEXP);if(!i)return 0;switch(i[1]){case"comment":return 1;case"string":return 2;case"regex":return 4;case"meta.embedded":return 8}throw new Error("Unexpected match for standard token type!")},e._NULL_SCOPE_METADATA=new _("",0,0,null),e.STANDARD_TOKEN_TYPE_REGEXP=/\b(comment|string|regex|meta\.embedded)\b/,e}(),v=function(){function e(e,t,i,n,o,r){if(this._scopeMetadataProvider=new b(t,o,i),this._onigLib=r,this._rootId=-1,this._lastRuleId=0,this._ruleId2desc=[null],this._includedGrammars={},this._grammarRepository=o,this._grammar=w(e,null),this._injections=null,this._tokenTypeMatchers=[],n)for(var a=0,l=Object.keys(n);ac)break;for(;h.length>0&&h[h.length-1].endPos<=g.start;)o.produceFromScopes(h[h.length-1].scopes,h[h.length-1].endPos),h.pop();if(h.length>0?o.produceFromScopes(h[h.length-1].scopes,g.start):o.produce(n,g.start),u.retokenizeCapturedWithRuleId){var p=u.getName(a,r),m=n.contentNameScopesList.push(e,p),f=u.getContentName(a,r),_=m.push(e,f),b=n.push(u.retokenizeCapturedWithRuleId,g.start,-1,!1,null,m,_),v=e.createOnigString(a.substring(0,g.end));D(e,v,i&&0===g.start,g.start,b,o,!1),C(v)}else{var w=u.getName(a,r);if(null!==w){var y=(h.length>0?h[h.length-1].scopes:n.contentNameScopesList).push(e,w);h.push(new N(y,g.end))}}}}}for(;h.length>0;)o.produceFromScopes(h[h.length-1].scopes,h[h.length-1].endPos),h.pop()}}function S(e){for(var t=[],i=0,n=e.rules.length;i5&&console.warn("Rule "+l.debugName+" ("+l.id+") matching took "+u+" against '"+t+"'"),d&&console.log("matched rule id: "+h.rules[d.index]+" from "+d.captureIndices[0].start+" to "+d.captureIndices[0].end)}return d?{captureIndices:d.captureIndices,matchedRuleId:h.rules[d.index]}:null}(e,t,i,n,o,s),h=e.getInjections();if(0===h.length)return l;var c=function(e,t,i,n,o,s,a){for(var l,h=Number.MAX_VALUE,c=null,d=0,u=s.contentNameScopesList.generateScopes(),g=0,p=e.length;g=h)&&(c=_.captureIndices,l=f.rules[_.index],d=m.priority,(h=b)===o))break}}}return c?{priorityMatch:-1===d,captureIndices:c,matchedRuleId:l}:null}(h,e,t,i,n,o,s);if(!c)return l;if(!l)return c;var d=l.captureIndices[0].start,u=c.captureIndices[0].start;return un&&(n=p.captureIndices[0].end,i=!1))}return{stack:s,linePos:n,anchorPosition:l,isFirstLine:i}}(e,t,i,n,s,a);s=u.stack,n=u.linePos,i=u.isFirstLine,d=u.anchorPosition}for(;!c;)g();function g(){r.DebugFlags.InDebugMode&&(console.log(""),console.log("@@scanNext "+n+": |"+t.content.substr(n).replace(/\n$/,"\\n")+"|"));var l=L(e,t,i,n,s,d);if(!l)return r.DebugFlags.InDebugMode&&console.log(" no more matches."),a.produce(s,h),void(c=!0);var u=l.captureIndices,g=l.matchedRuleId,p=!!(u&&u.length>0)&&u[0].end>n;if(-1===g){var m=s.getRule(e);r.DebugFlags.InDebugMode&&console.log(" popping "+m.debugName+" - "+m.debugEndRegExp),a.produce(s,u[0].start),s=s.setContentNameScopesList(s.nameScopesList),y(e,t,i,s,a,m.endCaptures,u),a.produce(s,u[0].end);var f=s;if(s=s.pop(),d=f.getAnchorPos(),!p&&f.getEnterPos()===n)return r.DebugFlags.InDebugMode&&console.error("[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing"),a.produce(s=f,h),void(c=!0)}else{var _=e.getRule(g);a.produce(s,u[0].start);var b=s,v=_.getName(t.content,u),C=s.contentNameScopesList.push(e,v);if(s=s.push(g,n,d,u[0].end===h,null,C,C),_ instanceof o.BeginEndRule){var w=_;r.DebugFlags.InDebugMode&&console.log(" pushing "+w.debugName+" - "+w.debugBeginRegExp),y(e,t,i,s,a,w.beginCaptures,u),a.produce(s,u[0].end),d=u[0].end;var S=w.getContentName(t.content,u),D=C.push(e,S);if(s=s.setContentNameScopesList(D),w.endHasBackReferences&&(s=s.setEndRule(w.getEndWithResolvedBackReferences(t.content,u))),!p&&b.hasSameRuleAs(s))return r.DebugFlags.InDebugMode&&console.error("[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing"),s=s.pop(),a.produce(s,h),void(c=!0)}else if(_ instanceof o.BeginWhileRule){if(w=_,r.DebugFlags.InDebugMode&&console.log(" pushing "+w.debugName),y(e,t,i,s,a,w.beginCaptures,u),a.produce(s,u[0].end),d=u[0].end,S=w.getContentName(t.content,u),D=C.push(e,S),s=s.setContentNameScopesList(D),w.whileHasBackReferences&&(s=s.setEndRule(w.getWhileWithResolvedBackReferences(t.content,u))),!p&&b.hasSameRuleAs(s))return r.DebugFlags.InDebugMode&&console.error("[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing"),s=s.pop(),a.produce(s,h),void(c=!0)}else{var E=_;if(r.DebugFlags.InDebugMode&&console.log(" matched "+E.debugName+" - "+E.debugMatchRegExp),y(e,t,i,s,a,E.captures,u),a.produce(s,u[0].end),s=s.pop(),!p)return r.DebugFlags.InDebugMode&&console.error("[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping"),s=s.safePop(),a.produce(s,h),void(c=!0)}}u[0].end>n&&(n=u[0].end,i=!1)}return s}t.Grammar=v;var E=function(){function e(){}return e.toBinaryStr=function(e){for(var t=e.toString(2);t.length<32;)t="0"+t;return t},e.printMetadata=function(t){var i=e.getLanguageId(t),n=e.getTokenType(t),o=e.getFontStyle(t),s=e.getForeground(t),r=e.getBackground(t);console.log({languageId:i,tokenType:n,fontStyle:o,foreground:s,background:r})},e.getLanguageId=function(e){return(255&e)>>>0},e.getTokenType=function(e){return(1792&e)>>>8},e.getFontStyle=function(e){return(14336&e)>>>11},e.getForeground=function(e){return(8372224&e)>>>14},e.getBackground=function(e){return(4286578688&e)>>>23},e.set=function(t,i,n,o,s,r){var a=e.getLanguageId(t),l=e.getTokenType(t),h=e.getFontStyle(t),c=e.getForeground(t),d=e.getBackground(t);return 0!==i&&(a=i),0!==n&&(l=8===n?0:n),-1!==o&&(h=o),0!==s&&(c=s),0!==r&&(d=r),(a<<0|l<<8|h<<11|c<<14|d<<23)>>>0},e}();t.StackElementMetadata=E;var x=function(){function e(e,t,i){this.parent=e,this.scope=t,this.metadata=i}return e._equals=function(e,t){for(;;){if(e===t)return!0;if(!e&&!t)return!0;if(!e||!t)return!1;if(e.scope!==t.scope||e.metadata!==t.metadata)return!1;e=e.parent,t=t.parent}},e.prototype.equals=function(t){return e._equals(this,t)},e._matchesScope=function(e,t,i){return t===e||e.substring(0,i.length)===i},e._matches=function(e,t){if(null===t)return!0;for(var i=t.length,n=0,o=t[n],s=o+".";e;){if(this._matchesScope(e.scope,o,s)){if(++n===i)return!0;s=(o=t[n])+"."}e=e.parent}return!1},e.mergeMetadata=function(e,t,i){if(null===i)return e;var n=-1,o=0,s=0;if(null!==i.themeData)for(var r=0,a=i.themeData.length;r=0?e._push(this,t,i.split(/ /g)):e._push(this,t,[i])},e._generateScopes=function(e){for(var t=[],i=0;e;)t[i++]=e.scope,e=e.parent;return t.reverse(),t},e.prototype.generateScopes=function(){return e._generateScopes(this)},e}();t.ScopeListElement=x;var k=function(){function e(e,t,i,n,o,s,r,a){this.parent=e,this.depth=this.parent?this.parent.depth+1:1,this.ruleId=t,this._enterPos=i,this._anchorPos=n,this.beginRuleCapturedEOL=o,this.endRule=s,this.nameScopesList=r,this.contentNameScopesList=a}return e._structuralEquals=function(e,t){for(;;){if(e===t)return!0;if(!e&&!t)return!0;if(!e||!t)return!1;if(e.depth!==t.depth||e.ruleId!==t.ruleId||e.endRule!==t.endRule)return!1;e=e.parent,t=t.parent}},e._equals=function(e,t){return e===t||!!this._structuralEquals(e,t)&&e.contentNameScopesList.equals(t.contentNameScopesList)},e.prototype.clone=function(){return this},e.prototype.equals=function(t){return null!==t&&e._equals(this,t)},e._reset=function(e){for(;e;)e._enterPos=-1,e._anchorPos=-1,e=e.parent},e.prototype.reset=function(){e._reset(this)},e.prototype.pop=function(){return this.parent},e.prototype.safePop=function(){return this.parent?this.parent:this},e.prototype.push=function(t,i,n,o,s,r,a){return new e(this,t,i,n,o,s,r,a)},e.prototype.getEnterPos=function(){return this._enterPos},e.prototype.getAnchorPos=function(){return this._anchorPos},e.prototype.getRule=function(e){return e.getRule(this.ruleId)},e.prototype._writeString=function(e,t){return this.parent&&(t=this.parent._writeString(e,t)),e[t++]="("+this.ruleId+", TODO-"+this.nameScopesList+", TODO-"+this.contentNameScopesList+")",t},e.prototype.toString=function(){var e=[];return this._writeString(e,0),"["+e.join(",")+"]"},e.prototype.setContentNameScopesList=function(e){return this.contentNameScopesList===e?this:this.parent.push(this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,this.endRule,this.nameScopesList,e)},e.prototype.setEndRule=function(t){return this.endRule===t?this:new e(this.parent,this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,t,this.nameScopesList,this.contentNameScopesList)},e.prototype.hasSameRuleAs=function(e){return this.ruleId===e.ruleId},e.NULL=new e(null,0,0,0,!1,null,null,null),e}();t.StackElement=k;var N=function(e,t){this.scopes=e,this.endPos=t};t.LocalStackElement=N;var I=function(){function e(e,t,i){this._emitBinaryTokens=e,this._tokenTypeOverrides=i,this._lineText=r.DebugFlags.InDebugMode?t:null,this._tokens=[],this._binaryTokens=[],this._lastTokenEndIndex=0}return e.prototype.produce=function(e,t){this.produceFromScopes(e.contentNameScopesList,t)},e.prototype.produceFromScopes=function(e,t){if(!(this._lastTokenEndIndex>=t)){if(this._emitBinaryTokens){for(var i=e.metadata,n=0,o=this._tokenTypeOverrides;n0&&this._binaryTokens[this._binaryTokens.length-1]===i||(this._binaryTokens.push(this._lastTokenEndIndex),this._binaryTokens.push(i)),void(this._lastTokenEndIndex=t)}var a=e.generateScopes();if(r.DebugFlags.InDebugMode){console.log(" token: |"+this._lineText.substring(this._lastTokenEndIndex,t).replace(/\n$/,"\\n")+"|");for(var l=0;l0&&this._tokens[this._tokens.length-1].startIndex===t-1&&this._tokens.pop(),0===this._tokens.length&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._tokens[this._tokens.length-1].startIndex=0),this._tokens},e.prototype.getBinaryResult=function(e,t){this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-2]===t-1&&(this._binaryTokens.pop(),this._binaryTokens.pop()),0===this._binaryTokens.length&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._binaryTokens[this._binaryTokens.length-2]=0);for(var i=new Uint32Array(this._binaryTokens.length),n=0,o=this._binaryTokens.length;n0&&o[o.length-1])||6!==s[0]&&2!==s[0])){r=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]")},e.prototype._loadGrammar=function(e,t,i,s){return n(this,void 0,void 0,(function(){var n,r,a,h,c,d,u,g,p,m,f,_,b=this;return o(this,(function(o){switch(o.label){case 0:n=new Set,r=new Set,n.add(e),a=[new l.FullScopeDependency(e)],o.label=1;case 1:return a.length>0?(h=a,a=[],[4,Promise.all(h.map((function(e){return b._loadSingleGrammar(e.scopeName)})))]):[3,3];case 2:for(o.sent(),c=new l.ScopeDependencyCollector,d=0,u=h;d0&&o[o.length-1])||6!==s[0]&&2!==s[0])){r=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]s&&(s=l);for(var a=0;a<=s;a++)o[a]=null;for(var r in t)if("$vscodeTextmateLocation"!==r){var l=parseInt(r,10),h=0;t[r].patterns&&(h=e.getCompiledRuleId(t[r],i,n)),o[l]=e.createCaptureRule(i,t[r].$vscodeTextmateLocation,t[r].name,t[r].contentName,h)}}return o},e._compilePatterns=function(t,i,n){var o=[];if(t)for(var s=0,r=t.length;s=0?(c=a.include.substring(0,u),d=a.include.substring(u+1)):c=a.include;var g=i.getExternalGrammar(c,n);if(g)if(d){var _=g.repository[d];_&&(l=e.getCompiledRuleId(_,i,g.repository))}else l=e.getCompiledRuleId(g.repository.$self,i,g.repository)}else l=e.getCompiledRuleId(a,i,n);if(-1!==l){var b=i.getRule(l),v=!1;if((b instanceof p||b instanceof m||b instanceof f)&&b.hasMissingPatterns&&0===b.patterns.length&&(v=!0),v)continue;o.push(l)}}return{patterns:o,hasMissingPatterns:(t?t.length:0)!==o.length}},e}();t.RuleFactory=_},function(e,t,i){function n(e){return!!e&&!!e.match(/[\w\.:]+/)}Object.defineProperty(t,"__esModule",{value:!0}),t.createMatchers=function(e,t){for(var i,o,s,r=[],a=(s=(o=/([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g).exec(i=e),{next:function(){if(!s)return null;var e=s[0];return s=o.exec(i),e}}),l=a.next();null!==l;){var h=0;if(2===l.length&&":"===l.charAt(1)){switch(l.charAt(0)){case"R":h=1;break;case"L":h=-1;break;default:console.log("Unknown priority "+l+" in scope selector")}l=a.next()}var c=u();if(r.push({matcher:c,priority:h}),","!==l)break;l=a.next()}return r;function d(){if("-"===l){l=a.next();var e=d();return function(t){return!!e&&!e(t)}}if("("===l){l=a.next();var i=function(){for(var e=[],t=u();t&&(e.push(t),"|"===l||","===l);){do{l=a.next()}while("|"===l||","===l);t=u()}return function(t){return e.some((function(e){return e(t)}))}}();return")"===l&&(l=a.next()),i}if(n(l)){var o=[];do{o.push(l),l=a.next()}while(n(l));return function(e){return t(o,e)}}return null}function u(){for(var e=[],t=d();t;)e.push(t),t=d();return function(t){return e.every((function(e){return e(t)}))}}}},function(e,t){var i,n,o=e.exports={};function s(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function a(e){if(i===setTimeout)return setTimeout(e,0);if((i===s||!i)&&setTimeout)return i=setTimeout,setTimeout(e,0);try{return i(e,0)}catch(t){try{return i.call(null,e,0)}catch(t){return i.call(this,e,0)}}}!function(){try{i="function"==typeof setTimeout?setTimeout:s}catch(e){i=s}try{n="function"==typeof clearTimeout?clearTimeout:r}catch(e){n=r}}();var l,h=[],c=!1,d=-1;function u(){c&&l&&(c=!1,l.length?h=l.concat(h):d=-1,h.length&&g())}function g(){if(!c){var e=a(u);c=!0;for(var t=h.length;t;){for(l=h,h=[];++d1)for(var i=1;i0;)10===e.charCodeAt(o)?(o++,s++,r=0):(o++,r++),t--}function l(e){null===i?o=e:a(e-o)}function h(){for(;o0&&65279===e.charCodeAt(0)&&(o=1);var g=0,p=null,m=[],f=[],_=null;function b(e,t){m.push(g),f.push(p),g=e,p=t}function v(){if(0===m.length)return C("illegal state stack");g=m.pop(),p=f.pop()}function C(t){throw new Error("Near offset "+o+": "+t+" ~~~"+e.substr(o,50)+"~~~")}var w,y,S,L=function(){if(null===_)return C("missing ");var e={};null!==i&&(e[i]={filename:t,line:s,char:r}),p[_]=e,_=null,b(1,e)},D=function(){if(null===_)return C("missing ");var e=[];p[_]=e,_=null,b(2,e)},E=function(){var e={};null!==i&&(e[i]={filename:t,line:s,char:r}),p.push(e),b(1,e)},x=function(){var e=[];p.push(e),b(2,e)};function k(){if(1!==g)return C("unexpected ");v()}function N(){return 1===g||2!==g?C("unexpected "):void v()}function I(e){if(1===g){if(null===_)return C("missing ");p[_]=e,_=null}else 2===g?p.push(e):p=e}function T(e){if(isNaN(e))return C("cannot parse float");if(1===g){if(null===_)return C("missing ");p[_]=e,_=null}else 2===g?p.push(e):p=e}function A(e){if(isNaN(e))return C("cannot parse integer");if(1===g){if(null===_)return C("missing ");p[_]=e,_=null}else 2===g?p.push(e):p=e}function M(e){if(1===g){if(null===_)return C("missing ");p[_]=e,_=null}else 2===g?p.push(e):p=e}function O(e){if(1===g){if(null===_)return C("missing ");p[_]=e,_=null}else 2===g?p.push(e):p=e}function R(e){if(1===g){if(null===_)return C("missing ");p[_]=e,_=null}else 2===g?p.push(e):p=e}function P(e){if(e.isClosed)return"";var t=u(""),t.replace(/&#([0-9]+);/g,(function(e,t){return String.fromCodePoint(parseInt(t,10))})).replace(/&#x([0-9a-f]+);/g,(function(e,t){return String.fromCodePoint(parseInt(t,16))})).replace(/&|<|>|"|'/g,(function(e){switch(e){case"&":return"&";case"<":return"<";case">":return">";case""":return'"';case"'":return"'"}return e}))}for(;o=n));){var F=e.charCodeAt(o);if(a(1),60!==F)return C("expected <");if(o>=n)return C("unexpected end of input");var B=e.charCodeAt(o);if(63!==B)if(33!==B){if(47===B){if(a(1),h(),c("plist")){d(">");continue}if(c("dict")){d(">"),k();continue}if(c("array")){d(">"),N();continue}return C("unexpected closed tag")}var W=(y=void 0,S=void 0,S=!1,47===(y=u(">")).charCodeAt(y.length-1)&&(S=!0,y=y.substring(0,y.length-1)),{name:y.trim(),isClosed:S});switch(W.name){case"dict":1===g?L():2===g?E():(p={},null!==i&&(p[i]={filename:t,line:s,char:r}),b(1,p)),W.isClosed&&k();continue;case"array":1===g?D():2===g?x():b(2,p=[]),W.isClosed&&N();continue;case"key":w=P(W),1!==g?C("unexpected "):null!==_?C("too many "):_=w;continue;case"string":I(P(W));continue;case"real":T(parseFloat(P(W)));continue;case"integer":A(parseInt(P(W),10));continue;case"date":M(new Date(P(W)));continue;case"data":O(P(W));continue;case"true":P(W),R(!0);continue;case"false":P(W),R(!1);continue}if(!/^plist/.test(W.name))return C("unexpected opened tag "+W.name)}else{if(a(1),c("--")){d("--\x3e");continue}d(">")}else a(1),d("?>")}return p}Object.defineProperty(t,"__esModule",{value:!0}),t.parseWithLocation=function(e,t,i){return n(e,t,i)},t.parse=function(e){return n(e,null,null)}},function(e,t,i){function n(e,t){throw new Error("Near offset "+e.pos+": "+t+" ~~~"+e.source.substr(e.pos,50)+"~~~")}Object.defineProperty(t,"__esModule",{value:!0}),t.parse=function(e,t,i){var a=new o(e),l=new s,h=0,c=null,d=[],u=[];function g(){d.push(h),u.push(c)}function p(){h=d.pop(),c=u.pop()}function m(e){n(a,e)}for(;r(a,l);){if(0===h){if(null!==c&&m("too many constructs in root"),3===l.type){c={},i&&(c.$vscodeTextmateLocation=l.toLocation(t)),g(),h=1;continue}if(2===l.type){c=[],g(),h=4;continue}m("unexpected token in root")}if(2===h){if(5===l.type){p();continue}if(7===l.type){h=3;continue}m("expected , or }")}if(1===h||3===h){if(1===h&&5===l.type){p();continue}if(1===l.type){var f=l.value;if(r(a,l)&&6===l.type||m("expected colon"),r(a,l)||m("expected value"),h=2,1===l.type){c[f]=l.value;continue}if(8===l.type){c[f]=null;continue}if(9===l.type){c[f]=!0;continue}if(10===l.type){c[f]=!1;continue}if(11===l.type){c[f]=parseFloat(l.value);continue}if(2===l.type){var _=[];c[f]=_,g(),h=4,c=_;continue}if(3===l.type){var b={};i&&(b.$vscodeTextmateLocation=l.toLocation(t)),c[f]=b,g(),h=1,c=b;continue}}m("unexpected token in dict")}if(5===h){if(4===l.type){p();continue}if(7===l.type){h=6;continue}m("expected , or ]")}if(4===h||6===h){if(4===h&&4===l.type){p();continue}if(h=5,1===l.type){c.push(l.value);continue}if(8===l.type){c.push(null);continue}if(9===l.type){c.push(!0);continue}if(10===l.type){c.push(!1);continue}if(11===l.type){c.push(parseFloat(l.value));continue}if(2===l.type){c.push(_=[]),g(),h=4,c=_;continue}if(3===l.type){b={},i&&(b.$vscodeTextmateLocation=l.toLocation(t)),c.push(b),g(),h=1,c=b;continue}m("unexpected token in array")}m("unknown state")}return 0!==u.length&&m("unclosed constructs"),c};var o=function(e){this.source=e,this.pos=0,this.len=e.length,this.line=1,this.char=0},s=function(){function e(){this.value=null,this.type=0,this.offset=-1,this.len=-1,this.line=-1,this.char=-1}return e.prototype.toLocation=function(e){return{filename:e,line:this.line,char:this.char}},e}();function r(e,t){t.value=null,t.type=0,t.offset=-1,t.len=-1,t.line=-1,t.char=-1;for(var i,o=e.source,s=e.pos,r=e.len,a=e.line,l=e.char;;){if(s>=r)return!1;if(32!==(i=o.charCodeAt(s))&&9!==i&&13!==i){if(10!==i)break;s++,a++,l=0}else s++,l++}if(t.offset=s,t.line=a,t.char=l,34===i){for(t.type=1,s++,l++;;){if(s>=r)return!1;if(i=o.charCodeAt(s),s++,l++,92!==i){if(34===i)break}else s++,l++}t.value=o.substring(t.offset+1,s-1).replace(/\\u([0-9A-Fa-f]{4})/g,(function(e,t){return String.fromCodePoint(parseInt(t,16))})).replace(/\\(.)/g,(function(t,i){switch(i){case'"':return'"';case"\\":return"\\";case"/":return"/";case"b":return"\b";case"f":return"\f";case"n":return"\n";case"r":return"\r";case"t":return"\t";default:n(e,"invalid escape sequence")}throw new Error("unreachable")}))}else if(91===i)t.type=2,s++,l++;else if(123===i)t.type=3,s++,l++;else if(93===i)t.type=4,s++,l++;else if(125===i)t.type=5,s++,l++;else if(58===i)t.type=6,s++,l++;else if(44===i)t.type=7,s++,l++;else if(110===i){if(t.type=8,l++,117!==(i=o.charCodeAt(++s)))return!1;if(l++,108!==(i=o.charCodeAt(++s)))return!1;if(l++,108!==(i=o.charCodeAt(++s)))return!1;s++,l++}else if(116===i){if(t.type=9,l++,114!==(i=o.charCodeAt(++s)))return!1;if(l++,117!==(i=o.charCodeAt(++s)))return!1;if(l++,101!==(i=o.charCodeAt(++s)))return!1;s++,l++}else if(102===i){if(t.type=10,l++,97!==(i=o.charCodeAt(++s)))return!1;if(l++,108!==(i=o.charCodeAt(++s)))return!1;if(l++,115!==(i=o.charCodeAt(++s)))return!1;if(l++,101!==(i=o.charCodeAt(++s)))return!1;s++,l++}else for(t.type=11;;){if(s>=r)return!1;if(!(46===(i=o.charCodeAt(s))||i>=48&&i<=57||101===i||69===i||45===i||43===i))break;s++,l++}return t.len=s-t.offset,null===t.value&&(t.value=o.substr(t.offset,t.len)),e.pos=s,e.line=a,e.char=l,!0}},function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,i,n,o,s){this.scope=e,this.parentScopes=t,this.index=i,this.fontStyle=n,this.foreground=o,this.background=s};function o(e){return!!(/^#[0-9a-f]{6}$/i.test(e)||/^#[0-9a-f]{8}$/i.test(e)||/^#[0-9a-f]{3}$/i.test(e)||/^#[0-9a-f]{4}$/i.test(e))}function s(e){if(!e)return[];if(!e.settings||!Array.isArray(e.settings))return[];for(var t=e.settings,i=[],s=0,r=0,a=t.length;r1&&(_=m.slice(0,m.length-1)).reverse(),i[s++]=new n(f,_,r,c,g,p)}}}return i}t.ParsedThemeRule=n,t.parseTheme=s;var r=function(){function e(e){if(this._lastColorId=0,this._id2color=[],this._color2id=Object.create(null),Array.isArray(e)){this._isFrozen=!0;for(var t=0,i=e.length;t=1&&""===e[0].scope;){var s=e.shift();-1!==s.fontStyle&&(i=s.fontStyle),null!==s.foreground&&(n=s.foreground),null!==s.background&&(o=s.background)}for(var u=new r(t),g=new c(0,null,i,u.getId(n),u.getId(o)),p=new d(new c(0,null,-1,0,0),[]),m=0,f=e.length;mt?1:0}function h(e,t){if(null===e&&null===t)return 0;if(!e)return-1;if(!t)return 1;var i=e.length,n=t.length;if(i===n){for(var o=0;oe?console.log("how did this happen?"):this.scopeDepth=e,-1!==t&&(this.fontStyle=t),0!==i&&(this.foreground=i),0!==n&&(this.background=n)},e}();t.ThemeTrieElementRule=c;var d=function(){function e(e,t,i){void 0===t&&(t=[]),void 0===i&&(i={}),this._mainRule=e,this._rulesWithParentScopes=t,this._children=i}return e._sortBySpecificity=function(e){return 1===e.length||e.sort(this._cmpBySpecificity),e},e._cmpBySpecificity=function(e,t){if(e.scopeDepth===t.scopeDepth){var i=e.parentScopes,n=t.parentScopes,o=null===i?0:i.length,s=null===n?0:n.length;if(o===s)for(var r=0;r=55296&&r<=56319&&i+1=56320&&t<=57343&&(h=65536+(r-55296<<10)|t-56320,c=!0)}n&&(o[i]=l,c&&(o[i+1]=l),h<=127?s[l+0]=i:h<=2047?(s[l+0]=i,s[l+1]=i):h<=65535?(s[l+0]=i,s[l+1]=i,s[l+2]=i):(s[l+0]=i,s[l+1]=i,s[l+2]=i,s[l+3]=i)),h<=127?a[l++]=h:h<=2047?(a[l++]=192|(1984&h)>>>6,a[l++]=128|(63&h)>>>0):h<=65535?(a[l++]=224|(61440&h)>>>12,a[l++]=128|(4032&h)>>>6,a[l++]=128|(63&h)>>>0):(a[l++]=240|(1835008&h)>>>18,a[l++]=128|(258048&h)>>>12,a[l++]=128|(4032&h)>>>6,a[l++]=128|(63&h)>>>0),c&&i++}this.utf16Length=t,this.utf8Length=i,this.utf16Value=e,this.utf8Value=a,this.utf16OffsetToUtf8=o,this.utf8OffsetToUtf16=s}static _utf8ByteLength(e){let t=0;for(let i=0,n=e.length;i=55296&&o<=56319&&i+1=56320&&t<=57343&&(s=65536+(o-55296<<10)|t-56320,r=!0)}t+=s<=127?1:s<=2047?2:s<=65535?3:4,r&&i++}return t}createString(e){const t=e._malloc(this.utf8Length);return e.HEAPU8.set(this.utf8Value,t),t}}class a{constructor(e){if(this.id=++a.LAST_ID,!s)throw new Error("Must invoke loadWASM first.");this._onigBinding=s,this.content=e;const t=new r(e);this.utf16Length=t.utf16Length,this.utf8Length=t.utf8Length,this.utf16OffsetToUtf8=t.utf16OffsetToUtf8,this.utf8OffsetToUtf16=t.utf8OffsetToUtf16,this.utf8Length<1e4&&!a._sharedPtrInUse?(a._sharedPtr||(a._sharedPtr=s._malloc(1e4)),a._sharedPtrInUse=!0,s.HEAPU8.set(t.utf8Value,a._sharedPtr),this.ptr=a._sharedPtr):this.ptr=t.createString(s)}convertUtf8OffsetToUtf16(e){return this.utf8OffsetToUtf16?e<0?0:e>this.utf8Length?this.utf16Length:this.utf8OffsetToUtf16[e]:e}convertUtf16OffsetToUtf8(e){return this.utf16OffsetToUtf8?e<0?0:e>this.utf16Length?this.utf8Length:this.utf16OffsetToUtf8[e]:e}dispose(){this.ptr===a._sharedPtr?a._sharedPtrInUse=!1:this._onigBinding._free(this.ptr)}}t.OnigString=a,a.LAST_ID=0,a._sharedPtr=0,a._sharedPtrInUse=!1;class l{constructor(e){if(!s)throw new Error("Must invoke loadWASM first.");const t=[],i=[];for(let n=0,o=e.length;n{n=e,r=t});let l;return function(e,t,i,n){o.default({print:t,instantiateWasm:(t,i)=>{if("undefined"==typeof performance){const e=()=>Date.now();t.env.emscripten_get_now=e,t.wasi_snapshot_preview1.emscripten_get_now=e}return e(t).then(e=>i(e.instance),n),{}}}).then(e=>{s=e,i()})}(l=t instanceof ArrayBuffer?function(e){return t=>WebAssembly.instantiate(e,t)}(t):t instanceof Response&&"function"==typeof WebAssembly.instantiateStreaming?function(e){return t=>WebAssembly.instantiateStreaming(e,t)}(t):function(e){return async t=>{const i=await e.arrayBuffer();return WebAssembly.instantiate(i,t)}}(t),i,n,r),a},t.createOnigString=function(e){return new a(e)},t.createOnigScanner=function(e){return new l(e)},t.setDefaultDebugCall=function(e){}},function(e,t,i){var n=("undefined"!=typeof document&&document.currentScript&&document,function(e){var t,i,n=void 0!==(e=e||{})?e:{};n.ready=new Promise((function(e,n){t=e,i=n}));var o,s={};for(o in n)n.hasOwnProperty(o)&&(s[o]=n[o]);var r,a=[],l=!1,h="";function c(e){return n.locateFile?n.locateFile(e,h):h+e}r=function(e){var t;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(_("object"==typeof(t=read(e,"binary"))),t)},"undefined"!=typeof scriptArgs?a=scriptArgs:void 0!==arguments&&(a=arguments),"undefined"!=typeof onig_print&&("undefined"==typeof console&&(console={}),console.log=onig_print,console.warn=console.error="undefined"!=typeof printErr?printErr:onig_print);var d,u,g,p=n.print||console.log.bind(console),m=n.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(n[o]=s[o]);s=null,n.arguments&&(a=n.arguments),n.wasmBinary&&(d=n.wasmBinary),"object"!=typeof WebAssembly&&U("no native wasm support detected");var f=!1;function _(e,t){e||U("Assertion failed: "+t)}var b="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function v(e,t,i){for(var n=t+i,o=t;e[o]&&!(o>=n);)++o;if(o-t>16&&e.subarray&&b)return b.decode(e.subarray(t,o));for(var s="";t>10,56320|1023&h)}}else s+=String.fromCharCode((31&r)<<6|a)}else s+=String.fromCharCode(r)}return s}function C(e,t){return e?v(y,e,t):""}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var w,y,S,L=65536;function D(e,t){return e%t>0&&(e+=t-e%t),e}function E(e){w=e,n.HEAP8=new Int8Array(e),n.HEAP16=new Int16Array(e),n.HEAP32=S=new Int32Array(e),n.HEAPU8=y=new Uint8Array(e),n.HEAPU16=new Uint16Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),n.HEAPF64=new Float64Array(e)}var x=n.INITIAL_MEMORY||16777216;(u=n.wasmMemory?n.wasmMemory:new WebAssembly.Memory({initial:x/L,maximum:2147483648/L}))&&(w=u.buffer),x=w.byteLength,E(w);var k=[],N=[],I=[],T=[];function A(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)P(n.preRun.shift());Q(k)}function M(){Q(N)}function O(){Q(I)}function R(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)F(n.postRun.shift());Q(T)}function P(e){k.unshift(e)}function F(e){T.unshift(e)}var B=0,W=null,V=null;function z(e){B++,n.monitorRunDependencies&&n.monitorRunDependencies(B)}function H(e){if(B--,n.monitorRunDependencies&&n.monitorRunDependencies(B),0==B&&(null!==W&&(clearInterval(W),W=null),V)){var t=V;V=null,t()}}function U(e){n.onAbort&&n.onAbort(e),m(e+=""),f=!0,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.";var t=new WebAssembly.RuntimeError(e);throw i(t),t}function K(e,t){return String.prototype.startsWith?e.startsWith(t):0===e.indexOf(t)}n.preloadedImages={},n.preloadedAudios={};var $="data:application/octet-stream;base64,";function j(e){return K(e,$)}var q,G="onig.wasm";function Y(){try{if(d)return new Uint8Array(d);if(r)return r(G);throw"both async and sync fetching of the wasm failed"}catch(e){U(e)}}function Z(){return d||!l||"function"!=typeof fetch?Promise.resolve().then(Y):fetch(G,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+G+"'";return e.arrayBuffer()})).catch((function(){return Y()}))}function X(){var e={env:ae,wasi_snapshot_preview1:ae};function t(e,t){n.asm=e.exports,g=n.asm.__indirect_function_table,H()}function i(e){t(e.instance)}function o(t){return Z().then((function(t){return WebAssembly.instantiate(t,e)})).then(t,(function(e){m("failed to asynchronously prepare wasm: "+e),U(e)}))}if(z(),n.instantiateWasm)try{return n.instantiateWasm(e,t)}catch(e){return m("Module.instantiateWasm callback failed with error: "+e),!1}return function(){if(d||"function"!=typeof WebAssembly.instantiateStreaming||j(G)||"function"!=typeof fetch)return o(i);fetch(G,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(i,(function(e){return m("wasm streaming compile failed: "+e),m("falling back to ArrayBuffer instantiation"),o(i)}))}))}(),{}}function Q(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var i=t.func;"number"==typeof i?void 0===t.arg?g.get(i)():g.get(i)(t.arg):i(void 0===t.arg?null:t.arg)}else t(n)}}function J(e,t,i){y.copyWithin(e,t,t+i)}function ee(){return y.length}function te(e){try{return u.grow(e-w.byteLength+65535>>>16),E(u.buffer),1}catch(e){}}function ie(e){e>>>=0;var t=ee();if(e>2147483648)return!1;for(var i=1;i<=4;i*=2){var n=t*(1+.2/i);if(n=Math.min(n,e+100663296),te(Math.min(2147483648,D(Math.max(16777216,e,n),65536))))return!0}return!1}j(G)||(G=c(G)),q="undefined"!=typeof dateNow?dateNow:function(){return performance.now()};var ne={mappings:{},buffers:[null,[],[]],printChar:function(e,t){var i=ne.buffers[e];0===t||10===t?((1===e?p:m)(v(i,0)),i.length=0):i.push(t)},varargs:void 0,get:function(){return ne.varargs+=4,S[ne.varargs-4>>2]},getStr:function(e){return C(e)},get64:function(e,t){return e}};function oe(e,t,i,n){for(var o=0,s=0;s>2],a=S[t+(8*s+4)>>2],l=0;l>2]=o,0}function se(e){}N.push({func:function(){le()}});var re,ae={emscripten_get_now:q,emscripten_memcpy_big:J,emscripten_resize_heap:ie,fd_write:oe,memory:u,setTempRet0:se},le=(X(),n.___wasm_call_ctors=function(){return(le=n.___wasm_call_ctors=n.asm.__wasm_call_ctors).apply(null,arguments)});function he(e){function i(){re||(re=!0,n.calledRun=!0,f||(M(),O(),t(n),n.onRuntimeInitialized&&n.onRuntimeInitialized(),R()))}e=e||a,B>0||(A(),B>0||(n.setStatus?(n.setStatus("Running..."),setTimeout((function(){setTimeout((function(){n.setStatus("")}),1),i()}),1)):i()))}if(n._malloc=function(){return(n._malloc=n.asm.malloc).apply(null,arguments)},n._free=function(){return(n._free=n.asm.free).apply(null,arguments)},n.___errno_location=function(){return(n.___errno_location=n.asm.__errno_location).apply(null,arguments)},n._getLastOnigError=function(){return(n._getLastOnigError=n.asm.getLastOnigError).apply(null,arguments)},n._createOnigScanner=function(){return(n._createOnigScanner=n.asm.createOnigScanner).apply(null,arguments)},n._freeOnigScanner=function(){return(n._freeOnigScanner=n.asm.freeOnigScanner).apply(null,arguments)},n._findNextOnigScannerMatch=function(){return(n._findNextOnigScannerMatch=n.asm.findNextOnigScannerMatch).apply(null,arguments)},n._findNextOnigScannerMatchDbg=function(){return(n._findNextOnigScannerMatchDbg=n.asm.findNextOnigScannerMatchDbg).apply(null,arguments)},n.stackSave=function(){return(n.stackSave=n.asm.stackSave).apply(null,arguments)},n.stackRestore=function(){return(n.stackRestore=n.asm.stackRestore).apply(null,arguments)},n.stackAlloc=function(){return(n.stackAlloc=n.asm.stackAlloc).apply(null,arguments)},n.dynCall_jiji=function(){return(n.dynCall_jiji=n.asm.dynCall_jiji).apply(null,arguments)},n.UTF8ToString=C,V=function e(){re||he(),re||(V=e)},n.run=he,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();return he(),e.ready});e.exports=n}])}));uA(s$);var r$=s$.createOnigScanner,a$=s$.createOnigString,l$=s$.loadWASM;if("false"==window.localStorage["datalore.enable.textmate.lexing"])qK({id:"python",extensions:[".py",".rpy",".pyw",".cpy",".gyp",".gypi"],aliases:["Python","py"],firstLine:"^#!/.*\\bpython[0-9.-]*\\b",loader:function(){return Promise.resolve().then((function(){return K$}))}});else{var h$=window.monacotmProviderConfig||{paths:{onigurum:"/onig.wasm","grammar.python":"/MagicPython.tmLanguage.json"}};window.monacotmProvider=function c$(e){var t=this,i=[{id:"python",extensions:[".py",".rpy",".pyw",".cpy",".gyp",".gypi",".pyi",".ipy",".bzl",".cconf",".cinc",".mcconf",".sky",".td",".tw"],aliases:["Python","py"],filenames:["Snakefile","BUILD","BUCK","TARGETS"],firstLine:"^#!\\s*/?.*\\bpython[0-9.-]*\\b"}],n={"source.python":{language:"python",path:e.paths["grammar.python"]}},o=function s(e){return GK(this,void 0,void 0,(function(){var t;return YK(this,(function(i){switch(i.label){case 0:return[4,fetch(e)];case 1:return"application/wasm"===(t=i.sent()).headers.get("content-type")?[2,t]:[4,t.arrayBuffer()];case 2:return[2,i.sent()]}}))}))}(e.paths.onigurum).then((function(e){return l$(e)})).then((function(){return{createOnigScanner:r$,createOnigString:a$}})),r=new n$({grammars:n,fetchGrammar:function(e){return GK(t,void 0,void 0,(function(){var t,i;return YK(this,(function(o){switch(o.label){case 0:return t=n[e].path,[4,fetch(""+t)];case 1:return[4,o.sent().text()];case 2:return i=o.sent(),[2,{type:t.endsWith(".json")||t.startsWith("data:application/json")?"json":"plist",grammar:i}]}}))}))},configurations:i.map((function(e){return e.id})),fetchConfiguration:function(e){return GK(t,void 0,void 0,(function(){return YK(this,(function(e){return[2,Promise.resolve().then((function(){return K$})).then((function(e){return e.conf}))]}))}))},theme:i$("idea"),onigLib:o,monaco:UK});return function a(e,t,i){for(var n=this,o=function(e){var o=e.id;i.languages.register(e),i.languages.onLanguage(o,(function(){return GK(n,void 0,void 0,(function(){var e,n,s;return YK(this,(function(r){switch(r.label){case 0:return[4,t(o)];case 1:return e=r.sent(),n=e.tokensProvider,null!=(s=e.configuration)&&i.languages.setLanguageConfiguration(o,s),null!=n&&i.languages.setTokensProvider(o,n),[2]}}))}))}))},s=0,r=e;s0&&0===n)this._options.onInsert(i,o);else if(o.length>0&&n>0)this._options.onReplace(i,n,o);else{if(!(0===o.length&&n>0))throw new Error("Unexpected change: "+JSON.stringify(t));this._options.onDelete(i,n)}}}]),e}();t.EditorContentManager=l,l._DEFAULTS={onInsert:function e(){},onReplace:function e(){},onDelete:function e(){},remoteSourceId:"remote"}}));uA(g$);var p$=gA((function(e,t){function i(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function n(e){for(var t=1;tt.line?1:this._charactert._character?1:0}},{key:"translate",value:function t(i){var n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(null===i||null===o)throw(0,v$.illegalArgument)();return void 0===i?n=0:"number"==typeof i?n=i:(n="number"==typeof i.lineDelta?i.lineDelta:0,o="number"==typeof i.characterDelta?i.characterDelta:0),0===n&&0===o?this:new e(this.line+n,this.character+o)}},{key:"with",value:function t(i){var n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.character;if(null===i||null===o)throw(0,v$.illegalArgument)();return void 0===i?n=this.line:"number"==typeof i?n=i:(n="number"==typeof i.line?i.line:this.line,o="number"==typeof i.character?i.character:this.character),n===this.line&&o===this.character?this:new e(n,o)}},{key:"toJSON",value:function e(){return{line:this.line,character:this.character}}}]),e}();t.Position=h;var c,d=function(){function e(t,i,n,o){var r,a;if(s(this,e),"number"==typeof t&&"number"==typeof i&&"number"==typeof n&&"number"==typeof o?(r=new h(t,i),a=new h(n,o)):t instanceof h&&i instanceof h&&(r=t,a=i),!r||!a)throw new Error("Invalid arguments");r.isBefore(a)?(this._start=r,this._end=a):(this._start=a,this._end=r)}return a(e,[{key:"start",get:function e(){return this._start}},{key:"end",get:function e(){return this._end}}],[{key:"isRange",value:function t(i){return i instanceof e||!!i&&h.isPosition(i.start)&&h.isPosition(i.end)}}]),a(e,[{key:"contains",value:function t(i){return i instanceof e?this.contains(i._start)&&this.contains(i._end):i instanceof h&&!i.isBefore(this._start)&&!this._end.isBefore(i)}},{key:"isEqual",value:function e(t){return this._start.isEqual(t._start)&&this._end.isEqual(t._end)}},{key:"intersection",value:function t(i){var n=h.Max(i.start,this._start),o=h.Min(i.end,this._end);if(!n.isAfter(o))return new e(n,o)}},{key:"union",value:function t(i){return this.contains(i)?this:i.contains(this)?i:new e(h.Min(i.start,this._start),h.Max(i.end,this.end))}},{key:"with",value:function t(i){var n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.end;if(null===i||null===o)throw(0,v$.illegalArgument)();return i?h.isPosition(i)?n=i:(n=i.start||this.start,o=i.end||this.end):n=this.start,n.isEqual(this._start)&&o.isEqual(this.end)?this:new e(n,o)}},{key:"toJSON",value:function e(){return[this.start,this.end]}},{key:"isEmpty",get:function e(){return this._start.isEqual(this._end)}},{key:"isSingleLine",get:function e(){return this._start.line===this._end.line}}]),e}();t.Range=d,t.Selection=function(e){function t(e,o,r,a){var l,c,d;if(s(this,t),"number"==typeof e&&"number"==typeof o&&"number"==typeof r&&"number"==typeof a?(c=new h(e,o),d=new h(r,a)):e instanceof h&&o instanceof h&&(c=e,d=o),!c||!d)throw new Error("Invalid arguments");return(l=function u(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?function n(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}(this,n(t).call(this,c,d)))._anchor=c,l._active=d,l}return function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)}(t,e),a(t,[{key:"anchor",get:function e(){return this._anchor}},{key:"active",get:function e(){return this._active}}],[{key:"isSelection",value:function e(i){return i instanceof t||!!i&&d.isRange(i)&&h.isPosition(i.anchor)&&h.isPosition(i.active)&&"boolean"==typeof i.isReversed}}]),a(t,[{key:"toJSON",value:function e(){return{start:this.start,end:this.end,active:this.active,anchor:this.anchor}}},{key:"isReversed",get:function e(){return this._anchor===this._end}}]),t}(d),t.EndOfLine=c,function(e){e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(c||(t.EndOfLine=c={}));var u,g,p=function(){function e(t,i){s(this,e),this.range=t,this._newText=i}return a(e,[{key:"range",get:function e(){return this._range},set:function e(t){if(t&&!d.isRange(t))throw(0,v$.illegalArgument)("range");this._range=t}},{key:"newText",get:function e(){return this._newText||""},set:function e(t){if(t&&"string"!=typeof t)throw(0,v$.illegalArgument)("newText");this._newText=t}},{key:"newEol",get:function e(){return this._newEol},set:function e(t){if(t&&"number"!=typeof t)throw(0,v$.illegalArgument)("newEol");this._newEol=t}}],[{key:"isTextEdit",value:function t(i){return i instanceof e||!!i&&d.isRange(i)&&"string"==typeof i.newText}},{key:"replace",value:function t(i,n){return new e(i,n)}},{key:"insert",value:function t(i,n){return e.replace(new d(i,i),n)}},{key:"delete",value:function t(i){return e.replace(i,"")}},{key:"setEndOfLine",value:function t(i){var n=new e(new d(new h(0,0),new h(0,0)),"");return n.newEol=i,n}}]),a(e,[{key:"toJSON",value:function e(){return{range:this.range,newText:this.newText,newEol:this._newEol}}}]),e}();t.TextEdit=p,t.WorkspaceEdit=function(){function e(){s(this,e),this._edits=new Array}return a(e,[{key:"renameFile",value:function e(t,i,n){this._edits.push({_type:1,from:t,to:i,options:n})}},{key:"createFile",value:function e(t,i){this._edits.push({_type:1,from:void 0,to:t,options:i})}},{key:"deleteFile",value:function e(t,i){this._edits.push({_type:1,from:t,to:void 0,options:i})}},{key:"replace",value:function e(t,i,n){this._edits.push({_type:2,uri:t,edit:new p(i,n)})}},{key:"insert",value:function e(t,i,n){this.replace(t,new d(i,i),n)}},{key:"delete",value:function e(t,i){this.replace(t,i,"")}},{key:"has",value:function e(t){var i=!0,n=!1,o=void 0;try{for(var s,r=this._edits[Symbol.iterator]();!(i=(s=r.next()).done);i=!0){var a=s.value;if(2===a._type&&a.uri.toString()===t.toString())return!0}}catch(e){n=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(n)throw o}}return!1}},{key:"set",value:function e(t,i){if(i){var n=!0,o=!1,s=void 0;try{for(var r,a=i[Symbol.iterator]();!(n=(r=a.next()).done);n=!0){var l=r.value;l&&this._edits.push({_type:2,uri:t,edit:l})}}catch(e){o=!0,s=e}finally{try{n||null==a.return||a.return()}finally{if(o)throw s}}}else for(var h=0;h0&&void 0!==arguments[0]?arguments[0]:this._tabstop++;return this.value+="$",this.value+=t,this}},{key:"appendPlaceholder",value:function t(i){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._tabstop++;if("function"==typeof i){var o=new e;o._tabstop=this._tabstop,i(o),this._tabstop=o._tabstop,i=o.value}else i=e._escape(i);return this.value+="${",this.value+=n,this.value+=":",this.value+=i,this.value+="}",this}},{key:"appendVariable",value:function t(i,n){if("function"==typeof n){var o=new e;o._tabstop=this._tabstop,n(o),this._tabstop=o._tabstop,n=o.value}else"string"==typeof n&&(n=n.replace(/\$|}/g,"\\$&"));return this.value+="${",this.value+=i,n&&(this.value+=":",this.value+=n),this.value+="}",this}}]),e}()}));uA(C$);var w$=gA((function(e,t){function i(e){return function i(e){return e.replace(/( )/g,(function(e){return" "})).replace(/()/g,"").replace(/]*>(.*?)<\/span>/g,(function(e,t){return t})).replace(/ +/g," ")}(function t(e){return e.replace(/\[([^\]]+?)\]\([^\)]+?\)/g,(function(e,t){return t}))}(e))}Object.defineProperty(t,"__esModule",{value:!0}),t.isInFencedCodeBlock=function n(e,t){var i=e.getText(new C$.Range(new C$.Position(0,0),new C$.Position(t,0))).match(/^```[\w ]*$/gm);return null!=i&&i.length%2!=0},t.extractText=i,t.slugify=function o(e){return i(e.trim()).replace(s,"").replace(/ /g,"-").replace(/[A-Z]/g,(function(e){return e.toLowerCase()}))};var s=/(?:[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB1\xB4\xB6-\xB8\xBB\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0524-\u0530\u0557\u0558\u055A-\u0560\u0588-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EF\u05F3-\u060F\u061B-\u0620\u065F\u066A-\u066D\u06D4\u06DD\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB-\u0900\u093A\u093B\u094E\u094F\u0955-\u0957\u0964\u0965\u0970\u0973-\u097A\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2\u09F3\u09FA-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF3-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C7F-\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0-\u0D01\u0D04\u0D0D\u0D11\u0D29\u0D3A-\u0D3C\u0D45\u0D49\u0D4E-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D79\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EDE-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F8C-\u0F8F\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109A-\u109F\u10C6-\u10CF\u10FB\u10FD-\u10FF\u115A-\u115E\u11A3-\u11A7\u11FA-\u11FF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B-\u135E\u1360-\u1368\u137D-\u137F\u1390-\u139F\u13F5-\u1400\u166D\u166E\u1677-\u1680\u169B-\u169F\u16EB-\u16ED\u16F1-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17B4\u17B5\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u17EF\u17FA-\u180A\u180E\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AA-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BAB-\u1BAD\u1BBA-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E-\u1CFF\u1DE7-\u1DFD\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u206F\u2072\u2073\u207A-\u207E\u208A-\u208F\u2095-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2152\u2189-\u245F\u249C-\u24E9\u2500-\u2775\u2794-\u2BFF\u2C2F\u2C5F\u2C70\u2C7E\u2C7F\u2CE5-\u2CFC\u2CFE\u2CFF\u2D26-\u2D2F\u2D66-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u312E-\u3130\u318F-\u3191\u3196-\u319F\u31B8-\u31EF\u3200-\u321F\u322A-\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DB6-\u4DFF\u9FC4-\u9FFF\uA48D-\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA660\uA661\uA673-\uA67B\uA67E\uA698-\uA716\uA720\uA721\uA789\uA78A\uA78D-\uA7FA\uA828-\uA83F\uA874-\uA87F\uA8C5-\uA8CF\uA8DA-\uA8FF\uA92E\uA92F\uA954-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uABFF\uD7A4-\uD7FF\uE000-\uF8FF\uFA2E\uFA2F\uFA6B-\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE27-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g}));uA(w$);var y$=gA((function(e,t){function i(e){r(e,"shift")}function n(e){s(e,"shift")}function o(e){s(e,"ctrl")}function s(e,t){var i,n=e.selection.active,o=e.document.lineAt(n.line),s=o.text.substr(0,n.character),r=o.text.substr(n.character),a=n;if("ctrl"==t&&(a=o.range.end),"shift"==t||(0,w$.isInFencedCodeBlock)(e.document,n.line))return l(e,"enter",t);if(/^(>|([-+*]|[0-9]+[.)])( +\[[ x]\])?)$/.test(s.trim())&&0==r.trim().length)return e.edit((function(e){e.delete(o.range),e.insert(o.range.end,"\n")})).then((function(){e.revealRange(e.selection)})).then((function(){return u(e,d(e))}));if(/^> /.test(s))return e.edit((function(e){e.insert(a,"\n> ")})).then((function(){if("ctrl"==t&&!n.isEqual(a)){var i=n.with(o.lineNumber+1,2);e.selection=new C$.Selection(i,i)}})).then((function(){e.revealRange(e.selection)}));if(null!==(i=/^(\s*[-+*] +(\[[ x]\] +)?)/.exec(s)))return e.edit((function(e){e.insert(a,"\n".concat(i[1].replace("[x]","[ ]")))})).then((function(){if("ctrl"==t&&!n.isEqual(a)){var s=n.with(o.lineNumber+1,i[1].length);e.selection=new C$.Selection(s,s)}})).then((function(){e.revealRange(e.selection)}));if(null!==(i=/^(\s*)([0-9]+)([.)])( +)((\[[ x]\] +)?)/.exec(s))){var h=e.getConfiguration("markdown.extension.orderedList").get("marker"),c="1",g=i[1],p=i[2],m=i[3],f=i[4],_=i[5].replace("[x]","[ ]"),b=(p+m+f).length;"ordered"==h&&(c=String(Number(p)+1));var v=g+c+m+(f=" ".repeat(Math.max(1,b-(c+m).length)))+_;return e.edit((function(e){e.insert(a,"\n".concat(v))}),{undoStopBefore:!0,undoStopAfter:!1}).then((function(){if("ctrl"==t&&!n.isEqual(a)){var i=n.with(o.lineNumber+1,v.length);e.selection=new C$.Selection(i,i)}})).then((function(){return u(e)})).then((function(){e.revealRange(e.selection)}))}return l(e,"enter",t)}function r(e,t){var i=e.selection.start,n=e.document.lineAt(i.line).text;if((0,w$.isInFencedCodeBlock)(e.document,i.line))return l(e,"tab",t);var o=/^\s*([-+*]|[0-9]+[.)]) +(\[[ x]\] +)?/.exec(n);return o&&("shift"===t||!e.selection.isEmpty||e.selection.isEmpty&&i.character<=o[0].length)?"shift"===t?h(e).then((function(){return u(e)})):function s(e){if("adaptive"===e.getConfiguration("markdown.extension.list").get("indentationSize"))try{for(var t=e.selection,i=c(e,t.start.line,e.document.lineAt(t.start.line).firstNonWhitespaceCharacterIndex),n=new C$.WorkspaceEdit,o=t.start.line;o<=t.end.line&&(o!==t.end.line||t.isEmpty||0!==t.end.character);o++)0!==e.document.lineAt(o).text.length&&n.insert(e.document.uri,new C$.Position(o,0)," ".repeat(i));return e.applyEdit(n)}catch(e){}return e.executeCommand("editor.action.indentLines")}(e).then((function(){return u(e)})):l(e,"tab",t)}function a(e){var t=e.selection.active,i=e.document,n=i.lineAt(t.line).text.substr(0,t.character);return(0,w$.isInFencedCodeBlock)(i,t.line)?l(e,"backspace"):e.selection.isEmpty?/^\s+([-+*]|[0-9]+[.)]) $/.test(n)?h(e).then((function(){return u(e)})):/^([-+*]|[0-9]+[.)]) $/.test(n)?e.edit((function(e){e.replace(new C$.Range(t.with({character:0}),t)," ".repeat(n.length))})).then((function(){return u(e,d(e))})):/^\s*([-+*]|[0-9]+[.)]) +(\[[ x]\] )$/.test(n)?function o(e,t){return e.edit((function(e){e.delete(t)}),{undoStopBefore:!0,undoStopAfter:!1})}(e,new C$.Range(t.with({character:n.length-4}),t)).then((function(){return u(e,d(e))})):l(e,"backspace"):l(e,"backspace").then((function(){return u(e,d(e))}))}function l(e,t,i){switch(t){case"enter":return"ctrl"===i?e.executeCommand("editor.action.insertLineAfter"):e.executeCommand("type",{source:"keyboard",text:"\n"});case"tab":return e.getConfiguration("emmet").get("triggerExpansionOnTab")?e.executeCommand("editor.emmet.action.expandAbbreviation"):e.executeCommand("shift"===i?"editor.action.outdentLines":"tab");case"backspace":return e.executeCommand("deleteLeft")}}function h(e){if("adaptive"===e.getConfiguration("markdown.extension.list").get("indentationSize"))try{for(var t=e.selection,i=c(e,t.start.line,e.document.lineAt(t.start.line).firstNonWhitespaceCharacterIndex),n=new C$.WorkspaceEdit,o=t.start.line;o<=t.end.line&&(o!==t.end.line||t.isEmpty||0!==t.end.character);o++){var s,r=e.document.lineAt(o).text;(s=0===r.trim().length?r.length:e.document.lineAt(o).firstNonWhitespaceCharacterIndex)>0&&n.delete(e.document.uri,new C$.Range(o,0,o,Math.min(i,s)))}return e.applyEdit(n)}catch(e){}return e.executeCommand("editor.action.outdentLines")}function c(e,t,i){for(;--t>=0;){var n,o=e.document.lineAt(t).text;if(null!==(n=/^(\s*)(([-+*]|[0-9]+[.)]) +)(\[[ x]\] +)?/.exec(o))&&n[1].length<=i)return n[2].length}throw"No previous Markdown list item"}function d(e,t){for(void 0===t&&(t=e.selection.start.line);te.selection.end.line)&&(t=e.selection.active.line),!(t<0||e.document.lineCount<=t)){var i,n=e.document.lineAt(t).text;if(null!==(i=/^(\s*)([0-9]+)([.)])( +)/.exec(n))){var o=i[1],s=i[2],r=i[3],a=i[4],l=function h(e,t,i){for(;--t>=0;){var n=e.document.lineAt(t).text,o=void 0;if(null!==(o=/^(\s*)(([0-9]+)[.)] +)/.exec(n))){var s=o[1];if(s.length===i)return Number(o[3])+1;if(!s.includes("\t")&&s.length+o[2].length<=i||s.includes("\t")&&s.length+1<=i)return 1}else if(null!==(o=/^(\s*)\S/.exec(n))&&o[1].length<=i)break}return 1}(e,t,o.length),c=s.length+r.length+a.length,g=String(l);return e.edit((function(e){s!==g&&(g+=r+" ".repeat(Math.max(1,c-(g+r).length)),e.replace(new C$.Range(t,o.length,t,o.length+c),g))}),{undoStopBefore:!1,undoStopAfter:!1}).then((function(){for(var i=t+1,n=" ".repeat(c);e.document.lineCount>i;){var o=e.document.lineAt(i).text;if(/^\s*[0-9]+[.)] +/.test(o))return u(e,i);if(/^\s*$/.test(o))i++;else{if(c<=4&&!o.startsWith(n))return;i++}}}))}}}Object.defineProperty(t,"__esModule",{value:!0}),t.activateListEditing=function g(e){var t="editorTextFocus && !editorReadonly && !suggestWidgetVisible";(0,S$.addKeybinding)(e,"onEnterKey",s,[UK.KeyCode.Enter],"",t,null),(0,S$.addKeybinding)(e,"onCtrlEnterKey",o,[UK.KeyCode.Enter|UK.KeyMod.CtrlCmd],"",t,null),(0,S$.addKeybinding)(e,"onShiftEnterKey",n,[UK.KeyCode.Enter|UK.KeyMod.Shift],"",t,null),(0,S$.addKeybinding)(e,"onTabKey",r,[UK.KeyCode.Tab],"",t,null),(0,S$.addKeybinding)(e,"onShiftTabKey",i,[UK.KeyCode.Tab|UK.KeyMod.Shift],"",t,null),(0,S$.addKeybinding)(e,"onBackspaceKey",a,[UK.KeyCode.Backspace],"",t,null)},t.fixMarker=u,t.deactivate=function p(){}}));uA(y$);var S$=gA((function(e,t){function i(e,t,n){return(i=function o(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct:function e(t,i,n){var o=[null];o.push.apply(o,i);var s=new(Function.bind.apply(t,o));return n&&function e(t,i){(Object.setPrototypeOf||function e(t,i){return t.__proto__=i,t})(t,i)}(s,n.prototype),s}).apply(null,arguments)}function n(e,t,i,n,o,s){e.addAction({contextMenuGroupId:arguments.length>6&&void 0!==arguments[6]?arguments[6]:"markdown.extension.editing",contextMenuOrder:0,id:"markdown.extension.editing."+t,keybindingContext:s,keybindings:n,label:o,precondition:"",run:function t(n){i(e)}})}Object.defineProperty(t,"__esModule",{value:!0}),t.addKeybinding=n,t.activateFormatting=function o(e){n(e,"toggleBold",l,[UK.KeyMod.CtrlCmd|UK.KeyCode.KEY_B],"Toggle bold"),n(e,"toggleItalic",h,[UK.KeyMod.CtrlCmd|UK.KeyCode.KEY_I],"Toggle italic"),n(e,"toggleCodeSpan",c,[UK.KeyMod.CtrlCmd|UK.KeyCode.US_BACKTICK],"Toggle code span"),n(e,"toggleStrikethrough",d,[UK.KeyMod.Alt|UK.KeyCode.KEY_S],"Toggle strikethrough"),n(e,"toggleMath",b,[UK.KeyMod.CtrlCmd|UK.KeyCode.KEY_M],"Toggle math"),n(e,"toggleMathReverse",v,[UK.KeyMod.CtrlCmd|UK.KeyMod.Shift|UK.KeyCode.KEY_M],"Toggle math reverse"),n(e,"toggleHeadingUp",p,[UK.KeyMod.WinCtrl|UK.KeyMod.Shift|UK.KeyCode.US_CLOSE_SQUARE_BRACKET],"Heading up"),n(e,"toggleHeadingDown",m,[UK.KeyMod.WinCtrl|UK.KeyMod.Shift|UK.KeyCode.US_OPEN_SQUARE_BRACKET],"Heading down"),n(e,"toggleList",w,[UK.KeyMod.CtrlCmd|UK.KeyCode.KEY_L],"Toggle list")},t.isSingleLink=function s(e){return r.test(e)};var r=function a(){var e="\\u00a1-\\uffff";return new RegExp("^(?:[a-z0-9\\.\\-\\+]*)://(?:[^\\s:@/]+(?::[^\\s:@/]*)?@)?(?:(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}|\\[[0-9a-f:\\.]+\\]|([a-z"+e+"0-9](?:[a-z"+e+"0-9-]{0,61}[a-z"+e+"0-9])?(?:\\.(?!-)[a-z"+e+"0-9-]{1,63})*\\.(?!-)(?:[a-z"+e+"-]{2,63}|xn--[a-z0-9]{1,59})\\.?|localhost))(?::\\d{2,5})?(?:[/?#][^\\s]*)?$","i")}();function l(e){return S(e,"**")}function h(e){return S(e,"*")}function c(e){return S(e,"`")}function d(e){return S(e,"~~")}var u,g="######";function p(e){var t=e.selection.active.line,i=e.document.lineAt(t).text;return e.edit((function(e){if(i.startsWith("#"))if(i.startsWith(g)){var n=i.startsWith(g+" ")?g.length+1:g.length;e.delete(new C$.Range(new C$.Position(t,0),new C$.Position(t,n)))}else e.insert(new C$.Position(t,0),"#");else e.insert(new C$.Position(t,0),"# ")}))}function m(e){var t=e.selection.active.line,i=e.document.lineAt(t).text;e.edit((function(e){i.startsWith("# ")?e.delete(new C$.Range(new C$.Position(t,0),new C$.Position(t,2))):i.startsWith("#")?e.delete(new C$.Range(new C$.Position(t,0),new C$.Position(t,1))):e.insert(new C$.Position(t,0),g+" ")}))}!function(e){e[e.NONE=0]="NONE",e[e.INLINE=1]="INLINE",e[e.SINGLE_DISPLAYED=2]="SINGLE_DISPLAYED",e[e.MULTI_DISPLAYED=3]="MULTI_DISPLAYED"}(u||(u={}));var f=[u.NONE,u.INLINE,u.MULTI_DISPLAYED,u.SINGLE_DISPLAYED],_=i(Array,f).reverse();function b(e){C(e,f)}function v(e){C(e,_)}function C(e,t){if(e.selection.isEmpty){var i=e.selection.active,n=function o(e,t){return"$|$"===D(e,t,"$")?u.INLINE:"$$ | $$"===D(e,t,"$$ "," $$")?u.SINGLE_DISPLAYED:""===e.document.lineAt(t.line).text&&t.line>0&&"$$"===e.document.lineAt(t.line-1).text&&t.line=o.character?t[1]:0})).reduce((function(e,t){return e+t}),0);if(n.isEmpty){if("~~"!==t&&D(e,l,t)==="".concat(t,"text|").concat(i)){var c=l.with({character:l.character+h+i.length});return void(r[a]=new C$.Selection(c,c))}if(D(e,l,t)==="".concat(t,"|").concat(i)){var d=l.with({character:l.character-t.length}),u=l.with({character:l.character+i.length});L(e,o,s,r,a,h,l,new C$.Range(d,u),!1,t)}else{var g=e.document.getWordRangeAtPosition(l);null==g&&(g=n);var p=e.document.lineAt(l.line);"~~"===t&&/^\s*[\*\+\-] (\[[ x]\] )? */g.test(p.text)&&(g=p.range.with(new C$.Position(l.line,p.text.match(/^\s*[\*\+\-] (\[[ x]\] )? */g)[0].length))),L(e,o,s,r,a,h,l,g,!1,t)}}else L(e,o,s,r,a,h,l,n,!0,t)}));var a=e.selection&&!e.selection.isEmpty;return e.applyEdit(o,r).then((function(){a||(e.selections=r)}))}function L(e,t,i,n,o,s,r,a,l,h,c){null==c&&(c=h);var d,u=e.document.getText(a),g=n[o],p=(h+c).length,m=r.with({character:r.character+s});!function f(e,t,i){return null==i&&(i=t),e.startsWith(t)&&e.endsWith(i)}(u,h)?(t.replace(e.document.uri,a,h+u+c),i.push([a.end,p]),l?d=new C$.Selection(g.start.with({character:g.start.character+s}),g.end.with({character:g.end.character+s+p})):(m=r.with(a.isEmpty?{character:r.character+s+h.length}:r.character==a.end.character?{character:r.character+s+p}:{character:r.character+s+h.length}),d=new C$.Selection(m,m))):(t.replace(e.document.uri,a,u.substr(h.length,u.length-p)),i.push([a.end,-p]),l?d=new C$.Selection(g.start.with({character:g.start.character+s}),g.end.with({character:g.end.character+s-p})):(m=r.with(a.isEmpty?{character:r.character+s+h.length}:r.character==a.end.character?{character:r.character+s-p}:{character:r.character+s-h.length}),d=new C$.Selection(m,m))),n[o]=d}function D(e,t,i,n){null==n&&(n=i);var o=t.character-i.length,s=t.character+n.length;o<0&&(o=0);var r=e.document.getText(new C$.Range(t.line,o,t.line,t.character));return e.document.getText(new C$.Range(t.line,t.character,t.line,s))==n?r==i?"".concat(i,"|").concat(n):"".concat(i,"text|").concat(n):"|"}}));uA(S$);var L$=gA((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.regExpLeadsToEndlessLoop=function i(e){return"^"!==e.source&&"^$"!==e.source&&"$"!==e.source&&"^\\s*$"!==e.source&&!(!e.exec("")||0!==e.lastIndex)}}));uA(L$);var D$=gA((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ensureValidWordDefinition=function i(e){var t=o;if(e&&e instanceof RegExp)if(e.global)t=e;else{var i="g";e.ignoreCase&&(i+="i"),e.multiline&&(i+="m"),e.unicode&&(i+="u"),t=new RegExp(e.source,i)}return t.lastIndex=0,t},t.getWordAtText=function n(e,t,i,o){t.lastIndex=0;var s=t.exec(i);if(!s)return null;var r=s[0].indexOf(" ")>=0?function a(e,t,i,n){var o,s=e-1-n;for(t.lastIndex=0;o=t.exec(i);){var r=o.index||0;if(r>s)return null;if(t.lastIndex>=s)return{word:o[0],startColumn:n+1+r,endColumn:n+1+t.lastIndex}}return null}(e,t,i,o):function l(e,t,i,n){var o,s=e-1-n,r=i.lastIndexOf(" ",s-1)+1;for(t.lastIndex=r;o=t.exec(i);){var a=o.index||0;if(a<=s&&t.lastIndex>=s)return{word:o[0],startColumn:n+1+a,endColumn:n+1+t.lastIndex}}return null}(e,t,i,o);return t.lastIndex=0,r},t.DEFAULT_WORD_REGEXP=t.USUAL_WORD_SEPARATORS=void 0,t.USUAL_WORD_SEPARATORS="`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?";var o=function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t="(-?\\d*\\.\\d\\w*)|([^",i=!0,n=!1,o=void 0;try{for(var s,r="`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?"[Symbol.iterator]();!(i=(s=r.next()).done);i=!0){var a=s.value;e.indexOf(a)>=0||(t+="\\"+a)}}catch(e){n=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(n)throw o}}return t+="\\s]+)",new RegExp(t,"g")}();t.DEFAULT_WORD_REGEXP=o}));uA(D$);var E$=gA((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WorkspaceEdit=t.EndOfLine=t.Position=t.Range=t.Selection=void 0;var i,n,o,s,r,a,l,h,c,d=function u(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var n=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,i):{};n.get||n.set?Object.defineProperty(t,i,n):t[i]=e[i]}return t.default=e,t}(C$);t.Selection=i,(n=i||(t.Selection=i={})).to=function g(e){var t=e.positionLineNumber,i=e.positionColumn,n=new d.Position(e.selectionStartLineNumber-1,e.selectionStartColumn-1),o=new d.Position(t-1,i-1);return new d.Selection(n,o)},n.from=function p(e){var t=e.anchor,i=e.active;return new UK.Selection(t.line+1,t.character+1,i.line+1,i.character+1)},t.Range=o,(s=o||(t.Range=o={})).from=function p(e){if(e){var t=e.start,i=e.end;return new UK.Range(t.line+1,t.character+1,i.line+1,i.character+1)}},s.to=function g(e){if(e)return new d.Range(e.startLineNumber-1,e.startColumn-1,e.endLineNumber-1,e.endColumn-1)},t.Position=r,(a=r||(t.Position=r={})).to=function g(e){return new d.Position(e.lineNumber-1,e.column-1)},a.from=function p(e){return{lineNumber:e.line+1,column:e.character+1}},t.EndOfLine=l,(h=l||(t.EndOfLine=l={})).from=function p(e){return e===d.EndOfLine.CRLF?UK.editor.EndOfLineSequence.CRLF:e===d.EndOfLine.LF?UK.editor.EndOfLineSequence.LF:void 0},h.to=function g(e){return e===UK.editor.EndOfLineSequence.CRLF?d.EndOfLine.CRLF:e===UK.editor.EndOfLineSequence.LF?d.EndOfLine.LF:void 0},t.WorkspaceEdit=c,(c||(t.WorkspaceEdit=c={})).from=function p(e){var t,i=[],n=!0,s=!1,r=void 0;try{for(var a,l=e._allEntries()[Symbol.iterator]();!(n=(a=l.next()).done);n=!0){var h=(2,function c(e){if(Array.isArray(e))return e}(t=a.value)||function d(e,t){var i=[],n=!0,o=!1,s=void 0;try{for(var r,a=e[Symbol.iterator]();!(n=(r=a.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){o=!0,s=e}finally{try{n||null==a.return||a.return()}finally{if(o)throw s}}return i}(t,2)||function u(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()),g=h[0],p=h[1];if(!Array.isArray(p))throw new Error("Not implemented for "+g);var m=!0,f=!1,_=void 0;try{for(var b,v=p[Symbol.iterator]();!(m=(b=v.next()).done);m=!0){var C=b.value;i.push({range:o.from(C.range),text:C.newText,forceMoveMarkers:!1})}}catch(e){f=!0,_=e}finally{try{m||null==v.return||v.return()}finally{if(f)throw _}}}}catch(e){s=!0,r=e}finally{try{n||null==l.return||l.return()}finally{if(s)throw r}}return i}}));uA(E$);var x$=gA((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.setWordDefinitionFor=function i(e,t){l.set(e,t)},t.getWordDefinitionFor=h,t.TextEditorEdit=t.TextEditor=t.TextDocument=void 0;var n=function o(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var n=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,i):{};n.get||n.set?Object.defineProperty(t,i,n):t[i]=e[i]}return t.default=e,t}(E$);function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var i=0;i=this._lines.length)throw new Error("Illegal value for `line`");var n=this._textLines[i];if(!n||n.lineNumber!==i||n.text!==this._lines[i]){var o=this._lines[i],s=/^(\s*)/.exec(o)[1].length,r=new C$.Range(i,0,i,o.length),a=i=this._lines.length)n=this._lines[i=this._lines.length-1].length,o=!0;else{var s=this._lines[i].length;n<0?(n=0,o=!0):n>s&&(n=s,o=!0)}return o?new C$.Position(i,n):t}},{key:"getWordRangeAtPosition",value:function e(t,i){var n=this.validatePosition(t);i?(0,L$.regExpLeadsToEndlessLoop)(i)&&(console.warn("[getWordRangeAtPosition]: ignoring custom regexp '".concat(i.source,"' because it matches the empty string.")),i=h(this.languageId)):i=h(this.languageId);var o=(0,D$.getWordAtText)(n.character+1,(0,D$.ensureValidWordDefinition)(i),this._lines[n.line],0);if(o)return new C$.Range(n.line,o.startColumn-1,n.line,o.endColumn-1)}},{key:"eol",get:function e(){switch(this.model.getEOL()){case"\n":return C$.EndOfLine.LF;case"\r\n":return C$.EndOfLine.CRLF;default:throw new Error("invalid argument")}}},{key:"fileName",get:function e(){return""}},{key:"isClosed",get:function e(){return!1}},{key:"isDirty",get:function e(){return!1}},{key:"isUntitled",get:function e(){return!0}},{key:"lineCount",get:function e(){return this.model.getLineCount()}},{key:"_lines",get:function e(){return this.model.getLinesContent()}}]),e}();function d(e){return e.getLanguageIdentifier().language}t.TextDocument=c,t.TextEditor=function(){function e(t){s(this,e),u.call(this),this.editor=t}return a(e,[{key:"languageId",get:function e(){return d(this.editor.getModel())}}]),a(e,[{key:"edit",value:function e(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{undoStopBefore:!0,undoStopAfter:!0};if(this._disposed)return Promise.reject(new Error("TextEditor#edit not possible on closed editors"));var e=new p(this.document,i);return t(e),this._applyEdit(e)}},{key:"_applyEdit",value:function e(t){var i=t.finalize();if(0===i.edits.length&&!i.setEndOfLine)return Promise.resolve(null);var o=i.edits.map((function(e){return e.range}));o.sort((function(e,t){return e.end.line===t.end.line?e.end.character===t.end.character?e.start.line===t.start.line?e.start.character-t.start.character:e.start.line-t.start.line:e.end.character-t.end.character:e.end.line-t.end.line}));for(var s=0,r=o.length-1;s/g,"< omit in toc >").replace(//,"").replace(/^---[\W\w]+?(\r?\n)---/,"").split(/\r?\n/g);return t.forEach((function(e,t,i){tr?h[o]:r}o++}return n}));return g[1]=g[1].map((function(e,t){return/:-+:/.test(e)?(h[t]=Math.max(h[t],5),c[t]="c",":"+"-".repeat(h[t]-2)+":"):/:-+/.test(e)?(h[t]=Math.max(h[t],4),c[t]="l",":"+"-".repeat(h[t]-1)):/-+:/.test(e)?(h[t]=Math.max(h[t],4),c[t]="r","-".repeat(h[t]-1)+":"):/-+/.test(e)?(h[t]=Math.max(h[t],3),c[t]="l","-".repeat(h[t])):void(c[t]="l")})),g.map((function(e){var t=e.map((function(e,t){var i=h[t];return u.test(e)&&(i-=e.match(u).length),o.alignText(e,c[t],i)}));return s+"| "+t.join(" | ")+" |"})).join(i.eol===C$.EndOfLine.LF?"\n":"\r\n")}},{key:"alignText",value:function e(t,i,n){return"c"===i&&n>t.length?(" ".repeat(Math.floor((n-t.length)/2))+t+" ".repeat(n)).slice(0,n):"r"===i?(" ".repeat(n)+t).slice(-n):(t+" ".repeat(n)).slice(0,n)}}]),e}()}));uA(T$);var A$=gA((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.loadLanguage=s,t.registerLanguage=function i(e){var t=e.id;n[t]=e,UK.languages.register(e),UK.languages.onLanguage(t,(function(){s(t)}))};var n={},o={};function s(e){return o[e]||(o[e]=function t(e){return(0,n[e].loader)().then((function(t){UK.languages.setMonarchTokensProvider(e,t.language),UK.languages.setLanguageConfiguration(e,t.conf)}))}(e)),o[e]}}));uA(A$);var M$=gA((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.language=t.conf=void 0;var i={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#?region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#?endregion\\b.*--\x3e")}}};t.conf=i,t.language={defaultToken:"",tokenPostfix:".md",control:/[\\`*_\[\]{}()#+\-\.!]/,noncontrol:/[^\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,jsescapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],latexKeywords:N$.all,latexBeginKeywords:N$.begin_args,tokenizer:{root:[[/^(\s{0,3})(#+)((?:[^\\#]|@escapes)+)((?:#+)?)/,["white","keyword","keyword","keyword"]],[/^\s*(=+|\-+)\s*$/,"keyword"],[/^\s*((\*[ ]?)+)\s*$/,"meta.separator"],[/^\s*>+/,"comment"],[/^\s*([\*\-+:]|\d+\.)\s/,"keyword"],[/^(\t|[ ]{4})[^ ].*$/,"string"],[/^\s*~~~\s*((?:\w|[\/\-#])+)?\s*$/,{token:"string",next:"@codeblock"}],[/^\s*```\s*((?:\w|[\/\-#])+).*$/,{token:"string",next:"@codeblockgh",nextEmbedded:"$1"}],[/^\s*```\s*$/,{token:"string",next:"@codeblock"}],[/(^\${2})/,{token:"comment.math",next:"math",bracket:"@open"}],{include:"@linecontent"}],codeblock:[[/^\s*~~~\s*$/,{token:"string",next:"@pop"}],[/^\s*```\s*$/,{token:"string",next:"@pop"}],[/.*$/,"variable.source"]],codeblockgh:[[/```\s*$/,{token:"variable.source",next:"@pop",nextEmbedded:"@pop"}],[/[^`]+/,"variable.source"]],linecontent:[[/&\w+;/,"string.escape"],[/@escapes/,"escape"],[/\b__([^\\_]|@escapes|_(?!_))+__\b/,"strong"],[/\*\*([^\\*]|@escapes|\*(?!\*))+\*\*/,"strong"],[/\b_[^_]+_\b/,"emphasis"],[/\*([^\\*]|@escapes)+\*/,"emphasis"],[/`([^\\`]|@escapes)+`/,"variable"],[/\{+[^}]+\}+/,"string.target"],[/(!?\[)((?:[^\]\\]|@escapes)*)(\]\([^\)]+\))/,["string.link","","string.link"]],[/(!?\[)((?:[^\]\\]|@escapes)*)(\])/,"string.link"],[/(\$\$)([^$]*)(\$\$)/,[{token:"comment.math",bracket:"@open"},{token:"@rematch",next:"mathInline",goBack:2},{token:"comment.math",bracket:"@close"}]],[/(\$)([^$]+)(\$)/,[{token:"comment.math",bracket:"@open"},{token:"@rematch",next:"mathInline",goBack:1},{token:"comment.math",bracket:"@close"}]],{include:"html"}],html:[[/<(\w+)\/>/,"tag"],[/<(\w+)/,{cases:{"@empty":{token:"tag",next:"@tag.$1"},"@default":{token:"tag",next:"@tag.$1"}}}],[/<\/(\w+)\s*>/,{token:"tag"}],[//,"comment","@pop"],[//,"comment","@pop"],[//,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}}),Y$=Object.freeze({conf:{comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}]},language:{defaultToken:"",ignoreCase:!0,tokenPostfix:".shell",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["if","then","do","else","elif","while","until","for","in","esac","fi","fin","fil","done","exit","set","unset","export","function"],builtins:["ab","awk","bash","beep","cat","cc","cd","chown","chmod","chroot","clear","cp","curl","cut","diff","echo","find","gawk","gcc","get","git","grep","hg","kill","killall","ln","ls","make","mkdir","openssl","mv","nc","node","npm","ping","ps","restart","rm","rmdir","sed","service","sh","shopt","shred","source","sort","sleep","ssh","start","stop","su","sudo","svn","tee","telnet","top","touch","vi","vim","wall","wc","wget","who","write","yes","zsh"],symbols:/[=>.orthogonal-drag-handle{content:" ";height:calc(var(--sash-size) * 2);width:calc(var(--sash-size) * 2);z-index:100;display:block;cursor:all-scroll;position:absolute}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.start,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.end{cursor:nwse-resize}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.end,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.start{cursor:nesw-resize}.monaco-sash.vertical>.orthogonal-drag-handle.start{left:calc(var(--sash-size)/ -2);top:calc(var(--sash-size) * -1)}.monaco-sash.vertical>.orthogonal-drag-handle.end{left:calc(var(--sash-size)/ -2);bottom:calc(var(--sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.start{top:calc(var(--sash-size)/ -2);left:calc(var(--sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.end{top:calc(var(--sash-size)/ -2);right:calc(var(--sash-size) * -1)}.monaco-sash{transition:background-color .1s ease-out;background:0 0}.monaco-sash.debug{background:#0ff}.monaco-sash.debug.disabled{background:rgba(0,255,255,.2)}.monaco-sash.debug:not(.disabled)>.orthogonal-drag-handle{background:red}.monaco-diff-editor .diff-review-line-number{text-align:right;display:inline-block}.monaco-diff-editor .diff-review{position:absolute;user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-diff-editor .diff-review-summary{padding-left:10px}.monaco-diff-editor .diff-review-shadow{position:absolute}.monaco-diff-editor .diff-review-row{white-space:pre}.monaco-diff-editor .diff-review-table{display:table;min-width:100%}.monaco-diff-editor .diff-review-row{display:table-row;width:100%}.monaco-diff-editor .diff-review-spacer{display:inline-block;width:10px;vertical-align:middle}.monaco-diff-editor .diff-review-spacer>.codicon{font-size:9px!important}.monaco-diff-editor .diff-review-actions{display:inline-block;position:absolute;right:10px;top:2px}.monaco-diff-editor .diff-review-actions .action-label{width:16px;height:16px;margin:2px 0}.monaco-mouse-cursor-text{cursor:text}.hc-black .mac .monaco-mouse-cursor-text,.hc-black.mac .monaco-mouse-cursor-text,.vs-dark .mac .monaco-mouse-cursor-text,.vs-dark.mac .monaco-mouse-cursor-text{cursor:-webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAL0lEQVQoz2NgCD3x//9/BhBYBWdhgFVAiVW4JBFKGIa4AqD0//9D3pt4I4tAdAMAHTQ/j5Zom30AAAAASUVORK5CYII=) 1x,url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAz0lEQVRIx2NgYGBY/R8I/vx5eelX3n82IJ9FxGf6tksvf/8FiTMQAcAGQMDvSwu09abffY8QYSAScNk45G198eX//yev73/4///701eh//kZSARckrNBRvz//+8+6ZohwCzjGNjdgQxkAg7B9WADeBjIBqtJCbhRA0YNoIkBSNmaPEMoNmA0FkYNoFKhapJ6FGyAH3nauaSmPfwI0v/3OukVi0CIZ+F25KrtYcx/CTIy0e+rC7R1Z4KMICVTQQ14feVXIbR695u14+Ir4gwAAD49E54wc1kWAAAAAElFTkSuQmCC) 2x) 5 8,text}.monaco-editor .codelens-decoration{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .codelens-decoration>a,.monaco-editor .codelens-decoration>span{user-select:none;-webkit-user-select:none;-ms-user-select:none;white-space:nowrap;vertical-align:sub}.monaco-editor .codelens-decoration>a{text-decoration:none}.monaco-editor .codelens-decoration>a:hover{cursor:pointer}.monaco-editor .codelens-decoration .codicon{vertical-align:middle;color:currentColor!important}.monaco-editor .codelens-decoration>a:hover .codicon::before{cursor:pointer}@keyframes fadein{0%{opacity:0;visibility:visible}100%{opacity:1}}.monaco-editor .codelens-decoration.fadein{animation:fadein .1s linear}.monaco-aria-container{position:absolute;left:-999em}.monaco-editor .monaco-editor-overlaymessage{padding-bottom:8px;z-index:10000}.monaco-editor .monaco-editor-overlaymessage.below{padding-bottom:0;padding-top:8px;z-index:10000}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.monaco-editor .monaco-editor-overlaymessage.fadeIn{animation:fadeIn 150ms ease-out}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.monaco-editor .monaco-editor-overlaymessage.fadeOut{animation:fadeOut .1s ease-out}.monaco-editor .monaco-editor-overlaymessage .message{padding:1px 4px}.monaco-editor .monaco-editor-overlaymessage .anchor{width:0!important;height:0!important;border-color:transparent;border-style:solid;z-index:1000;border-width:8px;position:absolute}.monaco-editor .monaco-editor-overlaymessage.below .anchor.below,.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top{display:none}.monaco-editor .monaco-editor-overlaymessage.below .anchor.top{display:inherit;top:-8px}.monaco-editor .peekview-widget .head{box-sizing:border-box;display:flex}.monaco-editor .peekview-widget .head .peekview-title{display:flex;align-items:center;font-size:13px;margin-left:20px;cursor:pointer;min-width:0}.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty){font-size:.9em;margin-left:.5em}.monaco-editor .peekview-widget .head .peekview-title .meta{white-space:nowrap}.monaco-editor .peekview-widget .head .peekview-title .dirname{white-space:nowrap}.monaco-editor .peekview-widget .head .peekview-title .filename{overflow:hidden;text-overflow:ellipsis}.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty)::before{content:\'-\';padding:0 .3em}.monaco-editor .peekview-widget .head .peekview-actions{flex:1;text-align:right;padding-right:2px}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar{display:inline-block}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar,.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar>.actions-container{height:100%}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar .action-item{margin-left:4px}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar .action-label{width:16px;height:100%;margin:0;line-height:inherit;background-repeat:no-repeat;background-position:center center}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar .action-label.codicon{margin:0}.monaco-editor .peekview-widget>.body{border-top:1px solid;position:relative}.monaco-editor .peekview-widget .head .peekview-title .codicon{margin-right:4px}.monaco-editor .goto-definition-link{text-decoration:underline;cursor:pointer}.monaco-editor .parameter-hints-widget{z-index:10;display:flex;flex-direction:column;line-height:1.5em}.monaco-editor .parameter-hints-widget>.phwrapper{max-width:440px;display:flex;flex-direction:row}.monaco-editor .parameter-hints-widget.multiple{min-height:3.3em;padding:0}.monaco-editor .parameter-hints-widget.visible{transition:left .05s ease-in-out}.monaco-editor .parameter-hints-widget p,.monaco-editor .parameter-hints-widget ul{margin:8px 0}.monaco-editor .parameter-hints-widget .body,.monaco-editor .parameter-hints-widget .monaco-scrollable-element{display:flex;flex:1;flex-direction:column;min-height:100%}.monaco-editor .parameter-hints-widget .signature{padding:4px 5px}.monaco-editor .parameter-hints-widget .docs{padding:0 10px 0 5px;white-space:pre-wrap}.monaco-editor .parameter-hints-widget .docs.empty{display:none}.monaco-editor .parameter-hints-widget .docs .markdown-docs{white-space:initial}.monaco-editor .parameter-hints-widget .docs .markdown-docs code{font-family:var(--monaco-monospace-font)}.monaco-editor .parameter-hints-widget .docs .code{white-space:pre-wrap}.monaco-editor .parameter-hints-widget .docs code{border-radius:3px;padding:0 .4em}.monaco-editor .parameter-hints-widget .controls{display:none;flex-direction:column;align-items:center;min-width:22px;justify-content:flex-end}.monaco-editor .parameter-hints-widget.multiple .controls{display:flex;padding:0 2px}.monaco-editor .parameter-hints-widget.multiple .button{width:16px;height:16px;background-repeat:no-repeat;cursor:pointer}.monaco-editor .parameter-hints-widget .button.previous{bottom:24px}.monaco-editor .parameter-hints-widget .overloads{text-align:center;height:12px;line-height:12px;opacity:.5;font-family:var(--monaco-monospace-font)}.monaco-editor .parameter-hints-widget .signature .parameter.active{font-weight:700;text-decoration:underline}.monaco-editor .parameter-hints-widget .documentation-parameter>.parameter{font-weight:700;margin-right:.5em}.monaco-editor .rename-box{z-index:100;color:inherit}.monaco-editor .rename-box.preview{padding:3px 3px 0 3px}.monaco-editor .rename-box .rename-input{padding:3px;width:calc(100% - 6px)}.monaco-editor .rename-box .rename-label{display:none;opacity:.8}.monaco-editor .rename-box.preview .rename-label{display:inherit}.monaco-editor .snippet-placeholder{min-width:2px;outline-style:solid;outline-width:1px}.monaco-editor .finish-snippet-placeholder{outline-style:solid;outline-width:1px}.monaco-editor .suggest-widget{width:430px;z-index:40;display:flex;flex-direction:column}.monaco-editor .suggest-widget.message{flex-direction:row;align-items:center}.monaco-editor .suggest-details,.monaco-editor .suggest-widget{flex:0 1 auto;width:100%;border-style:solid;border-width:1px}.monaco-editor.hc-black .suggest-details,.monaco-editor.hc-black .suggest-widget{border-width:2px}.monaco-editor .suggest-widget .suggest-status-bar{box-sizing:border-box;display:none;flex-flow:row nowrap;justify-content:space-between;width:100%;font-size:80%;padding:0 4px 0 4px;border-top:1px solid transparent;overflow:hidden}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar{display:flex}.monaco-editor .suggest-widget .suggest-status-bar .left{padding-right:8px}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label{opacity:.5;color:inherit}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label{margin-right:0}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label::after{content:\', \';margin-right:.3em}.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore,.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:100%}.monaco-editor .suggest-widget>.message{padding-left:22px}.monaco-editor .suggest-widget>.tree{height:100%;width:100%}.monaco-editor .suggest-widget .monaco-list{user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row{display:flex;-mox-box-sizing:border-box;box-sizing:border-box;padding-right:10px;background-repeat:no-repeat;background-position:2px 2px;white-space:nowrap;cursor:pointer;touch-action:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents{flex:1;height:100%;overflow:hidden;padding-left:2px}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:pre;justify-content:space-between}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{display:flex}.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight{font-weight:700}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore::before{color:inherit;opacity:1;font-size:14px;cursor:pointer}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close{position:absolute;top:6px;right:2px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover{opacity:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{opacity:.7}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{overflow:hidden;text-overflow:ellipsis}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label{margin-left:4px;opacity:.4;font-size:90%;text-overflow:ellipsis;overflow:hidden;align-self:center}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{margin-left:1.1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{display:none}.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:calc(100% - 26px)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left{flex-shrink:1;flex-grow:1;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label{flex-shrink:0}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label{max-width:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label{flex-shrink:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{overflow:hidden;flex-shrink:4;max-width:70%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:inline-block;position:absolute;right:10px;width:18px;height:18px;visibility:hidden}.monaco-editor .suggest-widget.docs-below .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none!important}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:inline-block}.monaco-editor .suggest-widget.docs-below .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:hover>.contents>.main>.right>.readMore{visibility:visible}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated{opacity:.66;text-decoration:unset}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container{text-decoration:line-through}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label::before{height:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon{display:block;height:16px;width:16px;margin-left:2px;background-repeat:no-repeat;background-size:80%;background-position:center}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon{display:flex;align-items:center;margin-right:4px}.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon,.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon::before{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan{margin:0 0 0 .3em;border:.1em solid #000;width:.7em;height:.7em;display:inline-block}.monaco-editor .suggest-details-container{z-index:41}.monaco-editor .suggest-details{display:flex;flex-direction:column;cursor:default}.monaco-editor .suggest-details.no-docs{display:none}.monaco-editor .suggest-details>.monaco-scrollable-element{flex:1}.monaco-editor .suggest-details>.monaco-scrollable-element>.body{box-sizing:border-box;height:100%;width:100%}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type{flex:2;overflow:hidden;text-overflow:ellipsis;opacity:.7;white-space:pre;margin:0 24px 0 0;padding:4px 0 12px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap{white-space:normal;word-break:break-all}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs{margin:0;padding:4px 5px;white-space:pre-wrap}.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs{margin-right:24px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs{padding:0;white-space:initial;min-height:calc(1rem + 8px)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div,.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty){padding:4px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child{margin-top:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child{margin-bottom:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code{white-space:pre-wrap;word-wrap:break-word}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon{vertical-align:sub}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty{display:none}.monaco-editor .suggest-details code{border-radius:3px;padding:0 .4em}.monaco-editor .suggest-details ul{padding-left:20px}.monaco-editor .suggest-details ol{padding-left:20px}.monaco-editor .suggest-details p code{font-family:var(--monaco-monospace-font)}.quick-input-widget{font-size:13px}.quick-input-widget .monaco-highlighted-label .highlight{color:#0066bf}.vs-dark .quick-input-widget .monaco-highlighted-label .highlight{color:#0097fb}.hc-black .quick-input-widget .monaco-highlighted-label .highlight{color:#f38518}.monaco-editor .inputarea{min-width:0;min-height:0;margin:0;padding:0;position:absolute;outline:0!important;resize:none;border:none;overflow:hidden;color:transparent;background-color:transparent}.monaco-editor .inputarea.ime-input{z-index:10}.monaco-editor .view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box}.monaco-editor .margin-view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box}.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both{border-right:0}.monaco-editor .lines-content .cdr{position:absolute}.monaco-editor .glyph-margin{position:absolute;top:0}.monaco-editor .margin-view-overlays .cgmr{position:absolute;display:flex;align-items:center;justify-content:center}.monaco-editor .lines-content .cigr{position:absolute}.monaco-editor .lines-content .cigra{position:absolute}.monaco-editor .margin-view-overlays .line-numbers{font-variant-numeric:tabular-nums;position:absolute;text-align:right;display:inline-block;vertical-align:middle;box-sizing:border-box;cursor:default;height:100%}.monaco-editor .relative-current-line-number{text-align:left;display:inline-block;width:100%}.monaco-editor .margin-view-overlays .line-numbers.lh-odd{margin-top:1px}.monaco-editor.no-user-select .lines-content,.monaco-editor.no-user-select .view-line,.monaco-editor.no-user-select .view-lines{user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-editor .view-lines{white-space:nowrap}.monaco-editor .view-line{position:absolute;width:100%}.monaco-editor .mtkz{display:inline-block}.monaco-editor .lines-decorations{position:absolute;top:0;background:#fff}.monaco-editor .margin-view-overlays .cldr{position:absolute;height:100%}.monaco-editor .margin-view-overlays .cmdr{position:absolute;left:0;width:100%;height:100%}.monaco-editor .minimap.slider-mouseover .minimap-slider{opacity:0;transition:opacity .1s linear}.monaco-editor .minimap.slider-mouseover:hover .minimap-slider{opacity:1}.monaco-editor .minimap.slider-mouseover .minimap-slider.active{opacity:1}.monaco-editor .minimap-shadow-hidden{position:absolute;width:0}.monaco-editor .minimap-shadow-visible{position:absolute;left:-6px;width:6px}.monaco-editor.no-minimap-shadow .minimap-shadow-visible{position:absolute;left:-1px;width:1px}.monaco-editor .overlayWidgets{position:absolute;top:0;left:0}.monaco-editor .view-ruler{position:absolute;top:0}.monaco-editor .scroll-decoration{position:absolute;top:0;left:0;height:6px}.monaco-editor .lines-content .cslr{position:absolute}.monaco-editor .top-left-radius{border-top-left-radius:3px}.monaco-editor .bottom-left-radius{border-bottom-left-radius:3px}.monaco-editor .top-right-radius{border-top-right-radius:3px}.monaco-editor .bottom-right-radius{border-bottom-right-radius:3px}.monaco-editor.hc-black .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-black .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-black .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-black .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor .cursors-layer{position:absolute;top:0}.monaco-editor .cursors-layer>.cursor{position:absolute;overflow:hidden}.monaco-editor .cursors-layer.cursor-smooth-caret-animation>.cursor{transition:all 80ms}.monaco-editor .cursors-layer.cursor-block-outline-style>.cursor{box-sizing:border-box;background:0 0!important;border-style:solid;border-width:1px}.monaco-editor .cursors-layer.cursor-underline-style>.cursor{border-bottom-width:2px;border-bottom-style:solid;background:0 0!important;box-sizing:border-box}.monaco-editor .cursors-layer.cursor-underline-thin-style>.cursor{border-bottom-width:1px;border-bottom-style:solid;background:0 0!important;box-sizing:border-box}@keyframes monaco-cursor-smooth{0%,20%{opacity:1}100%,60%{opacity:0}}@keyframes monaco-cursor-phase{0%,20%{opacity:1}100%,90%{opacity:0}}@keyframes monaco-cursor-expand{0%,20%{transform:scaleY(1)}100%,80%{transform:scaleY(0)}}.cursor-smooth{animation:monaco-cursor-smooth .5s ease-in-out 0s 20 alternate}.cursor-phase{animation:monaco-cursor-phase .5s ease-in-out 0s 20 alternate}.cursor-expand>.cursor{animation:monaco-cursor-expand .5s ease-in-out 0s 20 alternate}.monaco-action-bar{text-align:right;white-space:nowrap}.monaco-action-bar .actions-container{display:flex;margin:0 auto;padding:0;width:100%;justify-content:flex-end}.monaco-action-bar.vertical .actions-container{display:inline-block}.monaco-action-bar.reverse .actions-container{flex-direction:row-reverse}.monaco-action-bar .action-item{cursor:pointer;display:inline-block;transition:transform 50ms ease;position:relative}.monaco-action-bar .action-item.disabled{cursor:default}.monaco-action-bar.animated .action-item.active{transform:scale(1.272019649,1.272019649)}.monaco-action-bar .action-item .codicon,.monaco-action-bar .action-item .icon{display:inline-block}.monaco-action-bar .action-item .codicon{display:flex;align-items:center}.monaco-action-bar .action-label{font-size:11px;margin-right:4px}.monaco-action-bar .action-item.disabled .action-label,.monaco-action-bar .action-item.disabled .action-label::before,.monaco-action-bar .action-item.disabled .action-label:hover{opacity:.4}.monaco-action-bar.vertical{text-align:left}.monaco-action-bar.vertical .action-item{display:block}.monaco-action-bar.vertical .action-label.separator{display:block;border-bottom:1px solid #bbb;padding-top:1px;margin-left:.8em;margin-right:.8em}.monaco-action-bar.animated.vertical .action-item.active{transform:translate(5px,0)}.secondary-actions .monaco-action-bar .action-label{margin-left:6px}.monaco-action-bar .action-item.select-container{overflow:hidden;flex:1;max-width:170px;min-width:60px;display:flex;align-items:center;justify-content:center;margin-right:10px}.monaco-action-bar .action-item.action-dropdown-item{display:flex}.monaco-action-bar .action-item.action-dropdown-item>.action-label{margin-right:1px}.monaco-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.monaco-scrollable-element>.visible{opacity:1;background:rgba(0,0,0,0);transition:opacity .1s linear}.monaco-scrollable-element>.invisible{opacity:0;pointer-events:none}.monaco-scrollable-element>.invisible.fade{transition:opacity .8s linear}.monaco-scrollable-element>.shadow{position:absolute;display:none}.monaco-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:#ddd 0 6px 6px -6px inset}.monaco-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:#ddd 6px 0 6px -6px inset}.monaco-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.monaco-scrollable-element>.shadow.top.left{box-shadow:#ddd 6px 6px 6px -6px inset}.vs .monaco-scrollable-element>.scrollbar>.slider{background:rgba(100,100,100,.4)}.vs-dark .monaco-scrollable-element>.scrollbar>.slider{background:rgba(121,121,121,.4)}.hc-black .monaco-scrollable-element>.scrollbar>.slider{background:rgba(111,195,223,.6)}.monaco-scrollable-element>.scrollbar>.slider:hover{background:rgba(100,100,100,.7)}.hc-black .monaco-scrollable-element>.scrollbar>.slider:hover{background:rgba(111,195,223,.8)}.monaco-scrollable-element>.scrollbar>.slider.active{background:rgba(0,0,0,.6)}.vs-dark .monaco-scrollable-element>.scrollbar>.slider.active{background:rgba(191,191,191,.4)}.hc-black .monaco-scrollable-element>.scrollbar>.slider.active{background:rgba(111,195,223,1)}.vs-dark .monaco-scrollable-element .shadow.top{box-shadow:none}.vs-dark .monaco-scrollable-element .shadow.left{box-shadow:#000 6px 0 6px -6px inset}.vs-dark .monaco-scrollable-element .shadow.top.left{box-shadow:#000 6px 6px 6px -6px inset}.hc-black .monaco-scrollable-element .shadow.top{box-shadow:none}.hc-black .monaco-scrollable-element .shadow.left{box-shadow:none}.hc-black .monaco-scrollable-element .shadow.top.left{box-shadow:none}.monaco-editor .zone-widget{position:absolute;z-index:10}.monaco-editor .zone-widget .zone-widget-container{border-top-style:solid;border-bottom-style:solid;border-top-width:0;border-bottom-width:0;position:relative}.monaco-action-bar .action-item.menu-entry .action-label{background-image:var(--menu-entry-icon-light)}.hc-black .monaco-action-bar .action-item.menu-entry .action-label,.vs-dark .monaco-action-bar .action-item.menu-entry .action-label{background-image:var(--menu-entry-icon-dark)}.monaco-editor .zone-widget .zone-widget-container.reference-zone-widget{border-top-width:1px;border-bottom-width:1px}.monaco-editor .reference-zone-widget .inline{display:inline-block;vertical-align:top}.monaco-editor .reference-zone-widget .messages{height:100%;width:100%;text-align:center;padding:3em 0}.monaco-editor .reference-zone-widget .ref-tree{line-height:23px}.monaco-editor .reference-zone-widget .ref-tree .reference{text-overflow:ellipsis;overflow:hidden}.monaco-editor .reference-zone-widget .ref-tree .reference-file{display:inline-flex;width:100%;height:100%}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file{color:inherit!important}.monaco-editor .reference-zone-widget .ref-tree .reference-file .count{margin-right:12px;margin-left:auto}.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file{font-weight:700}.colorpicker-widget{height:190px;user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-editor .colorpicker-hover:focus{outline:0}.colorpicker-header{display:flex;height:24px;position:relative;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=);background-size:9px 9px;image-rendering:pixelated}.colorpicker-header .picked-color{width:216px;text-align:center;line-height:24px;cursor:pointer;color:#fff;flex:1;text-align:center}.colorpicker-header .picked-color.light{color:#000}.colorpicker-header .original-color{width:74px;z-index:inherit;cursor:pointer}.colorpicker-body{display:flex;padding:8px;position:relative}.colorpicker-body .saturation-wrap{overflow:hidden;height:150px;position:relative;min-width:220px;flex:1}.colorpicker-body .saturation-box{height:150px;position:absolute}.colorpicker-body .saturation-selection{width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid #fff;border-radius:100%;box-shadow:0 0 2px rgba(0,0,0,.8);position:absolute}.colorpicker-body .strip{width:25px;height:150px}.colorpicker-body .hue-strip{position:relative;margin-left:8px;cursor:grab;background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.colorpicker-body .opacity-strip{position:relative;margin-left:8px;cursor:grab;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=);background-size:9px 9px;image-rendering:pixelated}.colorpicker-body .strip.grabbing{cursor:grabbing}.colorpicker-body .slider{position:absolute;top:0;left:-2px;width:calc(100% + 4px);height:4px;box-sizing:border-box;border:1px solid rgba(255,255,255,.71);box-shadow:0 0 1px rgba(0,0,0,.85)}.colorpicker-body .strip .overlay{height:150px;pointer-events:none}.monaco-hover{cursor:default;position:absolute;overflow:hidden;z-index:50;user-select:text;-webkit-user-select:text;-ms-user-select:text;box-sizing:initial;animation:fadein .1s linear;line-height:1.5em}.monaco-hover.hidden{display:none}.monaco-hover .hover-contents{padding:4px 8px}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents){max-width:500px;word-wrap:break-word}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents) hr{min-width:calc(100% + 100vw)}.monaco-hover .code,.monaco-hover p,.monaco-hover ul{margin:8px 0}.monaco-hover code{font-family:var(--monaco-monospace-font)}.monaco-hover hr{box-sizing:border-box;border-left:0;border-right:0;margin-top:4px;margin-bottom:-4px;margin-left:-8px;margin-right:-8px;height:1px}.monaco-hover .code:first-child,.monaco-hover p:first-child,.monaco-hover ul:first-child{margin-top:0}.monaco-hover .code:last-child,.monaco-hover p:last-child,.monaco-hover ul:last-child{margin-bottom:0}.monaco-hover ul{padding-left:20px}.monaco-hover ol{padding-left:20px}.monaco-hover li>p{margin-bottom:0}.monaco-hover li>ul{margin-top:0}.monaco-hover code{border-radius:3px;padding:0 .4em}.monaco-hover .monaco-tokenized-source{white-space:pre-wrap}.monaco-hover .hover-row.status-bar{font-size:12px;line-height:22px}.monaco-hover .hover-row.status-bar .actions{display:flex;padding:0 8px}.monaco-hover .hover-row.status-bar .actions .action-container{margin-right:16px;cursor:pointer}.monaco-hover .hover-row.status-bar .actions .action-container .action .icon{padding-right:4px}.monaco-hover .markdown-hover .hover-contents .codicon{color:inherit;font-size:inherit;vertical-align:middle}.monaco-hover .hover-contents a.code-link:before{content:\'(\'}.monaco-hover .hover-contents a.code-link:after{content:\')\'}.monaco-hover .hover-contents a.code-link{color:inherit}.monaco-hover .hover-contents a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents) span{margin-bottom:4px;display:inline-block}@font-face{font-family:codicon;src:url(codicon.ttf) format("truetype")}.codicon[class*=codicon-]{font:normal normal normal 16px/1 codicon;display:inline-block;text-decoration:none;text-rendering:auto;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;user-select:none;-webkit-user-select:none;-ms-user-select:none}.codicon-wrench-subaction{opacity:.5}@keyframes codicon-spin{100%{transform:rotate(360deg)}}.codicon-gear.codicon-modifier-spin,.codicon-loading.codicon-modifier-spin,.codicon-sync.codicon-modifier-spin{animation:codicon-spin 1.5s steps(30) infinite}.codicon-modifier-disabled{opacity:.4}.codicon-loading,.codicon-tree-item-loading::before{animation-duration:1s!important;animation-timing-function:cubic-bezier(.53,.21,.29,.67)!important}.monaco-list{position:relative;height:100%;width:100%;white-space:nowrap}.monaco-list.mouse-support{user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-list>.monaco-scrollable-element{height:100%}.monaco-list-rows{position:relative;width:100%;height:100%}.monaco-list.horizontal-scrolling .monaco-list-rows{width:auto;min-width:100%}.monaco-list-row{position:absolute;box-sizing:border-box;overflow:hidden;width:100%}.monaco-list.mouse-support .monaco-list-row{cursor:pointer;touch-action:none}.monaco-list-row.scrolling{display:none!important}.monaco-list.element-focused,.monaco-list.selection-multiple,.monaco-list.selection-single{outline:0!important}.monaco-list:focus .monaco-list-row.selected .codicon{color:inherit}.monaco-drag-image{display:inline-block;padding:1px 7px;border-radius:10px;font-size:12px;position:absolute;z-index:1000}.monaco-list-type-filter{display:flex;align-items:center;position:absolute;border-radius:2px;padding:0 3px;max-width:calc(100% - 10px);text-overflow:ellipsis;overflow:hidden;text-align:right;box-sizing:border-box;cursor:all-scroll;font-size:13px;line-height:18px;height:20px;z-index:1;top:4px}.monaco-list-type-filter.dragging{transition:top .2s,left .2s}.monaco-list-type-filter.ne{right:4px}.monaco-list-type-filter.nw{left:4px}.monaco-list-type-filter>.controls{display:flex;align-items:center;box-sizing:border-box;transition:width .2s;width:0}.monaco-list-type-filter.dragging>.controls,.monaco-list-type-filter:hover>.controls{width:36px}.monaco-list-type-filter>.controls>*{border:none;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;background:0 0;width:16px;height:16px;flex-shrink:0;margin:0;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer}.monaco-list-type-filter>.controls>.filter{margin-left:4px}.monaco-list-type-filter-message{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;padding:40px 1em 1em 1em;text-align:center;white-space:normal;opacity:.7;pointer-events:none}.monaco-list-type-filter-message:empty{display:none}.monaco-list-type-filter{cursor:grab}.monaco-list-type-filter.dragging{cursor:grabbing}.context-view .monaco-menu{min-width:130px}.context-view{position:absolute;z-index:2500}.context-view.fixed{all:initial;font-family:inherit;font-size:13px;position:fixed;z-index:2500;color:inherit}.monaco-table{display:flex;flex-direction:column;position:relative;height:100%;width:100%;white-space:nowrap}.monaco-table>.monaco-split-view2{border-bottom:1px solid transparent}.monaco-table>.monaco-list{flex:1}.monaco-table-tr{display:flex}.monaco-table-th{width:100%;height:100%;font-weight:700;overflow:hidden;text-overflow:ellipsis}.monaco-table-td,.monaco-table-th{box-sizing:border-box;padding-left:10px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.monaco-table-td[data-col-index="0"],.monaco-table-th[data-col-index="0"]{padding-left:20px}.monaco-table>.monaco-split-view2 .monaco-sash.vertical::before{content:"";position:absolute;left:calc(var(--sash-size)/ 2);width:0;border-left:1px solid transparent}.monaco-table>.monaco-split-view2,.monaco-table>.monaco-split-view2 .monaco-sash.vertical::before{transition:border-color .2s ease-out}.monaco-editor .contentWidgets .codicon-light-bulb,.monaco-editor .contentWidgets .codicon-lightbulb-autofix{display:flex;align-items:center;justify-content:center}.monaco-editor .contentWidgets .codicon-light-bulb:hover,.monaco-editor .contentWidgets .codicon-lightbulb-autofix:hover{cursor:pointer}.monaco-dropdown{height:100%;padding:0}.monaco-dropdown>.dropdown-label{cursor:pointer;height:100%}.monaco-dropdown>.dropdown-label>.action-label.disabled{cursor:default}.monaco-split-view2{position:relative;width:100%;height:100%}.monaco-split-view2>.sash-container{position:absolute;width:100%;height:100%;pointer-events:none}.monaco-split-view2>.sash-container>.monaco-sash{pointer-events:initial}.monaco-split-view2>.monaco-scrollable-element{width:100%;height:100%}.monaco-split-view2>.monaco-scrollable-element>.split-view-container{width:100%;height:100%;white-space:nowrap;position:relative}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view{white-space:initial;position:absolute}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view:not(.visible){display:none}.monaco-split-view2.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view{width:100%}.monaco-split-view2.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view{height:100%}.monaco-split-view2.separator-border>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child)::before{content:\' \';position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--separator-border)}.monaco-split-view2.separator-border.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child)::before{height:100%;width:1px}.monaco-split-view2.separator-border.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child)::before{height:1px;width:100%}.monaco-resizable-element>.resizer{cursor:nwse-resize;width:30px;height:30px;position:absolute;right:-15px;bottom:-15px;z-index:20}.monaco-icon-label{display:flex;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label::before{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;line-height:inherit!important;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top;flex-shrink:0}.monaco-icon-label>.monaco-icon-label-container{min-width:0;overflow:hidden;text-overflow:ellipsis;flex:1}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{color:inherit;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name>.label-separator{margin:0 2px;opacity:.5}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.7;margin-left:.5em;font-size:.9em;white-space:pre}.monaco-icon-label.nowrap>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{white-space:nowrap}.vs .monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.95}.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-description-container>.label-description,.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{font-style:italic}.monaco-icon-label.deprecated{text-decoration:line-through;opacity:.66}.monaco-icon-label.italic::after{font-style:italic}.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-description-container>.label-description,.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{text-decoration:line-through}.monaco-icon-label::after{opacity:.75;font-size:90%;font-weight:600;padding:0 16px 0 5px;text-align:center}.monaco-list:focus .selected .monaco-icon-label,.monaco-list:focus .selected .monaco-icon-label::after{color:inherit!important}.monaco-list-row.focused.selected .label-description,.monaco-list-row.selected .label-description{opacity:.8}.monaco-tl-row{display:flex;height:100%;align-items:center;position:relative}.monaco-tl-indent{height:100%;position:absolute;top:0;left:16px;pointer-events:none}.hide-arrows .monaco-tl-indent{left:12px}.monaco-tl-indent>.indent-guide{display:inline-block;box-sizing:border-box;height:100%;border-left:1px solid transparent}.monaco-tl-indent>.indent-guide{transition:border-color .1s linear}.monaco-tl-contents,.monaco-tl-twistie{height:100%}.monaco-tl-twistie{font-size:10px;text-align:right;padding-right:6px;flex-shrink:0;width:16px;display:flex!important;align-items:center;justify-content:center;color:inherit!important;transform:translateX(3px)}.monaco-tl-contents{flex:1;overflow:hidden}.monaco-tl-twistie::before{border-radius:20px}.monaco-tl-twistie.collapsed::before{transform:rotate(-90deg)}.monaco-tl-twistie.codicon-tree-item-loading::before{animation:codicon-spin 1.25s steps(30) infinite}.quick-input-widget{position:absolute;width:600px;z-index:2000;padding-bottom:6px;left:50%;margin-left:-300px}.quick-input-titlebar{display:flex}.quick-input-left-action-bar{display:flex;margin-left:4px;flex:1}.quick-input-left-action-bar.monaco-action-bar .actions-container{justify-content:flex-start}.quick-input-title{padding:3px 0;text-align:center}.quick-input-right-action-bar{display:flex;margin-right:4px;flex:1}.quick-input-titlebar .monaco-action-bar .action-label.codicon{margin:0;width:19px;height:100%;background-position:center;background-repeat:no-repeat}.quick-input-description{margin:6px}.quick-input-header .quick-input-description{margin:4px 2px}.quick-input-header{display:flex;padding:6px 6px 0 6px;margin-bottom:-2px}.quick-input-widget.hidden-input .quick-input-header{padding:0;margin-bottom:0}.quick-input-and-message{display:flex;flex-direction:column;flex-grow:1;position:relative}.quick-input-check-all{align-self:center;margin:0}.quick-input-filter{flex-grow:1;display:flex;position:relative}.quick-input-box{flex-grow:1}.quick-input-widget.show-checkboxes .quick-input-box,.quick-input-widget.show-checkboxes .quick-input-message{margin-left:5px}.quick-input-visible-count{position:absolute;left:-10000px}.quick-input-count{align-self:center;position:absolute;right:4px;display:flex;align-items:center}.quick-input-count .monaco-count-badge{vertical-align:middle;padding:2px 4px;border-radius:2px;min-height:auto;line-height:normal}.quick-input-action{margin-left:6px}.quick-input-action .monaco-text-button{font-size:11px;padding:0 6px;display:flex;height:27.5px;align-items:center}.quick-input-message{margin-top:-1px;padding:5px 5px 2px 5px}.quick-input-message>.codicon{margin:0 .2em;vertical-align:text-bottom}.quick-input-progress.monaco-progress-container{position:relative}.quick-input-progress.monaco-progress-container,.quick-input-progress.monaco-progress-container .progress-bit{height:2px}.quick-input-list{line-height:22px;margin-top:6px}.quick-input-widget.hidden-input .quick-input-list{margin-top:0}.quick-input-list .monaco-list{overflow:hidden;max-height:calc(20 * 22px)}.quick-input-list .quick-input-list-entry{box-sizing:border-box;overflow:hidden;display:flex;height:100%;padding:0 6px}.quick-input-list .quick-input-list-entry.quick-input-list-separator-border{border-top-width:1px;border-top-style:solid}.quick-input-list .monaco-list-row:first-child .quick-input-list-entry.quick-input-list-separator-border{border-top-style:none}.quick-input-list .quick-input-list-label{overflow:hidden;display:flex;height:100%;flex:1}.quick-input-list .quick-input-list-checkbox{align-self:center;margin:0}.quick-input-list .quick-input-list-rows{overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;height:100%;flex:1;margin-left:5px}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows{margin-left:10px}.quick-input-widget .quick-input-list .quick-input-list-checkbox{display:none}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox{display:inline}.quick-input-list .quick-input-list-rows>.quick-input-list-row{display:flex;align-items:center}.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label,.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label .monaco-icon-label-container>.monaco-icon-name-container{flex:1}.quick-input-list .quick-input-list-rows>.quick-input-list-row .codicon[class*=codicon-]{vertical-align:sub}.quick-input-list .quick-input-list-rows .monaco-highlighted-label span{opacity:1}.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding{margin-right:8px}.quick-input-list .quick-input-list-label-meta{opacity:.7;line-height:normal;text-overflow:ellipsis;overflow:hidden}.quick-input-list .monaco-highlighted-label .highlight{font-weight:700}.quick-input-list .quick-input-list-entry .quick-input-list-separator{margin-right:8px}.quick-input-list .quick-input-list-entry-action-bar{display:flex;flex:0;overflow:visible}.quick-input-list .quick-input-list-entry-action-bar .action-label{display:none}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin:0;height:100%;padding:0 2px;vertical-align:middle}.quick-input-list .quick-input-list-entry-action-bar{margin-top:1px}.quick-input-list .quick-input-list-entry-action-bar{margin-right:4px}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin-right:4px}.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label,.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label{display:flex}.monaco-count-badge{padding:3px 6px;border-radius:11px;font-size:11px;min-width:18px;min-height:18px;line-height:11px;font-weight:400;text-align:center;display:inline-block;box-sizing:border-box}.monaco-count-badge.long{padding:2px 3px;border-radius:2px;min-height:auto;line-height:normal}.monaco-editor .peekview-widget .head .peekview-title .severity-icon{display:inline-block;vertical-align:text-top;margin-right:4px}.monaco-editor .marker-widget{text-overflow:ellipsis;white-space:nowrap}.monaco-editor .marker-widget>.stale{opacity:.6;font-style:italic}.monaco-editor .marker-widget .title{display:inline-block;padding-right:5px}.monaco-editor .marker-widget .descriptioncontainer{position:absolute;white-space:pre;user-select:text;-webkit-user-select:text;-ms-user-select:text;padding:8px 12px 0 20px}.monaco-editor .marker-widget .descriptioncontainer .message{display:flex;flex-direction:column}.monaco-editor .marker-widget .descriptioncontainer .message .details{padding-left:6px}.monaco-editor .marker-widget .descriptioncontainer .message .source,.monaco-editor .marker-widget .descriptioncontainer .message span.code{opacity:.6}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link{opacity:.6;color:inherit}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before{content:\'(\'}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after{content:\')\'}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under}.monaco-editor .marker-widget .descriptioncontainer .filename{cursor:pointer}.monaco-editor{font-family:-apple-system,BlinkMacSystemFont,"Segoe WPC","Segoe UI",HelveticaNeue-Light,system-ui,Ubuntu,"Droid Sans",sans-serif;--monaco-monospace-font:"SF Mono",Monaco,Menlo,Consolas,"Ubuntu Mono","Liberation Mono","DejaVu Sans Mono","Courier New",monospace}.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{position:absolute!important;height:1px;width:1px;left:inherit!important;overflow:hidden;clip:rect(1px,1px,1px,1px)}.monaco-editor.hc-black{-ms-high-contrast-adjust:none}@media screen and (-ms-high-contrast:active){.monaco-editor.vs .view-overlays .current-line,.monaco-editor.vs-dark .view-overlays .current-line{border-color:windowtext!important;border-left:0;border-right:0}.monaco-editor.vs .cursor,.monaco-editor.vs-dark .cursor{background-color:windowtext!important}.monaco-editor.vs .dnd-target,.monaco-editor.vs-dark .dnd-target{border-color:windowtext!important}.monaco-editor.vs .selected-text,.monaco-editor.vs-dark .selected-text{background-color:highlight!important}.monaco-editor.vs .view-line,.monaco-editor.vs-dark .view-line{-ms-high-contrast-adjust:none}.monaco-editor.vs .view-line span,.monaco-editor.vs-dark .view-line span{color:windowtext!important}.monaco-editor.vs .view-line span.inline-selected-text,.monaco-editor.vs-dark .view-line span.inline-selected-text{color:highlighttext!important}.monaco-editor.vs .view-overlays,.monaco-editor.vs-dark .view-overlays{-ms-high-contrast-adjust:none}.monaco-editor.vs .reference-decoration,.monaco-editor.vs .selectionHighlight,.monaco-editor.vs .wordHighlight,.monaco-editor.vs .wordHighlightStrong,.monaco-editor.vs-dark .reference-decoration,.monaco-editor.vs-dark .selectionHighlight,.monaco-editor.vs-dark .wordHighlight,.monaco-editor.vs-dark .wordHighlightStrong{border:2px dotted highlight!important;background:0 0!important;box-sizing:border-box}.monaco-editor.vs .rangeHighlight,.monaco-editor.vs-dark .rangeHighlight{background:0 0!important;border:1px dotted activeborder!important;box-sizing:border-box}.monaco-editor.vs .bracket-match,.monaco-editor.vs-dark .bracket-match{border-color:windowtext!important;background:0 0!important}.monaco-editor.vs .currentFindMatch,.monaco-editor.vs .findMatch,.monaco-editor.vs-dark .currentFindMatch,.monaco-editor.vs-dark .findMatch{border:2px dotted activeborder!important;background:0 0!important;box-sizing:border-box}.monaco-editor.vs .find-widget,.monaco-editor.vs-dark .find-widget{border:1px solid windowtext}.monaco-editor.vs .monaco-list .monaco-list-row,.monaco-editor.vs-dark .monaco-list .monaco-list-row{-ms-high-contrast-adjust:none;color:windowtext!important}.monaco-editor.vs .monaco-list .monaco-list-row.focused,.monaco-editor.vs-dark .monaco-list .monaco-list-row.focused{color:highlighttext!important;background-color:highlight!important}.monaco-editor.vs .monaco-list .monaco-list-row:hover,.monaco-editor.vs-dark .monaco-list .monaco-list-row:hover{background:0 0!important;border:1px solid highlight;box-sizing:border-box}.monaco-editor.vs .monaco-scrollable-element>.scrollbar,.monaco-editor.vs-dark .monaco-scrollable-element>.scrollbar{-ms-high-contrast-adjust:none;background:background!important;border:1px solid windowtext;box-sizing:border-box}.monaco-editor.vs .monaco-scrollable-element>.scrollbar>.slider,.monaco-editor.vs-dark .monaco-scrollable-element>.scrollbar>.slider{background:windowtext!important}.monaco-editor.vs .monaco-scrollable-element>.scrollbar>.slider:hover,.monaco-editor.vs-dark .monaco-scrollable-element>.scrollbar>.slider:hover{background:highlight!important}.monaco-editor.vs .monaco-scrollable-element>.scrollbar>.slider.active,.monaco-editor.vs-dark .monaco-scrollable-element>.scrollbar>.slider.active{background:highlight!important}.monaco-editor.vs .decorationsOverviewRuler,.monaco-editor.vs-dark .decorationsOverviewRuler{opacity:0}.monaco-editor.vs .minimap,.monaco-editor.vs-dark .minimap{display:none}.monaco-editor.vs .squiggly-d-error,.monaco-editor.vs-dark .squiggly-d-error{background:0 0!important;border-bottom:4px double #e47777}.monaco-editor.vs .squiggly-c-warning,.monaco-editor.vs-dark .squiggly-c-warning{border-bottom:4px double #71b771}.monaco-editor.vs .squiggly-b-info,.monaco-editor.vs-dark .squiggly-b-info{border-bottom:4px double #71b771}.monaco-editor.vs .squiggly-a-hint,.monaco-editor.vs-dark .squiggly-a-hint{border-bottom:4px double #6c6c6c}.monaco-editor.vs .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label{-ms-high-contrast-adjust:none;color:highlighttext!important;background-color:highlight!important}.monaco-editor.vs .monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .action-label,.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .action-label{-ms-high-contrast-adjust:none;background:0 0!important;border:1px solid highlight;box-sizing:border-box}.monaco-diff-editor.vs .diffOverviewRuler,.monaco-diff-editor.vs-dark .diffOverviewRuler{display:none}.monaco-editor.vs .line-delete,.monaco-editor.vs .line-insert,.monaco-editor.vs-dark .line-delete,.monaco-editor.vs-dark .line-insert{background:0 0!important;border:1px solid highlight!important;box-sizing:border-box}.monaco-editor.vs .char-delete,.monaco-editor.vs .char-insert,.monaco-editor.vs-dark .char-delete,.monaco-editor.vs-dark .char-insert{background:0 0!important}}.monaco-progress-container{width:100%;height:5px;overflow:hidden}.monaco-progress-container .progress-bit{width:2%;height:5px;position:absolute;left:0;display:none}.monaco-progress-container.active .progress-bit{display:inherit}.monaco-progress-container.discrete .progress-bit{left:0;transition:width .1s linear}.monaco-progress-container.discrete.done .progress-bit{width:100%}.monaco-progress-container.infinite .progress-bit{animation-name:progress;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear;transform:translate3d(0,0,0)}@keyframes progress{from{transform:translateX(0) scaleX(1)}50%{transform:translateX(2500%) scaleX(3)}to{transform:translateX(4900%) scaleX(1)}}.monaco-text-button{box-sizing:border-box;display:flex;width:100%;padding:4px;text-align:center;cursor:pointer;justify-content:center;align-items:center}.monaco-text-button:hover{text-decoration:none!important}.monaco-button.disabled{opacity:.4;cursor:default}.monaco-text-button>.codicon{margin:0 .2em;color:inherit!important}.monaco-button-dropdown{display:flex}.monaco-button-dropdown>.monaco-dropdown-button{margin-left:1px}.monaco-keybinding{display:flex;align-items:center;line-height:10px}.monaco-keybinding>.monaco-keybinding-key{display:inline-block;border:solid 1px rgba(204,204,204,.4);border-bottom-color:rgba(187,187,187,.4);border-radius:3px;box-shadow:inset 0 -1px 0 rgba(187,187,187,.4);background-color:rgba(221,221,221,.4);vertical-align:middle;color:#555;font-size:11px;padding:3px 5px;margin:0 2px}.monaco-keybinding>.monaco-keybinding-key:first-child{margin-left:0}.monaco-keybinding>.monaco-keybinding-key:last-child{margin-right:0}.hc-black .monaco-keybinding>.monaco-keybinding-key,.vs-dark .monaco-keybinding>.monaco-keybinding-key{background-color:rgba(128,128,128,.17);color:#ccc;border:solid 1px rgba(51,51,51,.6);border-bottom-color:rgba(68,68,68,.6);box-shadow:inset 0 -1px 0 rgba(68,68,68,.6)}.monaco-keybinding>.monaco-keybinding-key-separator{display:inline-block}.monaco-keybinding>.monaco-keybinding-key-chord-separator{width:6px}.monaco-inputbox{position:relative;display:block;padding:0;box-sizing:border-box;font-size:inherit}.monaco-inputbox.idle{border:1px solid transparent}.monaco-inputbox>.ibwrapper>.input,.monaco-inputbox>.ibwrapper>.mirror{padding:4px}.monaco-inputbox>.ibwrapper{position:relative;width:100%;height:100%}.monaco-inputbox>.ibwrapper>.input{display:inline-block;box-sizing:border-box;width:100%;height:100%;line-height:inherit;border:none;font-family:inherit;font-size:inherit;resize:none;color:inherit}.monaco-inputbox>.ibwrapper>input{text-overflow:ellipsis}.monaco-inputbox>.ibwrapper>textarea.input{display:block;-ms-overflow-style:none;scrollbar-width:none;outline:0}.monaco-inputbox>.ibwrapper>textarea.input::-webkit-scrollbar{display:none}.monaco-inputbox>.ibwrapper>textarea.input.empty{white-space:nowrap}.monaco-inputbox>.ibwrapper>.mirror{position:absolute;display:inline-block;width:100%;top:0;left:0;box-sizing:border-box;white-space:pre-wrap;visibility:hidden;word-wrap:break-word}.monaco-inputbox-container{text-align:right}.monaco-inputbox-container .monaco-inputbox-message{display:inline-block;overflow:hidden;text-align:left;width:100%;box-sizing:border-box;padding:.4em;font-size:12px;line-height:17px;margin-top:-1px;word-wrap:break-word}.monaco-inputbox .monaco-action-bar{position:absolute;right:2px;top:4px}.monaco-inputbox .monaco-action-bar .action-item{margin-left:2px}.monaco-inputbox .monaco-action-bar .action-item .codicon{background-repeat:no-repeat;width:16px;height:16px}.monaco-remote-cursor{position:absolute;pointer-events:none;z-index:4000;width:2px}.monaco-remote-cursor:before{content:"";width:6px;height:5px;display:block;margin-left:-2px;margin-top:0;z-index:4000;background:inherit}.monaco-remote-cursor-tooltip{position:absolute;white-space:nowrap;color:#fff;text-shadow:0 0 1px #000;opacity:1;font-size:12px;padding:2px;font-family:sans-serif;z-index:4000;transition:opacity .5s ease-out;-webkit-transition:opacity .5s ease-out;-moz-transition:opacity .5s ease-out;-ms-transition:opacity .5s ease-out;-o-transition:opacity .5s ease-out}.monaco-remote-selection{position:absolute;pointer-events:auto;opacity:.3;background:#00f}',document.head.appendChild(e)}(); \ No newline at end of file diff --git a/jupyter/viewOnly/resources/jupyter-view-only/externalLink.svg b/jupyter/viewOnly/resources/jupyter-view-only/externalLink.svg new file mode 100644 index 000000000000..5ab490839aec --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/externalLink.svg @@ -0,0 +1,3 @@ + + + diff --git a/jupyter/viewOnly/resources/jupyter-view-only/index.html b/jupyter/viewOnly/resources/jupyter-view-only/index.html new file mode 100644 index 000000000000..68967a25c227 --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/index.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + +
    +

    PyCharm Community edition supports Jupyter notebooks in read-only mode, to get full support for local notebooks download and try PyCharm Professional now!

    +
    +
    + +

    Try DataSpell — a dedicated IDE for data science,
    with + full + support for local and remote notebooks

    +
    +
    + +

    Try Datalore — an online environment
    for Jupyter notebooks in the browser

    +
    +
    +

    Also read more about JetBrains Data Solutions in our new blog post

    +
    +
    + + diff --git a/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.css b/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.css new file mode 100644 index 000000000000..937a008aebdb --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.css @@ -0,0 +1,19 @@ +body, +html { + margin: 0; + padding: 0; +} + +html { + overflow: hidden; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 12px; +} + +.menu { + display: none; +} + +.output_area .jupyter-widgets-disconnected::before { + display: none; +} diff --git a/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.html b/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.html new file mode 100644 index 000000000000..9eaa59e971df --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.html @@ -0,0 +1,20 @@ + + + + + IpyWidgets + + + + + + + + + + + diff --git a/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.js b/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.js new file mode 100644 index 000000000000..c98af9c4b6b7 --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/ipywidgets.js @@ -0,0 +1,62282 @@ +(function ($$1) { + $$1 = $$1 && $$1.hasOwnProperty('default') ? $$1['default'] : $$1; + + define("jquery", function() { + return $; + }); + define("underscore", function() { + return {}; + }); + + window.exports = {}; + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + + define('services/kernels/comm', [ + 'jquery', + 'base/js/utils', + ], function($, utils) { + + //----------------------------------------------------------------------- + // CommManager class + //----------------------------------------------------------------------- + + var CommManager = function (kernel) { + this.comms = {}; + this.targets = {}; + if (kernel !== undefined) { + this.init_kernel(kernel); + } + }; + + CommManager.prototype.init_kernel = function (kernel) { + /** + * connect the kernel, and register message handlers + */ + this.kernel = kernel; + var msg_types = ['comm_open', 'comm_msg', 'comm_close']; + for (var i = 0; i < msg_types.length; i++) { + var msg_type = msg_types[i]; + kernel.register_iopub_handler(msg_type, $.proxy(this[msg_type], this)); + } + }; + + CommManager.prototype.new_comm = function (target_name, data, callbacks, metadata, comm_id, buffers) { + /** + * Create a new Comm, register it, and open its Kernel-side counterpart + * Mimics the auto-registration in `Comm.__init__` in the Jupyter Comm. + * + * argument comm_id is optional + */ + var comm = new Comm(target_name, comm_id); + this.register_comm(comm); + comm.open(data, callbacks, metadata, buffers); + return comm; + }; + + CommManager.prototype.register_target = function (target_name, f) { + /** + * Register a target function for a given target name + */ + this.targets[target_name] = f; + }; + + CommManager.prototype.unregister_target = function (target_name, f) { + /** + * Unregister a target function for a given target name + */ + delete this.targets[target_name]; + }; + + CommManager.prototype.register_comm = function (comm) { + /** + * Register a comm in the mapping + */ + this.comms[comm.comm_id] = Promise.resolve(comm); + comm.kernel = this.kernel; + return comm.comm_id; + }; + + CommManager.prototype.unregister_comm = function (comm) { + /** + * Remove a comm from the mapping + */ + delete this.comms[comm.comm_id]; + }; + + // comm message handlers + + CommManager.prototype.comm_open = function (msg) { + var content = msg.content; + var that = this; + var comm_id = content.comm_id; + + this.comms[comm_id] = utils.load_class(content.target_name, content.target_module, + this.targets).then(function(target) { + var comm = new Comm(content.target_name, comm_id); + comm.kernel = that.kernel; + try { + var response = target(comm, msg); + } catch (e) { + comm.close(); + that.unregister_comm(comm); + var wrapped_error = new utils.WrappedError("Exception opening new comm", e); + console.error(wrapped_error); + return Promise.reject(wrapped_error); + } + // Regardless of the target return value, we need to + // then return the comm + return Promise.resolve(response).then(function() {return comm;}); + }, utils.reject('Could not open comm', true)); + return this.comms[comm_id]; + }; + + CommManager.prototype.comm_close = function(msg) { + var content = msg.content; + if (this.comms[content.comm_id] === undefined) { + console.error('Comm promise not found for comm id ' + content.comm_id); + return; + } + var that = this; + this.comms[content.comm_id] = this.comms[content.comm_id].then(function(comm) { + that.unregister_comm(comm); + try { + comm.handle_close(msg); + } catch (e) { + console.log("Exception closing comm: ", e, e.stack, msg); + } + // don't return a comm, so that further .then() functions + // get an undefined comm input + }); + return this.comms[content.comm_id]; + }; + + CommManager.prototype.comm_msg = function(msg) { + var content = msg.content; + if (this.comms[content.comm_id] === undefined) { + console.error('Comm promise not found for comm id ' + content.comm_id); + return; + } + + this.comms[content.comm_id] = this.comms[content.comm_id].then(function(comm) { + return (Promise.resolve(comm.handle_msg(msg)) + .catch(utils.reject('Exception handling comm message')) + .then(function() {return comm;})); + }); + return this.comms[content.comm_id]; + }; + + //----------------------------------------------------------------------- + // Comm base class + //----------------------------------------------------------------------- + + var Comm = function (target_name, comm_id) { + this.target_name = target_name; + this.comm_id = comm_id || utils.uuid(); + this._msg_callback = this._close_callback = null; + }; + + // methods for sending messages + Comm.prototype.open = function (data, callbacks, metadata, buffers) { + var content = { + comm_id : this.comm_id, + target_name : this.target_name, + data : data || {}, + }; + return this.kernel.send_shell_message("comm_open", content, callbacks, metadata, buffers); + }; + + Comm.prototype.send = function (data, callbacks, metadata, buffers) { + var content = { + comm_id : this.comm_id, + data : data || {}, + }; + return this.kernel.send_shell_message("comm_msg", content, callbacks, metadata, buffers); + }; + + Comm.prototype.close = function (data, callbacks, metadata, buffers) { + var content = { + comm_id : this.comm_id, + data : data || {}, + }; + return this.kernel.send_shell_message("comm_close", content, callbacks, metadata, buffers); + }; + + // methods for registering callbacks for incoming messages + Comm.prototype._register_callback = function (key, callback) { + this['_' + key + '_callback'] = callback; + }; + + Comm.prototype.on_msg = function (callback) { + this._register_callback('msg', callback); + }; + + Comm.prototype.on_close = function (callback) { + this._register_callback('close', callback); + }; + + // methods for handling incoming messages + + Comm.prototype._callback = function (key, msg) { + var callback = this['_' + key + '_callback']; + if (callback) { + try { + return callback(msg); + } catch (e) { + console.log("Exception in Comm callback", e, e.stack, msg); + } + } + }; + + Comm.prototype.handle_msg = function (msg) { + return this._callback('msg', msg); + }; + + Comm.prototype.handle_close = function (msg) { + this._callback('close', msg); + }; + + return { + 'CommManager': CommManager, + 'Comm': Comm + }; + }); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + + define('services/kernels/kernel', [ + 'jquery', + 'base/js/utils', + './comm', + './serialize', + 'base/js/events' + ], function($, utils, comm, serialize, events) { + + /** + * A Kernel class to communicate with the Python kernel. This + * should generally not be constructed directly, but be created + * by. the `Session` object. Once created, this object should be + * used to communicate with the kernel. + * + * Preliminary documentation for the REST API is at + * https://github.com/ipython/ipython/wiki/IPEP-16%3A-Notebook-multi-directory-dashboard-and-URL-mapping#kernels-api + * + * Documentation for the messaging specifications is at + * https://jupyter-client.readthedocs.io/en/stable/messaging.html + * + * @class Kernel + * @param {string} kernel_service_url - the URL to access the kernel REST api + * @param {string} ws_url - the websockets URL + * @param {string} name - the kernel type (e.g. python3) + */ + var Kernel = function (kernel_service_url, ws_url, name) { + this.events = events; + + this.id = null; + this.name = name; + this.ws = null; + this._stopping = false; + + this.kernel_service_url = kernel_service_url; + this.kernel_url = null; + this.ws_url = ws_url || utils.get_body_data("wsUrl"); + if (!this.ws_url) { + // trailing 's' in https will become wss for secure web sockets + this.ws_url = location.protocol.replace('http', 'ws') + "//" + location.host; + } + + this.username = "username"; + this.session_id = utils.uuid(); + this._msg_callbacks = {}; + this._msg_callbacks_overrides = {}; + this._display_id_to_parent_ids = {}; + this._msg_queue = Promise.resolve(); + this.info_reply = {}; // kernel_info_reply stored here after starting + + if (typeof(WebSocket) !== 'undefined') { + this.WebSocket = WebSocket; + } else if (typeof(MozWebSocket) !== 'undefined') { + this.WebSocket = MozWebSocket; + } else { + alert('Your browser does not have WebSocket support, please try Chrome, Safari or Firefox ≥ 6. Firefox 4 and 5 are also supported by you have to enable WebSockets in about:config.'); + } + + this.bind_events(); + this.init_iopub_handlers(); + this.comm_manager = new comm.CommManager(this); + + this.last_msg_id = null; + this.last_msg_callbacks = {}; + + this._autorestart_attempt = 0; + this._reconnect_attempt = 0; + this.reconnect_limit = 7; + + this._pending_messages = []; + }; + + /** + * @function _get_msg + */ + Kernel.prototype._get_msg = function (msg_type, content, metadata, buffers) { + var msg = { + header : { + msg_id : utils.uuid(), + username : this.username, + session : this.session_id, + msg_type : msg_type, + version : "5.2", + }, + metadata : metadata || {}, + content : content, + buffers : buffers || [], + parent_header : {} + }; + return msg; + }; + + /** + * @function bind_events + */ + Kernel.prototype.bind_events = function () { + var that = this; + this.events.on('send_input_reply.Kernel', function(evt, data) { + that.send_input_reply(data); + }); + + var record_status = function (evt, info) { + console.log('Kernel: ' + evt.type + ' (' + info.kernel.id + ')'); + }; + + this.events.on('kernel_created.Kernel', record_status); + this.events.on('kernel_reconnecting.Kernel', record_status); + this.events.on('kernel_connected.Kernel', record_status); + this.events.on('kernel_starting.Kernel', record_status); + this.events.on('kernel_restarting.Kernel', record_status); + this.events.on('kernel_autorestarting.Kernel', record_status); + this.events.on('kernel_interrupting.Kernel', record_status); + this.events.on('kernel_disconnected.Kernel', record_status); + // these are commented out because they are triggered a lot, but can + // be uncommented for debugging purposes + //this.events.on('kernel_idle.Kernel', record_status); + //this.events.on('kernel_busy.Kernel', record_status); + this.events.on('kernel_ready.Kernel', record_status); + this.events.on('kernel_killed.Kernel', record_status); + this.events.on('kernel_dead.Kernel', record_status); + + this.events.on('kernel_ready.Kernel', function () { + that._autorestart_attempt = 0; + }); + this.events.on('kernel_connected.Kernel', function () { + that._reconnect_attempt = 0; + }); + }; + + /** + * Initialize the iopub handlers. + * + * @function init_iopub_handlers + */ + Kernel.prototype.init_iopub_handlers = function () { + var output_msg_types = ['stream', 'display_data', 'execute_result', 'error', 'update_display_data']; + this._iopub_handlers = {}; + this.register_iopub_handler('status', $.proxy(this._handle_status_message, this)); + this.register_iopub_handler('clear_output', $.proxy(this._handle_clear_output, this)); + this.register_iopub_handler('execute_input', $.proxy(this._handle_input_message, this)); + + for (var i=0; i < output_msg_types.length; i++) { + this.register_iopub_handler(output_msg_types[i], $.proxy(this._handle_output_message, this)); + } + }; + + /** + * GET /api/kernels + * + * Get the list of running kernels. + * + * @function list + * @param {function} [success] - function executed on ajax success + * @param {function} [error] - function executed on ajax error + */ + Kernel.prototype.list = function (success, error) { + utils.ajax(this.kernel_service_url, { + processData: false, + cache: false, + type: "GET", + dataType: "json", + success: success, + error: this._on_error(error) + }); + }; + + /** + * POST /api/kernels + * + * Start a new kernel. + * + * In general this shouldn't be used -- the kernel should be + * started through the session API. If you use this function and + * are also using the session API then your session and kernel + * WILL be out of sync! + * + * @function start + * @param {params} [Object] - parameters to include in the query string + * @param {function} [success] - function executed on ajax success + * @param {function} [error] - function executed on ajax error + */ + Kernel.prototype.start = function (params, success, error) { + var url = this.kernel_service_url; + var qs = $.param(params || {}); // query string for sage math stuff + if (qs !== "") { + url = url + "?" + qs; + } + + this.events.trigger('kernel_starting.Kernel', {kernel: this}); + var that = this; + var on_success = function (data, status, xhr) { + that.events.trigger('kernel_created.Kernel', {kernel: that}); + that._kernel_created(data); + if (success) { + success(data, status, xhr); + } + }; + + utils.ajax(url, { + processData: false, + cache: false, + type: "POST", + data: JSON.stringify({name: this.name}), + contentType: 'application/json', + dataType: "json", + success: this._on_success(on_success), + error: this._on_error(error) + }); + + return url; + }; + + /** + * GET /api/kernels/[:kernel_id] + * + * Get information about the kernel. + * + * @function get_info + * @param {function} [success] - function executed on ajax success + * @param {function} [error] - function executed on ajax error + */ + Kernel.prototype.get_info = function (success, error) { + utils.ajax(this.kernel_url, { + processData: false, + cache: false, + type: "GET", + dataType: "json", + success: this._on_success(success), + error: this._on_error(error) + }); + }; + + /** + * DELETE /api/kernels/[:kernel_id] + * + * Shutdown the kernel. + * + * If you are also using sessions, then this function should NOT be + * used. Instead, use Session.delete. Otherwise, the session and + * kernel WILL be out of sync. + * + * @function kill + * @param {function} [success] - function executed on ajax success + * @param {function} [error] - function executed on ajax error + */ + Kernel.prototype.kill = function (success, error) { + this.events.trigger('kernel_killed.Kernel', {kernel: this}); + this._kernel_dead(); + utils.ajax(this.kernel_url, { + processData: false, + cache: false, + type: "DELETE", + dataType: "json", + success: this._on_success(success), + error: this._on_error(error) + }); + }; + + /** + * POST /api/kernels/[:kernel_id]/interrupt + * + * Interrupt the kernel. + * + * @function interrupt + * @param {function} [success] - function executed on ajax success + * @param {function} [error] - function executed on ajax error + */ + Kernel.prototype.interrupt = function (success, error) { + this.events.trigger('kernel_interrupting.Kernel', {kernel: this}); + + var that = this; + var on_success = function (data, status, xhr) { + /** + * get kernel info so we know what state the kernel is in + */ + that.kernel_info(); + if (success) { + success(data, status, xhr); + } + }; + + var url = utils.url_path_join(this.kernel_url, 'interrupt'); + utils.ajax(url, { + processData: false, + cache: false, + type: "POST", + contentType: false, // there's no data with this + dataType: "json", + success: this._on_success(on_success), + error: this._on_error(error) + }); + }; + + Kernel.prototype.restart = function (success, error) { + /** + * POST /api/kernels/[:kernel_id]/restart + * + * Restart the kernel. + * + * @function interrupt + * @param {function} [success] - function executed on ajax success + * @param {function} [error] - function executed on ajax error + */ + this.events.trigger('kernel_restarting.Kernel', {kernel: this}); + this.stop_channels(); + this._msg_callbacks = {}; + this._msg_callbacks_overrides = {}; + this._display_id_to_parent_ids = {}; + + var that = this; + var on_success = function (data, status, xhr) { + that.events.trigger('kernel_created.Kernel', {kernel: that}); + that._kernel_created(data); + if (success) { + success(data, status, xhr); + } + }; + + var on_error = function (xhr, status, err) { + that.events.trigger('kernel_failed_restart.Kernel', {kernel: that}); + that._kernel_dead(); + if (error) { + error(xhr, status, err); + } + }; + + var url = utils.url_path_join(this.kernel_url, 'restart'); + utils.ajax(url, { + processData: false, + cache: false, + type: "POST", + contentType: false, // there's no data with this + dataType: "json", + success: this._on_success(on_success), + error: this._on_error(on_error) + }); + }; + + Kernel.prototype.reconnect = function () { + /** + * Reconnect to a disconnected kernel. This is not actually a + * standard HTTP request, but useful function nonetheless for + * reconnecting to the kernel if the connection is somehow lost. + * + * @function reconnect + */ + if (this.is_connected()) { + this.stop_channels(); + } + this._reconnect_attempt = this._reconnect_attempt + 1; + this.events.trigger('kernel_reconnecting.Kernel', { + kernel: this, + attempt: this._reconnect_attempt, + }); + this.start_channels(); + }; + + Kernel.prototype._on_success = function (success) { + /** + * Handle a successful AJAX request by updating the kernel id and + * name from the response, and then optionally calling a provided + * callback. + * + * @function _on_success + * @param {function} success - callback + */ + var that = this; + return function (data, status, xhr) { + if (data) { + that.id = data.id; + that.name = data.name; + } + that.kernel_url = utils.url_path_join(that.kernel_service_url, + encodeURIComponent(that.id)); + if (success) { + success(data, status, xhr); + } + }; + }; + + Kernel.prototype._on_error = function (error) { + /** + * Handle a failed AJAX request by logging the error message, and + * then optionally calling a provided callback. + * + * @function _on_error + * @param {function} error - callback + */ + return function (xhr, status, err) { + utils.log_ajax_error(xhr, status, err); + if (error) { + error(xhr, status, err); + } + }; + }; + + Kernel.prototype._kernel_created = function (data) { + /** + * Perform necessary tasks once the kernel has been started, + * including actually connecting to the kernel. + * + * @function _kernel_created + * @param {Object} data - information about the kernel including id + */ + this.id = data.id; + this.kernel_url = utils.url_path_join(this.kernel_service_url, + encodeURIComponent(this.id)); + this.start_channels(); + }; + + Kernel.prototype._kernel_connected = function () { + /** + * Perform necessary tasks once the connection to the kernel has + * been established. This includes requesting information about + * the kernel. + * + * @function _kernel_connected + */ + this.events.trigger('kernel_connected.Kernel', {kernel: this}); + + // Send pending messages. We shift the message off the queue + // after the message is sent so that if there is an exception, + // the message is still pending. + while (this._pending_messages.length > 0) { + this.ws.send(this._pending_messages[0]); + this._pending_messages.shift(); + } + + // get kernel info so we know what state the kernel is in + var that = this; + this.kernel_info(function (reply) { + that.info_reply = reply.content; + that.events.trigger('kernel_ready.Kernel', {kernel: that}); + }); + }; + + Kernel.prototype._kernel_dead = function () { + /** + * Perform necessary tasks after the kernel has died. This closing + * communication channels to the kernel if they are still somehow + * open. + * + * @function _kernel_dead + */ + this.stop_channels(); + }; + + Kernel.prototype.start_channels = function () { + /** + * Start the websocket channels. + * Will stop and restart them if they already exist. + * + * @function start_channels + */ + var that = this; + this.stop_channels(); + var ws_host_url = this.ws_url + this.kernel_url; + + console.log("Starting WebSockets:", ws_host_url); + + this.ws = new this.WebSocket([ + that.ws_url, + utils.url_path_join(that.kernel_url, 'channels'), + "?session_id=" + that.session_id + ].join('') + ); + + var already_called_onclose = false; // only alert once + var ws_closed_early = function(evt){ + console.log("WebSocket closed early", evt); + if (already_called_onclose){ + return; + } + already_called_onclose = true; + // If the websocket was closed early, that could mean + // that the kernel is actually dead. Try getting + // information about the kernel from the API call -- + // if that fails, then assume the kernel is dead, + // otherwise just follow the typical websocket closed + // protocol. + that.get_info(function () { + that._ws_closed(ws_host_url, false); + }, function () { + that.events.trigger('kernel_dead.Kernel', {kernel: that}); + that._kernel_dead(); + }); + }; + var ws_closed_late = function(evt){ + console.log("WebSocket closed unexpectedly", evt); + if (already_called_onclose){ + return; + } + already_called_onclose = true; + that._ws_closed(ws_host_url, false); + }; + var ws_error = function(evt){ + if (already_called_onclose){ + return; + } + already_called_onclose = true; + that._ws_closed(ws_host_url, true); + }; + + this.ws.onopen = $.proxy(this._ws_opened, this); + this.ws.onclose = ws_closed_early; + this.ws.onerror = ws_error; + // switch from early-close to late-close message after 1s + setTimeout(function() { + if (that.ws !== null && !that._stopping) { + that.ws.onclose = ws_closed_late; + } + }, 1000); + this.ws.onmessage = $.proxy(this._handle_ws_message, this); + }; + + Kernel.prototype._ws_opened = function (evt) { + /** + * Handle a websocket entering the open state, + * signaling that the kernel is connected when websocket is open. + * + * @function _ws_opened + */ + if (this.is_connected()) { + // all events ready, trigger started event. + this._kernel_connected(); + } + }; + + Kernel.prototype._ws_closed = function(ws_url, error) { + /** + * Handle a websocket entering the closed state. If the websocket + * was not closed due to an error, try to reconnect to the kernel. + * + * @function _ws_closed + * @param {string} ws_url - the websocket url + * @param {bool} error - whether the connection was closed due to an error + */ + this.stop_channels(); + + this.events.trigger('kernel_disconnected.Kernel', {kernel: this}); + if (error) { + console.log('WebSocket connection failed: ', ws_url, error); + this.events.trigger('kernel_connection_failed.Kernel', { + kernel: this, + ws_url: ws_url, + attempt: this._reconnect_attempt, + error: error, + }); + } + this._schedule_reconnect(); + }; + + Kernel.prototype._schedule_reconnect = function () { + /** + * function to call when kernel connection is lost + * schedules reconnect, or fires 'connection_dead' if reconnect limit is hit + */ + if (this._reconnect_attempt < this.reconnect_limit) { + var timeout = Math.pow(2, this._reconnect_attempt); + console.log("Connection lost, reconnecting in " + timeout + " seconds."); + setTimeout($.proxy(this.reconnect, this), 1e3 * timeout); + } else { + this.events.trigger('kernel_connection_dead.Kernel', { + kernel: this, + reconnect_attempt: this._reconnect_attempt, + }); + console.log("Failed to reconnect, giving up."); + } + }; + + Kernel.prototype.stop_channels = function () { + /** + * Close the websocket. After successful close, the value + * in `this.ws` will be null. + * + * @function stop_channels + */ + var that = this; + var close = function () { + that._stopping = false; + if (that.ws && that.ws.readyState === WebSocket.CLOSED) { + that.ws = null; + } + }; + if (this.ws !== null) { + // flag to avoid races with on_close_late + this._stopping = true; + if (this.ws.readyState === WebSocket.OPEN) { + this.ws.onclose = close; + this.ws.close(); + } else { + close(); + } + } + }; + + Kernel.prototype.is_connected = function () { + /** + * Check whether there is a connection to the kernel. This + * function only returns true if websocket has been + * created and has a state of WebSocket.OPEN. + * + * @function is_connected + * @returns {bool} - whether there is a connection + */ + // if any channel is not ready, then we're not connected + if (this.ws === null) { + return false; + } + if (this.ws.readyState !== WebSocket.OPEN) { + return false; + } + return true; + }; + + Kernel.prototype.is_fully_disconnected = function () { + /** + * Check whether the connection to the kernel has been completely + * severed. This function only returns true if all channel objects + * are null. + * + * @function is_fully_disconnected + * @returns {bool} - whether the kernel is fully disconnected + */ + return (this.ws === null); + }; + + Kernel.prototype._send = function(msg) { + /** + * Send a message (if the kernel is connected) or queue the message for future delivery + * + * Pending messages will automatically be sent when a kernel becomes connected. + * + * @function _send + * @param msg + */ + if (this.is_connected()) { + this.ws.send(msg); + } else { + this._pending_messages.push(msg); + } + }; + + Kernel.prototype.send_shell_message = function (msg_type, content, callbacks, metadata, buffers) { + /** + * Send a message on the Kernel's shell channel + * + * If the kernel is not connected, the message will be buffered. + * + * @function send_shell_message + */ + var msg = this._get_msg(msg_type, content, metadata, buffers); + msg.channel = 'shell'; + this.set_callbacks_for_msg(msg.header.msg_id, callbacks); + this._send(serialize.serialize(msg)); + return msg.header.msg_id; + }; + + Kernel.prototype.kernel_info = function (callback) { + /** + * Get kernel info + * + * @function kernel_info + * @param callback {function} + * + * When calling this method, pass a callback function that expects one argument. + * The callback will be passed the complete `kernel_info_reply` message documented + * [here](https://jupyter-client.readthedocs.io/en/latest/messaging.html#kernel-info) + */ + var callbacks; + if (callback) { + callbacks = { shell : { reply : callback } }; + } + return this.send_shell_message("kernel_info_request", {}, callbacks); + }; + + Kernel.prototype.comm_info = function (target_name, callback) { + /** + * Get comm info + * + * @function comm_info + * @param callback {function} + * + * When calling this method, pass a callback function that expects one argument. + * The callback will be passed the complete `comm_info_reply` message documented + * [here](https://jupyter-client.readthedocs.io/en/latest/messaging.html#comm_info) + */ + var callbacks; + if (callback) { + callbacks = { shell : { reply : callback } }; + } + var content = { + target_name : target_name, + }; + return this.send_shell_message("comm_info_request", content, callbacks); + }; + + Kernel.prototype.inspect = function (code, cursor_pos, callback) { + /** + * Get info on an object + * + * When calling this method, pass a callback function that expects one argument. + * The callback will be passed the complete `inspect_reply` message documented + * [here](https://jupyter-client.readthedocs.io/en/latest/messaging.html#object-information) + * + * @function inspect + * @param code {string} + * @param cursor_pos {integer} + * @param callback {function} + */ + var callbacks; + if (callback) { + callbacks = { shell : { reply : callback } }; + } + + var content = { + code : code, + cursor_pos : cursor_pos, + detail_level : 0 + }; + return this.send_shell_message("inspect_request", content, callbacks); + }; + + Kernel.prototype.execute = function (code, callbacks, options) { + /** + * Execute given code into kernel, and pass result to callback. + * + * @async + * @function execute + * @param {string} code + * @param [callbacks] {Object} With the following keys (all optional) + * @param callbacks.shell.reply {function} + * @param callbacks.shell.payload.[payload_name] {function} + * @param callbacks.iopub.output {function} + * @param callbacks.iopub.clear_output {function} + * @param callbacks.input {function} + * @param callbacks.clear_on_done=true {Boolean} + * @param {object} [options] + * @param [options.silent=false] {Boolean} + * @param [options.user_expressions=empty_dict] {Dict} + * @param [options.allow_stdin=false] {Boolean} true|false + * + * @example + * + * The options object should contain the options for the execute + * call. Its default values are: + * + * options = { + * silent : true, + * user_expressions : {}, + * allow_stdin : false + * } + * + * When calling this method pass a callbacks structure of the + * form: + * + * callbacks = { + * shell : { + * reply : execute_reply_callback, + * payload : { + * set_next_input : set_next_input_callback, + * } + * }, + * iopub : { + * output : output_callback, + * clear_output : clear_output_callback, + * }, + * input : raw_input_callback + * } + * + * Each callback will be passed the entire message as a single + * argument. Payload handlers will be passed the corresponding + * payload and the execute_reply message. + */ + var content = { + code : code, + silent : true, + store_history : false, + user_expressions : {}, + allow_stdin : false + }; + callbacks = callbacks || {}; + if (callbacks.input !== undefined) { + content.allow_stdin = true; + } + $.extend(true, content, options); + this.events.trigger('execution_request.Kernel', {kernel: this, content: content}); + return this.send_shell_message("execute_request", content, callbacks); + }; + + /** + * When calling this method, pass a function to be called with the + * `complete_reply` message as its only argument when it arrives. + * + * `complete_reply` is documented + * [here](https://jupyter-client.readthedocs.io/en/latest/messaging.html#complete) + * + * @function complete + * @param code {string} + * @param cursor_pos {integer} + * @param callback {function} + */ + Kernel.prototype.complete = function (code, cursor_pos, callback) { + var callbacks; + if (callback) { + callbacks = { shell : { reply : callback } }; + } + var content = { + code : code, + cursor_pos : cursor_pos + }; + return this.send_shell_message("complete_request", content, callbacks); + }; + + /** + * @function send_input_reply + */ + Kernel.prototype.send_input_reply = function (input) { + var content = { + value : input + }; + this.events.trigger('input_reply.Kernel', {kernel: this, content: content}); + var msg = this._get_msg("input_reply", content); + msg.channel = 'stdin'; + this._send(serialize.serialize(msg)); + return msg.header.msg_id; + }; + + /** + * @function register_iopub_handler + */ + Kernel.prototype.register_iopub_handler = function (msg_type, callback) { + this._iopub_handlers[msg_type] = callback; + }; + + /** + * Get the iopub handler for a specific message type. + * + * @function get_iopub_handler + */ + Kernel.prototype.get_iopub_handler = function (msg_type) { + return this._iopub_handlers[msg_type]; + }; + + /** + * Get callbacks for a specific message. + * + * @function get_callbacks_for_msg + */ + Kernel.prototype.get_callbacks_for_msg = function (msg_id) { + if (msg_id == this.last_msg_id) { + return this.last_msg_callbacks; + } else { + return this._msg_callbacks[msg_id]; + } + }; + + /** + * Get output callbacks for a specific message. + * + * @function get_output_callbacks_for_msg + * + * Since output callbacks can be overridden, we first check the override stack. + */ + Kernel.prototype.get_output_callbacks_for_msg = function (msg_id) { + return this.get_callbacks_for_msg(this.get_output_callback_id(msg_id)); + }; + + + /** + * Get the output callback id for a message + * + * Since output callbacks can be redirected, this may not be the same as + * the msg_id. + * + * @function get_output_callback_id + */ + Kernel.prototype.get_output_callback_id = function (msg_id) { + var callback_id = msg_id; + var overrides = this._msg_callbacks_overrides[msg_id]; + if (overrides && overrides.length > 0) { + callback_id = overrides[overrides.length-1]; + } + return callback_id + }; + + /** + * Clear callbacks for a specific message. + * + * @function clear_callbacks_for_msg + */ + Kernel.prototype.clear_callbacks_for_msg = function (msg_id) { + if (this._msg_callbacks[msg_id] !== undefined ) { + var callbacks = this._msg_callbacks[msg_id]; + var kernel = this; + // clear display_id:msg_id map for display_ids associated with this msg_id + if (!callbacks) return; + callbacks.display_ids.map(function (display_id) { + var msg_ids = kernel._display_id_to_parent_ids[display_id]; + if (msg_ids) { + var idx = msg_ids.indexOf(msg_id); + if (idx === -1) { + return; + } + if (msg_ids.length === 1) { + delete kernel._display_id_to_parent_ids[display_id]; + } else { + msg_ids.splice(idx, 1); + kernel._display_id_to_parent_ids[display_id] = msg_ids; + } + } + }); + delete this._msg_callbacks[msg_id]; + } + }; + + /** + * @function _finish_shell + */ + Kernel.prototype._finish_shell = function (msg_id) { + var callbacks = this._msg_callbacks[msg_id]; + if (callbacks !== undefined) { + callbacks.shell_done = true; + if (callbacks.clear_on_done && callbacks.iopub_done) { + this.clear_callbacks_for_msg(msg_id); + } + } + }; + + /** + * @function _finish_iopub + */ + Kernel.prototype._finish_iopub = function (msg_id) { + var callbacks = this._msg_callbacks[msg_id]; + if (callbacks !== undefined) { + callbacks.iopub_done = true; + if (callbacks.clear_on_done && callbacks.shell_done) { + this.clear_callbacks_for_msg(msg_id); + } + } + this.events.trigger('finished_iopub.Kernel', {kernel: this, msg_id: msg_id}); + }; + + /** + * Set callbacks for a particular message. + * Callbacks should be a struct of the following form: + * shell : { + * + * } + * + * If the third parameter is truthy, the callback is set as the last + * callback registered. + * + * @function set_callbacks_for_msg + */ + Kernel.prototype.set_callbacks_for_msg = function (msg_id, callbacks, save) { + var remember = save || true; + if (remember) { + this.last_msg_id = msg_id; + } + if (callbacks) { + // shallow-copy mapping, because we will modify it at the top level + var cbcopy = this._msg_callbacks[msg_id] = this.last_msg_callbacks = {}; + cbcopy.shell = callbacks.shell; + cbcopy.iopub = callbacks.iopub; + cbcopy.input = callbacks.input; + cbcopy.clear_on_done = callbacks.clear_on_done; + cbcopy.shell_done = (!callbacks.shell); + cbcopy.iopub_done = (!callbacks.iopub); + cbcopy.display_ids = []; + if (callbacks.clear_on_done === undefined) { + // default to clear-on-done + cbcopy.clear_on_done = true; + } + } else if (remember) { + this.last_msg_callbacks = {}; + } + }; + + /** + * Override output callbacks for a particular msg_id + */ + Kernel.prototype.output_callback_overrides_push = function(msg_id, callback_id) { + var output_callbacks = this._msg_callbacks_overrides[msg_id]; + if (!output_callbacks) { + this._msg_callbacks_overrides[msg_id] = output_callbacks = []; + } + output_callbacks.push(callback_id); + }; + + Kernel.prototype.output_callback_overrides_pop = function(msg_id) { + var callback_ids = this._msg_callbacks_overrides[msg_id]; + if (!callback_ids) { + console.error("Popping callback overrides, but none registered", msg_id); + return; + } + return callback_ids.pop(); + }; + + Kernel.prototype._handle_ws_message = function (e) { + var that = this; + this._msg_queue = this._msg_queue.then(function() { + return serialize.deserialize(e.data); + }).then(function(msg) {return that._finish_ws_message(msg);}) + .catch(function(error) { console.error("Couldn't process kernel message", error); }); + }; + + Kernel.prototype._finish_ws_message = function (msg) { + switch (msg.channel) { + case 'shell': + return this._handle_shell_reply(msg); + case 'iopub': + return this._handle_iopub_message(msg); + case 'stdin': + return this._handle_input_request(msg); + default: + console.error("unrecognized message channel", msg.channel, msg); + } + }; + + Kernel.prototype._handle_shell_reply = function (reply) { + this.events.trigger('shell_reply.Kernel', {kernel: this, reply:reply}); + var that = this; + var content = reply.content; + var metadata = reply.metadata; + var parent_id = reply.parent_header.msg_id; + var callbacks = this.get_callbacks_for_msg(parent_id); + var promise = Promise.resolve(); + if (!callbacks || !callbacks.shell) { + return; + } + var shell_callbacks = callbacks.shell; + + // signal that shell callbacks are done + this._finish_shell(parent_id); + + if (shell_callbacks.reply !== undefined) { + promise = promise.then(function() {return shell_callbacks.reply(reply);}); + } + if (content.payload && shell_callbacks.payload) { + promise = promise.then(function() { + return that._handle_payloads(content.payload, shell_callbacks.payload, reply); + }); + } + return promise; + }; + + /** + * @function _handle_payloads + */ + Kernel.prototype._handle_payloads = function (payloads, payload_callbacks, msg) { + var promise = []; + var l = payloads.length; + // Payloads are handled by triggering events because we don't want the Kernel + // to depend on the Notebook or Pager classes. + for (var i=0; i -1) { + // display_data messages may re-route based on their display_id + var display_id = (msg.content.transient || {}).display_id; + if (display_id) { + // it has a display_id + var parent_ids = this._display_id_to_parent_ids[display_id]; + if (parent_ids) { + // we've seen it before, update existing outputs with same display_id + // by handling display_data as update_display_data + var update_msg = $.extend(true, {}, msg); + update_msg.header.msg_type = 'update_display_data'; + + parent_ids.map(function (parent_id) { + var callbacks = that.get_callbacks_for_msg(parent_id); + if (!callbacks) return; + var callback = callbacks.iopub.output; + if (callback) { + callback(update_msg); + } + }); + } + // we're done here if it's update_display + if (msg.header.msg_type === 'update_display_data') { + // it's an update, don't proceed to the normal display + return; + } + // regular display_data with id, record it for future updating + // in _display_id_to_parent_ids for future lookup + if (this._display_id_to_parent_ids[display_id] === undefined) { + this._display_id_to_parent_ids[display_id] = []; + } + var callback_id = this.get_output_callback_id(msg_id); + if (this._display_id_to_parent_ids[display_id].indexOf(callback_id) === -1) { + this._display_id_to_parent_ids[display_id].push(callback_id); + } + // and in callbacks for cleanup on clear_callbacks_for_msg + if (callbacks && callbacks.display_ids.indexOf(display_id) === -1) { + callbacks.display_ids.push(display_id); + } + } + } + + + if (!callbacks || !callbacks.iopub) { + // The message came from another client. Let the UI decide what to + // do with it. + this.events.trigger('received_unsolicited_message.Kernel', msg); + return; + } + var callback = callbacks.iopub.output; + if (callback) { + callback(msg); + } + }; + + /** + * Handle an input message (execute_input). + * + * @function _handle_input message + */ + Kernel.prototype._handle_input_message = function (msg) { + var callbacks = this.get_callbacks_for_msg(msg.parent_header.msg_id); + if (!callbacks) { + // The message came from another client. Let the UI decide what to + // do with it. + this.events.trigger('received_unsolicited_message.Kernel', msg); + } + }; + + /** + * Dispatch IOPub messages to respective handlers. Each message + * type should have a handler. + * + * @function _handle_iopub_message + */ + Kernel.prototype._handle_iopub_message = function (msg) { + var handler = this.get_iopub_handler(msg.header.msg_type); + if (handler !== undefined) { + return handler(msg); + } + }; + + /** + * @function _handle_input_request + */ + Kernel.prototype._handle_input_request = function (request) { + var header = request.header; + var content = request.content; + var metadata = request.metadata; + var msg_type = header.msg_type; + if (msg_type !== 'input_request') { + console.log("Invalid input request!", request); + return; + } + var callbacks = this.get_callbacks_for_msg(request.parent_header.msg_id); + if (callbacks) { + if (callbacks.input) { + callbacks.input(request); + } + } + }; + + return {'Kernel': Kernel}; + }); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + + define('services/kernels/serialize', [ + 'underscore', + ], function (_) { + + var _deserialize_array_buffer = function (buf) { + var data = new DataView(buf); + // read the header: 1 + nbufs 32b integers + var nbufs = data.getUint32(0); + var offsets = []; + var i; + for (i = 1; i <= nbufs; i++) { + offsets.push(data.getUint32(i * 4)); + } + var json_bytes = new Uint8Array(buf.slice(offsets[0], offsets[1])); + var msg = JSON.parse( + (new TextDecoder('utf8')).decode(json_bytes) + ); + // the remaining chunks are stored as DataViews in msg.buffers + msg.buffers = []; + var start, stop; + for (i = 1; i < nbufs; i++) { + start = offsets[i]; + stop = offsets[i+1] || buf.byteLength; + msg.buffers.push(new DataView(buf.slice(start, stop))); + } + return msg; + }; + + var _deserialize_binary = function(data) { + /** + * deserialize the binary message format + * callback will be called with a message whose buffers attribute + * will be an array of DataViews. + */ + if (data instanceof Blob) { + // data is Blob, have to deserialize from ArrayBuffer in reader callback + var reader = new FileReader(); + var promise = new Promise(function(resolve, reject) { + reader.onload = function () { + var msg = _deserialize_array_buffer(this.result); + resolve(msg); + }; + }); + reader.readAsArrayBuffer(data); + return promise; + } else { + // data is ArrayBuffer, can deserialize directly + var msg = _deserialize_array_buffer(data); + return msg; + } + }; + + var deserialize = function (data) { + /** + * deserialize a message and return a promise for the unpacked message + */ + if (typeof data === "string") { + // text JSON message + return Promise.resolve(JSON.parse(data)); + } else { + // binary message + return Promise.resolve(_deserialize_binary(data)); + } + }; + + var _serialize_binary = function (msg) { + /** + * implement the binary serialization protocol + * serializes JSON message to ArrayBuffer + */ + msg = _.clone(msg); + var offsets = []; + var buffers = []; + var i; + for (i = 0; i < msg.buffers.length; i++) { + // msg.buffers elements could be either views or ArrayBuffers + // buffers elements are ArrayBuffers + var b = msg.buffers[i]; + buffers.push(b.buffer instanceof ArrayBuffer ? b.buffer : b); + } + delete msg.buffers; + var json_utf8 = (new TextEncoder('utf8')).encode(JSON.stringify(msg)); + buffers.unshift(json_utf8); + var nbufs = buffers.length; + offsets.push(4 * (nbufs + 1)); + for (i = 0; i + 1 < buffers.length; i++) { + offsets.push(offsets[offsets.length-1] + buffers[i].byteLength); + } + var msg_buf = new Uint8Array( + offsets[offsets.length-1] + buffers[buffers.length-1].byteLength + ); + // use DataView.setUint32 for network byte-order + var view = new DataView(msg_buf.buffer); + // write nbufs to first 4 bytes + view.setUint32(0, nbufs); + // write offsets to next 4 * nbufs bytes + for (i = 0; i < offsets.length; i++) { + view.setUint32(4 * (i+1), offsets[i]); + } + // write all the buffers at their respective offsets + for (i = 0; i < buffers.length; i++) { + msg_buf.set(new Uint8Array(buffers[i]), offsets[i]); + } + + // return raw ArrayBuffer + return msg_buf.buffer; + }; + + var serialize = function (msg) { + if (msg.buffers && msg.buffers.length) { + return _serialize_binary(msg); + } else { + return JSON.stringify(msg); + } + }; + + var exports = { + deserialize : deserialize, + serialize: serialize + }; + return exports; + }); + + define("notebook/js/outputarea", [ + "base/js/keyboard", + "base/js/events" + ], function (keyboard_manager, events) { + + function createElement() { + var area = $('
    '); + document.body.append(area[0]); + return area[0]; + } + function OutputArea() { + this.keyboard_manager = keyboard_manager; + this.events = events; + this.outputs = []; + this.element = createElement(); + } + + OutputArea.__mime_types = {}; + + OutputArea.prototype.register_mime_type = function (mimetype, append, options) { + OutputArea.__mime_types[mimetype] = { + append: append, + options: options + }; + }; + + OutputArea.prototype.create_output_subarea = function (md, classes, mime) { + var subarea = $('
    ').addClass('output_subarea').addClass(classes); + return subarea; + }; + + OutputArea.prototype.create_output_area = function () { + return $("
    ").addClass("output_area"); + }; + + OutputArea.prototype.append_mime_type = function (json, element, handle_inserted) { + let types = Object.keys(OutputArea.__mime_types); + types.forEach(type => { + var append = OutputArea.__mime_types[type].append; + if ((json.data[type] !== undefined) && append) { + var md = json.metadata || {}; + var value = json.data[type]; + return append.apply(this, [value, md, element, handle_inserted]); + } + }); + return null; + }; + + OutputArea.prototype.clear_output = function () { + this.outputs.length = 0; + this.element.innerHTML = ""; + }; + + OutputArea.prototype.fromJSON = function (outputs, metadata) { + var len = outputs.length; + metadata = metadata || {}; + for (var i = 0; i < len; i++) { + this.append_output(outputs[i]); + } + }; + + OutputArea.prototype.handle_clear_output = function (msg) { + this.clear_output(msg.content.wait || false); + }; + + OutputArea.prototype.handle_output = function (msg) { + var json = {}; + var msg_type = json.output_type = msg.header.msg_type; + var content = msg.content; + switch (msg_type) { + case "display_data": + json.transient = content.transient; + json.data = content.data; + json.metadata = content.metadata; + break; + default: + console.error("unhandled output message", msg); + return; + } + this.append_output(json); + }; + + OutputArea.prototype.append_output = function (json) { + this.append_display_data(json, this.handle_appended); + this.outputs.push(json); + this.events.trigger('output_added.OutputArea', { + output: json, + output_area: this, + }); + }; + + OutputArea.prototype.append_display_data = function (json, handle_inserted) { + var toinsert = this.create_output_area(); + this.element.append(toinsert[0]); + this.append_mime_type(json, toinsert, handle_inserted); + }; + + const outputarea = { + OutputArea: OutputArea + }; + + return outputarea; + + }); + + define("base/js/events", function () { + + const eventTarget = document.createElement("div"); + + const events = { + on: function (type, handler) { + eventTarget.addEventListener(type, evt => { + handler(evt, evt.detail); + }); + }, + trigger: function (type, data) { + eventTarget.dispatchEvent(new CustomEvent(type, {detail: data})); + } + }; + + return events; + }); + + define("base/js/keyboard", function () { + function KeyboardManager() { + } + KeyboardManager.prototype.actions = { + register: function () { + } + }; + + KeyboardManager.prototype.register_events = function () { + }; + + const keyboard_manager = new KeyboardManager(); + + return keyboard_manager; + }); + + define("base/js/namespace", [ + "services/kernels/kernel", + "notebook/js/outputarea", + "base/js/keyboard", + "base/js/events", + ], function (kernel, outputarea, keyboard_manager, events) { + + const cells = [{ + output_area: new outputarea.OutputArea() + }]; + + const namespace = { + notebook: { + kernel: new kernel.Kernel(), + keyboard_manager: keyboard_manager, + container: { + on: function () { + } + }, + metadata: { + widgets: {} + }, + get_cells: function () { + return cells; + }, + render_cell_output: function (cell) { + const output_area = cell.output_area; + const outputs = [...output_area.outputs]; + output_area.clear_output(); + output_area.fromJSON(outputs); + }, + events: events + }, + notification_area: { + widget: function () { + } + }, + menubar: { + actions: { + register: function () { + } + } + } + }; + + return namespace; + }); + + define("base/js/utils", function () { + return { + get_body_data: function () { + return ""; + }, + uuid: function () { + return Date.now() + "_" + Math.random(); + }, + load_class: function (class_name, module_name, registry) { + return new Promise(function (resolve, reject) { + if (registry && registry[class_name]) { + resolve(registry[class_name]); + } else { + reject(new Error('Class ' + class_name + ' not found in registry ')); + } + }); + }, + reject: function (message, log) { + return function (error) { + return Promise.reject(message + "\n" + error); + } + }, + debounse: function debounce(fun, delay) { + var timerId; + return function () { + var args = arguments; + if (timerId) { + clearTimeout(timerId); + } + timerId = setTimeout(function () { + fun.apply(null, args); + timerId = null; + }, delay); + } + } + }; + }); + + const eventTarget = document.createElement("div"); + + const INIT_REQUEST = "init"; + const SAVE_STATE_REQUEST = "save_state"; + const COMM_MSG_REQUEST = "comm"; + const WIDGET_MODEL_SET_REQUEST = "widget_model_set"; + + const DISPLAY_DATA_RESPONSE = "display_data"; + const KERNEL_STATE_RESPONSE = "kernel_state"; + const COMM_MSG_RESPONSE = "comm"; + const SET_STATE_RESPONSE = "set_state"; + const WIDGET_MODEL_SET_RESPONSE = "widget_model_set"; + + const id = location.hash.replace("#", ""); + + window.addEventListener("message", event => { + const data = event.data; + const message = data.message ? JSON.parse(data.message) : undefined; + eventTarget.dispatchEvent(new CustomEvent(data.type, {detail: message})); + }); + + const channel = { + send: function (type, message) { + window.top.postMessage({ + type: type, + sender: id, + message: message, + }, "*"); + }, + on: function (type, handler) { + eventTarget.addEventListener(type, evt => { + handler(evt.detail); + }); + }, + start: function () { + this.send(INIT_REQUEST); + } + }; + + function patch(kernel) { + + kernel.set_kernel_state = function (connected) { + if (!connected) { + this.comm_info = function (target_name, callback) { + callback({content: {comms: {}}}); + }; + } + + this._is_connected = true; + this._kernel_connected(); + }; + + kernel.is_connected = function () { + return this._is_connected; + }; + + kernel._send = function (msg) { + channel.send(COMM_MSG_REQUEST, msg); + }; + + channel.on(COMM_MSG_RESPONSE, msg => { + if (msg && msg.content && msg.content.data) { + msg.content.data.buffer_paths = []; + } + kernel._finish_ws_message(msg); + }); + } + + function patch$1(WidgetModel, widgetManager) { + + const originalSet = WidgetModel.prototype.set; + + WidgetModel.prototype.set = function (key, val, options) { + + if (key == "value") { + channel.send(WIDGET_MODEL_SET_REQUEST, JSON.stringify({ + model_id: this.model_id, + val: val, + key: key + })); + } + + return originalSet.apply(this, arguments); + }; + + channel.on(WIDGET_MODEL_SET_RESPONSE, msg => { + const model_id = msg.model_id; + const model_promise = widgetManager.get_model(model_id); + + if (model_promise) { + model_promise.then(model => { + originalSet.call(model, msg.key, msg.val); + }); + } + }); + } + + var toByteArray_1 = toByteArray; + var fromByteArray_1 = fromByteArray; + + var lookup = []; + var revLookup = []; + var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; + + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; + } + + // Support decoding URL-safe base64 strings, as Node.js does. + // See: https://en.wikipedia.org/wiki/Base64#URL_applications + revLookup['-'.charCodeAt(0)] = 62; + revLookup['_'.charCodeAt(0)] = 63; + + function getLens (b64) { + var len = b64.length; + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('='); + if (validLen === -1) validLen = len; + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4); + + return [validLen, placeHoldersLen] + } + + function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen + } + + function toByteArray (b64) { + var tmp; + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); + + var curByte = 0; + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen; + + var i; + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)]; + arr[curByte++] = (tmp >> 16) & 0xFF; + arr[curByte++] = (tmp >> 8) & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4); + arr[curByte++] = tmp & 0xFF; + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2); + arr[curByte++] = (tmp >> 8) & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + + return arr + } + + function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] + } + + function encodeChunk (uint8, start, end) { + var tmp; + var output = []; + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF); + output.push(tripletToBase64(tmp)); + } + return output.join('') + } + + function fromByteArray (uint8) { + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk( + uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) + )); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1]; + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ); + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ); + } + + return parts.join('') + } + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; + } + + function getCjsExportFromNamespace (n) { + return n && n['default'] || n; + } + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); + } + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for JSON-specific functions. + */ + var JSONExt; + (function (JSONExt) { + /** + * A shared frozen empty JSONObject + */ + JSONExt.emptyObject = Object.freeze({}); + /** + * A shared frozen empty JSONArray + */ + JSONExt.emptyArray = Object.freeze([]); + /** + * Test whether a JSON value is a primitive. + * + * @param value - The JSON value of interest. + * + * @returns `true` if the value is a primitive,`false` otherwise. + */ + function isPrimitive(value) { + return (value === null || + typeof value === 'boolean' || + typeof value === 'number' || + typeof value === 'string'); + } + JSONExt.isPrimitive = isPrimitive; + function isArray(value) { + return Array.isArray(value); + } + JSONExt.isArray = isArray; + function isObject(value) { + return !isPrimitive(value) && !isArray(value); + } + JSONExt.isObject = isObject; + /** + * Compare two JSON values for deep equality. + * + * @param first - The first JSON value of interest. + * + * @param second - The second JSON value of interest. + * + * @returns `true` if the values are equivalent, `false` otherwise. + */ + function deepEqual(first, second) { + // Check referential and primitive equality first. + if (first === second) { + return true; + } + // If one is a primitive, the `===` check ruled out the other. + if (isPrimitive(first) || isPrimitive(second)) { + return false; + } + // Test whether they are arrays. + var a1 = isArray(first); + var a2 = isArray(second); + // Bail if the types are different. + if (a1 !== a2) { + return false; + } + // If they are both arrays, compare them. + if (a1 && a2) { + return deepArrayEqual(first, second); + } + // At this point, they must both be objects. + return deepObjectEqual(first, second); + } + JSONExt.deepEqual = deepEqual; + /** + * Create a deep copy of a JSON value. + * + * @param value - The JSON value to copy. + * + * @returns A deep copy of the given JSON value. + */ + function deepCopy(value) { + // Do nothing for primitive values. + if (isPrimitive(value)) { + return value; + } + // Deep copy an array. + if (isArray(value)) { + return deepArrayCopy(value); + } + // Deep copy an object. + return deepObjectCopy(value); + } + JSONExt.deepCopy = deepCopy; + /** + * Compare two JSON arrays for deep equality. + */ + function deepArrayEqual(first, second) { + // Check referential equality first. + if (first === second) { + return true; + } + // Test the arrays for equal length. + if (first.length !== second.length) { + return false; + } + // Compare the values for equality. + for (var i = 0, n = first.length; i < n; ++i) { + if (!deepEqual(first[i], second[i])) { + return false; + } + } + // At this point, the arrays are equal. + return true; + } + /** + * Compare two JSON objects for deep equality. + */ + function deepObjectEqual(first, second) { + // Check referential equality first. + if (first === second) { + return true; + } + // Check for the first object's keys in the second object. + for (var key in first) { + if (first[key] !== undefined && !(key in second)) { + return false; + } + } + // Check for the second object's keys in the first object. + for (var key in second) { + if (second[key] !== undefined && !(key in first)) { + return false; + } + } + // Compare the values for equality. + for (var key in first) { + // Get the values. + var firstValue = first[key]; + var secondValue = second[key]; + // If both are undefined, ignore the key. + if (firstValue === undefined && secondValue === undefined) { + continue; + } + // If only one value is undefined, the objects are not equal. + if (firstValue === undefined || secondValue === undefined) { + return false; + } + // Compare the values. + if (!deepEqual(firstValue, secondValue)) { + return false; + } + } + // At this point, the objects are equal. + return true; + } + /** + * Create a deep copy of a JSON array. + */ + function deepArrayCopy(value) { + var result = new Array(value.length); + for (var i = 0, n = value.length; i < n; ++i) { + result[i] = deepCopy(value[i]); + } + return result; + } + /** + * Create a deep copy of a JSON object. + */ + function deepObjectCopy(value) { + var result = {}; + for (var key in value) { + // Ignore undefined values. + var subvalue = value[key]; + if (subvalue === undefined) { + continue; + } + result[key] = deepCopy(subvalue); + } + return result; + } + })(JSONExt || (JSONExt = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * An object which stores MIME data for general application use. + * + * #### Notes + * This class does not attempt to enforce "correctness" of MIME types + * and their associated data. Since this class is designed to transfer + * arbitrary data and objects within the same application, it assumes + * that the user provides correct and accurate data. + */ + var MimeData = /** @class */ (function () { + function MimeData() { + this._types = []; + this._values = []; + } + /** + * Get an array of the MIME types contained within the dataset. + * + * @returns A new array of the MIME types, in order of insertion. + */ + MimeData.prototype.types = function () { + return this._types.slice(); + }; + /** + * Test whether the dataset has an entry for the given type. + * + * @param mime - The MIME type of interest. + * + * @returns `true` if the dataset contains a value for the given + * MIME type, `false` otherwise. + */ + MimeData.prototype.hasData = function (mime) { + return this._types.indexOf(mime) !== -1; + }; + /** + * Get the data value for the given MIME type. + * + * @param mime - The MIME type of interest. + * + * @returns The value for the given MIME type, or `undefined` if + * the dataset does not contain a value for the type. + */ + MimeData.prototype.getData = function (mime) { + var i = this._types.indexOf(mime); + return i !== -1 ? this._values[i] : undefined; + }; + /** + * Set the data value for the given MIME type. + * + * @param mime - The MIME type of interest. + * + * @param data - The data value for the given MIME type. + * + * #### Notes + * This will overwrite any previous entry for the MIME type. + */ + MimeData.prototype.setData = function (mime, data) { + this.clearData(mime); + this._types.push(mime); + this._values.push(data); + }; + /** + * Remove the data entry for the given MIME type. + * + * @param mime - The MIME type of interest. + * + * #### Notes + * This is a no-op if there is no entry for the given MIME type. + */ + MimeData.prototype.clearData = function (mime) { + var i = this._types.indexOf(mime); + if (i !== -1) { + this._types.splice(i, 1); + this._values.splice(i, 1); + } + }; + /** + * Remove all data entries from the dataset. + */ + MimeData.prototype.clear = function () { + this._types.length = 0; + this._values.length = 0; + }; + return MimeData; + }()); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for random number related functionality. + */ + var Random; + (function (Random) { + /** + * A function which generates random bytes. + * + * @param buffer - The `Uint8Array` to fill with random bytes. + * + * #### Notes + * A cryptographically strong random number generator will be used if + * available. Otherwise, `Math.random` will be used as a fallback for + * randomness. + * + * The following RNGs are supported, listed in order of precedence: + * - `window.crypto.getRandomValues` + * - `window.msCrypto.getRandomValues` + * - `require('crypto').randomFillSync + * - `require('crypto').randomBytes + * - `Math.random` + */ + Random.getRandomValues = (function () { + // Look up the crypto module if available. + var crypto = ((typeof window !== 'undefined' && (window.crypto || window.msCrypto)) || + (typeof commonjsRequire !== 'undefined' && require('crypto')) || null); + // Modern browsers and IE 11 + if (crypto && typeof crypto.getRandomValues === 'function') { + return function getRandomValues(buffer) { + return crypto.getRandomValues(buffer); + }; + } + // Node 7+ + if (crypto && typeof crypto.randomFillSync === 'function') { + return function getRandomValues(buffer) { + return crypto.randomFillSync(buffer); + }; + } + // Node 0.10+ + if (crypto && typeof crypto.randomBytes === 'function') { + return function getRandomValues(buffer) { + var bytes = crypto.randomBytes(buffer.length); + for (var i = 0, n = bytes.length; i < n; ++i) { + buffer[i] = bytes[i]; + } + }; + } + // Fallback + return function getRandomValues(buffer) { + var value = 0; + for (var i = 0, n = buffer.length; i < n; ++i) { + if (i % 4 === 0) { + value = Math.random() * 0xFFFFFFFF >>> 0; + } + buffer[i] = value & 0xFF; + value >>>= 8; + } + }; + })(); + })(Random || (Random = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * A runtime object which captures compile-time type information. + * + * #### Notes + * A token captures the compile-time type of an interface or class in + * an object which can be used at runtime in a type-safe fashion. + */ + var Token = /** @class */ (function () { + /** + * Construct a new token. + * + * @param name - A human readable name for the token. + */ + function Token(name) { + this.name = name; + this._tokenStructuralPropertyT = null; + } + return Token; + }()); + + // Copyright (c) Jupyter Development Team. + /** + * The namespace for UUID related functionality. + */ + var UUID; + (function (UUID) { + /** + * A function which generates UUID v4 identifiers. + * + * @returns A new UUID v4 string. + * + * #### Notes + * This implementation complies with RFC 4122. + * + * This uses `Random.getRandomValues()` for random bytes, which in + * turn will use the underlying `crypto` module of the platform if + * it is available. The fallback for randomness is `Math.random`. + */ + UUID.uuid4 = (function () { + // Create a 16 byte array to hold the random values. + var bytes = new Uint8Array(16); + // Create a look up table from bytes to hex strings. + var lut = new Array(256); + // Pad the single character hex digits with a leading zero. + for (var i = 0; i < 16; ++i) { + lut[i] = '0' + i.toString(16); + } + // Populate the rest of the hex digits. + for (var i = 16; i < 256; ++i) { + lut[i] = i.toString(16); + } + // Return a function which generates the UUID. + return function uuid4() { + // Get a new batch of random values. + Random.getRandomValues(bytes); + // Set the UUID version number to 4. + bytes[6] = 0x40 | (bytes[6] & 0x0F); + // Set the clock sequence bit to the RFC spec. + bytes[8] = 0x80 | (bytes[8] & 0x3F); + // Assemble the UUID string. + return (lut[bytes[0]] + + lut[bytes[1]] + + lut[bytes[2]] + + lut[bytes[3]] + + '-' + + lut[bytes[4]] + + lut[bytes[5]] + + '-' + + lut[bytes[6]] + + lut[bytes[7]] + + '-' + + lut[bytes[8]] + + lut[bytes[9]] + + '-' + + lut[bytes[10]] + + lut[bytes[11]] + + lut[bytes[12]] + + lut[bytes[13]] + + lut[bytes[14]] + + lut[bytes[15]]); + }; + })(); + })(UUID || (UUID = {})); + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + var _listCacheClear = listCacheClear; + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + var eq_1 = eq; + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq_1(array[length][0], key)) { + return length; + } + } + return -1; + } + + var _assocIndexOf = assocIndexOf; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + var _listCacheDelete = listCacheDelete; + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + var _listCacheGet = listCacheGet; + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return _assocIndexOf(this.__data__, key) > -1; + } + + var _listCacheHas = listCacheHas; + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + var _listCacheSet = listCacheSet; + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = _listCacheClear; + ListCache.prototype['delete'] = _listCacheDelete; + ListCache.prototype.get = _listCacheGet; + ListCache.prototype.has = _listCacheHas; + ListCache.prototype.set = _listCacheSet; + + var _ListCache = ListCache; + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new _ListCache; + this.size = 0; + } + + var _stackClear = stackClear; + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + var _stackDelete = stackDelete; + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + var _stackGet = stackGet; + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + var _stackHas = stackHas; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + var _freeGlobal = freeGlobal; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = _freeGlobal || freeSelf || Function('return this')(); + + var _root = root; + + /** Built-in value references. */ + var Symbol$1 = _root.Symbol; + + var _Symbol = Symbol$1; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + var _getRawTag = getRawTag; + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$1.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString$1.call(value); + } + + var _objectToString = objectToString; + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag$1 && symToStringTag$1 in Object(value)) + ? _getRawTag(value) + : _objectToString(value); + } + + var _baseGetTag = baseGetTag; + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + var isObject_1 = isObject; + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + var isFunction_1 = isFunction; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = _root['__core-js_shared__']; + + var _coreJsData = coreJsData; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + var _isMasked = isMasked; + + /** Used for built-in method references. */ + var funcProto = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + var _toSource = toSource; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype, + objectProto$2 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString$1.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); + } + + var _baseIsNative = baseIsNative; + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + var _getValue = getValue; + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; + } + + var _getNative = getNative; + + /* Built-in method references that are verified to be native. */ + var Map$1 = _getNative(_root, 'Map'); + + var _Map = Map$1; + + /* Built-in method references that are verified to be native. */ + var nativeCreate = _getNative(Object, 'create'); + + var _nativeCreate = nativeCreate; + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; + } + + var _hashClear = hashClear; + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + var _hashDelete = hashDelete; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto$3 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (_nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty$2.call(data, key) ? data[key] : undefined; + } + + var _hashGet = hashGet; + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$4.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$3.call(data, key); + } + + var _hashHas = hashHas; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; + return this; + } + + var _hashSet = hashSet; + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = _hashClear; + Hash.prototype['delete'] = _hashDelete; + Hash.prototype.get = _hashGet; + Hash.prototype.has = _hashHas; + Hash.prototype.set = _hashSet; + + var _Hash = Hash; + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new _Hash, + 'map': new (_Map || _ListCache), + 'string': new _Hash + }; + } + + var _mapCacheClear = mapCacheClear; + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + var _isKeyable = isKeyable; + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return _isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + var _getMapData = getMapData; + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = _getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + var _mapCacheDelete = mapCacheDelete; + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return _getMapData(this, key).get(key); + } + + var _mapCacheGet = mapCacheGet; + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return _getMapData(this, key).has(key); + } + + var _mapCacheHas = mapCacheHas; + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = _getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + var _mapCacheSet = mapCacheSet; + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = _mapCacheClear; + MapCache.prototype['delete'] = _mapCacheDelete; + MapCache.prototype.get = _mapCacheGet; + MapCache.prototype.has = _mapCacheHas; + MapCache.prototype.set = _mapCacheSet; + + var _MapCache = MapCache; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache) { + var pairs = data.__data__; + if (!_Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + var _stackSet = stackSet; + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new _ListCache(entries); + this.size = data.size; + } + + // Add methods to `Stack`. + Stack.prototype.clear = _stackClear; + Stack.prototype['delete'] = _stackDelete; + Stack.prototype.get = _stackGet; + Stack.prototype.has = _stackHas; + Stack.prototype.set = _stackSet; + + var _Stack = Stack; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED$2); + return this; + } + + var _setCacheAdd = setCacheAdd; + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + var _setCacheHas = setCacheHas; + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; + SetCache.prototype.has = _setCacheHas; + + var _SetCache = SetCache; + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + var _arraySome = arraySome; + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + var _cacheHas = cacheHas; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!_cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + var _equalArrays = equalArrays; + + /** Built-in value references. */ + var Uint8Array$1 = _root.Uint8Array; + + var _Uint8Array = Uint8Array$1; + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + var _mapToArray = mapToArray; + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + var _setToArray = setToArray; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$1 = 1, + COMPARE_UNORDERED_FLAG$1 = 2; + + /** `Object#toString` result references. */ + var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = _Symbol ? _Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array(object), new _Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq_1(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1; + convert || (convert = _setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG$1; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + var _equalByTag = equalByTag; + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + var _arrayPush = arrayPush; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + var isArray_1 = isArray; + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray_1(object) ? result : _arrayPush(result, symbolsFunc(object)); + } + + var _baseGetAllKeys = baseGetAllKeys; + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + var _arrayFilter = arrayFilter; + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + var stubArray_1 = stubArray; + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto$5.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray_1 : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return _arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + var _getSymbols = getSymbols; + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + var _baseTimes = baseTimes; + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + var isObjectLike_1 = isObjectLike; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike_1(value) && _baseGetTag(value) == argsTag; + } + + var _baseIsArguments = baseIsArguments; + + /** Used for built-in method references. */ + var objectProto$6 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$6.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable$1 = objectProto$6.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { + return isObjectLike_1(value) && hasOwnProperty$4.call(value, 'callee') && + !propertyIsEnumerable$1.call(value, 'callee'); + }; + + var isArguments_1 = isArguments; + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + var stubFalse_1 = stubFalse; + + var isBuffer_1 = createCommonjsModule(function (module, exports) { + /** Detect free variable `exports`. */ + var freeExports = exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? _root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse_1; + + module.exports = isBuffer; + }); + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + var _isIndex = isIndex; + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$1 = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; + } + + var isLength_1 = isLength; + + /** `Object#toString` result references. */ + var argsTag$1 = '[object Arguments]', + arrayTag = '[object Array]', + boolTag$1 = '[object Boolean]', + dateTag$1 = '[object Date]', + errorTag$1 = '[object Error]', + funcTag$1 = '[object Function]', + mapTag$1 = '[object Map]', + numberTag$1 = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag$1 = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag$1 = '[object ArrayBuffer]', + dataViewTag$1 = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = + typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag$1] = + typedArrayTags[errorTag$1] = typedArrayTags[funcTag$1] = + typedArrayTags[mapTag$1] = typedArrayTags[numberTag$1] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = + typedArrayTags[setTag$1] = typedArrayTags[stringTag$1] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike_1(value) && + isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)]; + } + + var _baseIsTypedArray = baseIsTypedArray; + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + var _baseUnary = baseUnary; + + var _nodeUtil = createCommonjsModule(function (module, exports) { + /** Detect free variable `exports`. */ + var freeExports = exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && _freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + module.exports = nodeUtil; + }); + + /* Node.js helper references. */ + var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; + + var isTypedArray_1 = isTypedArray; + + /** Used for built-in method references. */ + var objectProto$7 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$5 = objectProto$7.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray_1(value), + isArg = !isArr && isArguments_1(value), + isBuff = !isArr && !isArg && isBuffer_1(value), + isType = !isArr && !isArg && !isBuff && isTypedArray_1(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$5.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + _isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + var _arrayLikeKeys = arrayLikeKeys; + + /** Used for built-in method references. */ + var objectProto$8 = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$8; + + return value === proto; + } + + var _isPrototype = isPrototype; + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + var _overArg = overArg; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = _overArg(Object.keys, Object); + + var _nativeKeys = nativeKeys; + + /** Used for built-in method references. */ + var objectProto$9 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$6 = objectProto$9.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!_isPrototype(object)) { + return _nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$6.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + var _baseKeys = baseKeys; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength_1(value.length) && !isFunction_1(value); + } + + var isArrayLike_1 = isArrayLike; + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike_1(object) ? _arrayLikeKeys(object) : _baseKeys(object); + } + + var keys_1 = keys; + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return _baseGetAllKeys(object, keys_1, _getSymbols); + } + + var _getAllKeys = getAllKeys; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$2 = 1; + + /** Used for built-in method references. */ + var objectProto$a = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$7 = objectProto$a.hasOwnProperty; + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2, + objProps = _getAllKeys(object), + objLength = objProps.length, + othProps = _getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty$7.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + var _equalObjects = equalObjects; + + /* Built-in method references that are verified to be native. */ + var DataView$1 = _getNative(_root, 'DataView'); + + var _DataView = DataView$1; + + /* Built-in method references that are verified to be native. */ + var Promise$1 = _getNative(_root, 'Promise'); + + var _Promise = Promise$1; + + /* Built-in method references that are verified to be native. */ + var Set$1 = _getNative(_root, 'Set'); + + var _Set = Set$1; + + /* Built-in method references that are verified to be native. */ + var WeakMap$1 = _getNative(_root, 'WeakMap'); + + var _WeakMap = WeakMap$1; + + /** `Object#toString` result references. */ + var mapTag$2 = '[object Map]', + objectTag$1 = '[object Object]', + promiseTag = '[object Promise]', + setTag$2 = '[object Set]', + weakMapTag$1 = '[object WeakMap]'; + + var dataViewTag$2 = '[object DataView]'; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = _toSource(_DataView), + mapCtorString = _toSource(_Map), + promiseCtorString = _toSource(_Promise), + setCtorString = _toSource(_Set), + weakMapCtorString = _toSource(_WeakMap); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = _baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag$2) || + (_Map && getTag(new _Map) != mapTag$2) || + (_Promise && getTag(_Promise.resolve()) != promiseTag) || + (_Set && getTag(new _Set) != setTag$2) || + (_WeakMap && getTag(new _WeakMap) != weakMapTag$1)) { + getTag = function(value) { + var result = _baseGetTag(value), + Ctor = result == objectTag$1 ? value.constructor : undefined, + ctorString = Ctor ? _toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag$2; + case mapCtorString: return mapTag$2; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag$2; + case weakMapCtorString: return weakMapTag$1; + } + } + return result; + }; + } + + var _getTag = getTag; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$3 = 1; + + /** `Object#toString` result references. */ + var argsTag$2 = '[object Arguments]', + arrayTag$1 = '[object Array]', + objectTag$2 = '[object Object]'; + + /** Used for built-in method references. */ + var objectProto$b = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$8 = objectProto$b.hasOwnProperty; + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray_1(object), + othIsArr = isArray_1(other), + objTag = objIsArr ? arrayTag$1 : _getTag(object), + othTag = othIsArr ? arrayTag$1 : _getTag(other); + + objTag = objTag == argsTag$2 ? objectTag$2 : objTag; + othTag = othTag == argsTag$2 ? objectTag$2 : othTag; + + var objIsObj = objTag == objectTag$2, + othIsObj = othTag == objectTag$2, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer_1(object)) { + if (!isBuffer_1(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack); + return (objIsArr || isTypedArray_1(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG$3)) { + var objIsWrapped = objIsObj && hasOwnProperty$8.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty$8.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + var _baseIsEqualDeep = baseIsEqualDeep; + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike_1(value) && !isObjectLike_1(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + var _baseIsEqual = baseIsEqual; + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return _baseIsEqual(value, other); + } + + var isEqual_1 = isEqual; + + /** Built-in value references. */ + var getPrototype = _overArg(Object.getPrototypeOf, Object); + + var _getPrototype = getPrototype; + + /** `Object#toString` result references. */ + var objectTag$3 = '[object Object]'; + + /** Used for built-in method references. */ + var funcProto$2 = Function.prototype, + objectProto$c = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$2 = funcProto$2.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$9 = objectProto$c.hasOwnProperty; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString$2.call(Object); + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike_1(value) || _baseGetTag(value) != objectTag$3) { + return false; + } + var proto = _getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty$9.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString$2.call(Ctor) == objectCtorString; + } + + var isPlainObject_1 = isPlainObject; + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign = (undefined && undefined.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + /** + * Find all strings in the first argument that are not in the second. + */ + function difference(a, b) { + return a.filter(function (v) { return b.indexOf(v) === -1; }); + } + /** + * Compare two objects deeply to see if they are equal. + */ + function isEqual$1(a, b) { + return isEqual_1(a, b); + } + /** + * A polyfill for Object.assign + * + * This is from code that Typescript 2.4 generates for a polyfill. + */ + var assign = Object.assign || function (t) { + for (var i = 1; i < arguments.length; i++) { + var s = arguments[i]; + for (var p in s) { + if (Object.prototype.hasOwnProperty.call(s, p)) { + t[p] = s[p]; + } + } + } + return t; + }; + /** + * Generate a UUID + * + * http://www.ietf.org/rfc/rfc4122.txt + */ + function uuid() { + return UUID.uuid4(); + } + /** + * Wrappable Error class + * + * The Error class doesn't actually act on `this`. Instead it always + * returns a new instance of Error. Here we capture that instance so we + * can apply it's properties to `this`. + */ + var WrappedError = /** @class */ (function (_super) { + __extends(WrappedError, _super); + function WrappedError(message, error) { + var _this = _super.call(this, message) || this; + console.warn('WrappedError has been deprecated!'); + // Keep a stack of the original error messages. + if (error instanceof WrappedError) { + _this.error_stack = error.error_stack; + } + else { + _this.error_stack = [error]; + } + _this.error_stack.push(_this); + return _this; + } + return WrappedError; + }(Error)); + /** + * Resolve a promiseful dictionary. + * Returns a single Promise. + */ + function resolvePromisesDict(d) { + var keys = Object.keys(d); + var values = []; + keys.forEach(function (key) { + values.push(d[key]); + }); + return Promise.all(values).then(function (v) { + var d = {}; + for (var i = 0; i < keys.length; i++) { + d[keys[i]] = v[i]; + } + return d; + }); + } + /** + * Creates a wrappable Promise rejection function. + * + * Creates a function that logs an error message before rethrowing + * the original error that caused the promise to reject. + */ + function reject(message, log) { + return function promiseRejection(error) { + if (log) { + console.error(new Error(message)); + } + throw error; + }; + } + /** + * Takes an object 'state' and fills in buffer[i] at 'path' buffer_paths[i] + * where buffer_paths[i] is a list indicating where in the object buffer[i] should + * be placed + * Example: state = {a: 1, b: {}, c: [0, null]} + * buffers = [array1, array2] + * buffer_paths = [['b', 'data'], ['c', 1]] + * Will lead to {a: 1, b: {data: array1}, c: [0, array2]} + */ + function put_buffers(state, buffer_paths, buffers) { + for (var i = 0; i < buffer_paths.length; i++) { + var buffer_path = buffer_paths[i]; + // say we want to set state[x][y][z] = buffers[i] + var obj = state; + // we first get obj = state[x][y] + for (var j = 0; j < buffer_path.length - 1; j++) { + obj = obj[buffer_path[j]]; + } + // and then set: obj[z] = buffers[i] + obj[buffer_path[buffer_path.length - 1]] = buffers[i]; + } + } + /** + * The inverse of put_buffers, return an objects with the new state where all buffers(ArrayBuffer) + * are removed. If a buffer is a member of an object, that object is cloned, and the key removed. If a buffer + * is an element of an array, that array is cloned, and the element is set to null. + * See put_buffers for the meaning of buffer_paths + * Returns an object with the new state (.state) an array with paths to the buffers (.buffer_paths), + * and the buffers associated to those paths (.buffers). + */ + function remove_buffers(state) { + var buffers = []; + var buffer_paths = []; + // if we need to remove an object from a list, we need to clone that list, otherwise we may modify + // the internal state of the widget model + // however, we do not want to clone everything, for performance + function remove(obj, path) { + if (obj.toJSON) { + // We need to get the JSON form of the object before recursing. + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior + obj = obj.toJSON(); + } + if (Array.isArray(obj)) { + var is_cloned = false; + for (var i = 0; i < obj.length; i++) { + var value = obj[i]; + if (value) { + if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) { + if (!is_cloned) { + obj = obj.slice(); + is_cloned = true; + } + buffers.push(ArrayBuffer.isView(value) ? value.buffer : value); + buffer_paths.push(path.concat([i])); + // easier to just keep the array, but clear the entry, otherwise we have to think + // about array length, much easier this way + obj[i] = null; + } + else { + var new_value = remove(value, path.concat([i])); + // only assigned when the value changes, we may serialize objects that don't support assignment + if (new_value !== value) { + if (!is_cloned) { + obj = obj.slice(); + is_cloned = true; + } + obj[i] = new_value; + } + } + } + } + } + else if (isPlainObject_1(obj)) { + for (var key in obj) { + var is_cloned = false; + if (obj.hasOwnProperty(key)) { + var value = obj[key]; + if (value) { + if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) { + if (!is_cloned) { + obj = __assign({}, obj); + is_cloned = true; + } + buffers.push(ArrayBuffer.isView(value) ? value.buffer : value); + buffer_paths.push(path.concat([key])); + delete obj[key]; // for objects/dicts we just delete them + } + else { + var new_value = remove(value, path.concat([key])); + // only assigned when the value changes, we may serialize objects that don't support assignment + if (new_value !== value) { + if (!is_cloned) { + obj = __assign({}, obj); + is_cloned = true; + } + obj[key] = new_value; + } + } + } + } + } + } + return obj; + } + var new_state = remove(state, []); + return { state: new_state, buffers: buffers, buffer_paths: buffer_paths }; + } + var hexTable = [ + '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0A', '0B', '0C', '0D', '0E', '0F', + '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1A', '1B', '1C', '1D', '1E', '1F', + '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2A', '2B', '2C', '2D', '2E', '2F', + '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3A', '3B', '3C', '3D', '3E', '3F', + '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4A', '4B', '4C', '4D', '4E', '4F', + '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5A', '5B', '5C', '5D', '5E', '5F', + '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6A', '6B', '6C', '6D', '6E', '6F', + '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7A', '7B', '7C', '7D', '7E', '7F', + '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8A', '8B', '8C', '8D', '8E', '8F', + '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9A', '9B', '9C', '9D', '9E', '9F', + 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', + 'B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'BA', 'BB', 'BC', 'BD', 'BE', 'BF', + 'C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'CA', 'CB', 'CC', 'CD', 'CE', 'CF', + 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'DA', 'DB', 'DC', 'DD', 'DE', 'DF', + 'E0', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'EA', 'EB', 'EC', 'ED', 'EE', 'EF', + 'F0', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF' + ]; + /** + * Convert an ArrayBuffer to a hex string. + */ + function bufferToHex(buffer) { + var x = new Uint8Array(buffer); + var s = []; + for (var i = 0; i < x.length; i++) { + s.push(hexTable[x[i]]); + } + return s.join(''); + } + /** + * Convert a hex string to an ArrayBuffer. + */ + function hexToBuffer(hex) { + var x = new Uint8Array(hex.length / 2); + for (var i = 0; i < hex.length; i += 2) { + x[i / 2] = parseInt(hex.slice(i, i + 2), 16); + } + return x.buffer; + } + /** + * Convert an ArrayBuffer to a base64 string. + */ + function bufferToBase64(buffer) { + return fromByteArray_1(new Uint8Array(buffer)); + } + /** + * Convert a base64 string to an ArrayBuffer. + */ + function base64ToBuffer(base64) { + return toByteArray_1(base64).buffer; + } + + var utils = /*#__PURE__*/Object.freeze({ + difference: difference, + isEqual: isEqual$1, + assign: assign, + uuid: uuid, + WrappedError: WrappedError, + resolvePromisesDict: resolvePromisesDict, + reject: reject, + put_buffers: put_buffers, + remove_buffers: remove_buffers, + bufferToHex: bufferToHex, + hexToBuffer: hexToBuffer, + bufferToBase64: bufferToBase64, + base64ToBuffer: base64ToBuffer + }); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var JUPYTER_WIDGETS_VERSION = '1.2.0'; + var PROTOCOL_VERSION = '2.0.0'; + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __assign$1 = (undefined && undefined.__assign) || function () { + __assign$1 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$1.apply(this, arguments); + }; + var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + var PROTOCOL_MAJOR_VERSION = PROTOCOL_VERSION.split('.', 1)[0]; + /** + * Manager abstract base class + */ + var ManagerBase = /** @class */ (function () { + function ManagerBase() { + /** + * The comm target name to register + */ + this.comm_target_name = 'jupyter.widget'; + /** + * Dictionary of model ids and model instance promises + */ + this._models = Object.create(null); + } + /** + * Display a DOMWidgetView for a particular model. + */ + ManagerBase.prototype.display_model = function (msg, model, options) { + var _this = this; + if (options === void 0) { options = {}; } + return this.create_view(model, options).then(function (view) { return _this.display_view(msg, view, options); }).catch(reject('Could not create view', true)); + }; + /** + * Modifies view options. Generally overloaded in custom widget manager + * implementations. + */ + ManagerBase.prototype.setViewOptions = function (options) { + if (options === void 0) { options = {}; } + return options; + }; + ManagerBase.prototype.create_view = function (model, options) { + var _this = this; + if (options === void 0) { options = {}; } + var viewPromise = model.state_change = model.state_change.then(function () { + return _this.loadClass(model.get('_view_name'), model.get('_view_module'), model.get('_view_module_version')).then(function (ViewType) { + var view = new ViewType({ + model: model, + options: _this.setViewOptions(options) + }); + view.listenTo(model, 'destroy', view.remove); + return Promise.resolve(view.render()).then(function () { return view; }); + }).catch(reject('Could not create a view for model id ' + model.model_id, true)); + }); + var id = uuid(); + model.views[id] = viewPromise; + viewPromise.then(function (view) { + view.once('remove', function () { delete view.model.views[id]; }, _this); + }); + return model.state_change; + }; + /** + * callback handlers specific to a view + */ + ManagerBase.prototype.callbacks = function (view) { + return {}; + }; + /** + * Get a promise for a model by model id. + * + * #### Notes + * If a model is not found, undefined is returned (NOT a promise). However, + * the calling code should also deal with the case where a rejected promise + * is returned, and should treat that also as a model not found. + */ + ManagerBase.prototype.get_model = function (model_id) { + // TODO: Perhaps we should return a Promise.reject if the model is not + // found. Right now this isn't a true async function because it doesn't + // always return a promise. + return this._models[model_id]; + }; + /** + * Handle when a comm is opened. + */ + ManagerBase.prototype.handle_comm_open = function (comm, msg) { + var protocolVersion = (msg.metadata || {}).version || ''; + if (protocolVersion.split('.', 1)[0] !== PROTOCOL_MAJOR_VERSION) { + var error = "Wrong widget protocol version: received protocol version '" + protocolVersion + "', but was expecting major version '" + PROTOCOL_MAJOR_VERSION + "'"; + console.error(error); + return Promise.reject(error); + } + var data = msg.content.data; + var buffer_paths = data.buffer_paths || []; + // Make sure the buffers are DataViews + var buffers = (msg.buffers || []).map(function (b) { + if (b instanceof DataView) { + return b; + } + else { + return new DataView(b instanceof ArrayBuffer ? b : b.buffer); + } + }); + put_buffers(data.state, buffer_paths, buffers); + return this.new_model({ + model_name: data.state['_model_name'], + model_module: data.state['_model_module'], + model_module_version: data.state['_model_module_version'], + comm: comm + }, data.state).catch(reject('Could not create a model.', true)); + }; + /** + * Create a comm and new widget model. + * @param options - same options as new_model but comm is not + * required and additional options are available. + * @param serialized_state - serialized model attributes. + */ + ManagerBase.prototype.new_widget = function (options, serialized_state) { + var _this = this; + if (serialized_state === void 0) { serialized_state = {}; } + var commPromise; + // we check to make sure the view information is provided, to help catch + // backwards incompatibility errors. + if (options.view_name === undefined + || options.view_module === undefined + || options.view_module_version === undefined) { + return Promise.reject('new_widget(...) must be given view information in the options.'); + } + // If no comm is provided, a new comm is opened for the jupyter.widget + // target. + if (options.comm) { + commPromise = Promise.resolve(options.comm); + } + else { + commPromise = this._create_comm(this.comm_target_name, options.model_id, { + state: { + _model_module: options.model_module, + _model_module_version: options.model_module_version, + _model_name: options.model_name, + _view_module: options.view_module, + _view_module_version: options.view_module_version, + _view_name: options.view_name + }, + }, { version: PROTOCOL_VERSION }); + } + // The options dictionary is copied since data will be added to it. + var options_clone = __assign$1({}, options); + // Create the model. In the case where the comm promise is rejected a + // comm-less model is still created with the required model id. + return commPromise.then(function (comm) { + // Comm Promise Resolved. + options_clone.comm = comm; + var widget_model = _this.new_model(options_clone, serialized_state); + return widget_model.then(function (model) { + model.sync('create', model); + return model; + }); + }, function () { + // Comm Promise Rejected. + if (!options_clone.model_id) { + options_clone.model_id = uuid(); + } + return _this.new_model(options_clone, serialized_state); + }); + }; + ManagerBase.prototype.register_model = function (model_id, modelPromise) { + var _this = this; + this._models[model_id] = modelPromise; + modelPromise.then(function (model) { + model.once('comm:close', function () { + delete _this._models[model_id]; + }); + }); + }; + /** + * Create and return a promise for a new widget model + * + * @param options - the options for creating the model. + * @param serialized_state - attribute values for the model. + * + * @example + * widget_manager.new_model({ + * model_name: 'IntSlider', + * model_module: '@jupyter-widgets/controls', + * model_module_version: '1.0.0', + * model_id: 'u-u-i-d' + * }).then((model) => { console.log('Create success!', model); }, + * (err) => {console.error(err)}); + * + */ + ManagerBase.prototype.new_model = function (options, serialized_state) { + if (serialized_state === void 0) { serialized_state = {}; } + return __awaiter(this, void 0, void 0, function () { + var model_id, modelPromise; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (options.model_id) { + model_id = options.model_id; + } + else if (options.comm) { + model_id = options.model_id = options.comm.comm_id; + } + else { + throw new Error('Neither comm nor model_id provided in options object. At least one must exist.'); + } + modelPromise = this._make_model(options, serialized_state); + // this call needs to happen before the first `await`, see note in `set_state`: + this.register_model(model_id, modelPromise); + return [4 /*yield*/, modelPromise]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + }; + ManagerBase.prototype._make_model = function (options, serialized_state) { + if (serialized_state === void 0) { serialized_state = {}; } + return __awaiter(this, void 0, void 0, function () { + var model_id, model_promise, ModelType, error_1, attributes, modelOptions, widget_model; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + model_id = options.model_id; + model_promise = this.loadClass(options.model_name, options.model_module, options.model_module_version); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, model_promise]; + case 2: + ModelType = _a.sent(); + return [3 /*break*/, 4]; + case 3: + error_1 = _a.sent(); + console.error('Could not instantiate widget'); + throw error_1; + case 4: + if (!ModelType) { + throw new Error("Cannot find model module " + options.model_module + "@" + options.model_module_version + ", " + options.model_name); + } + return [4 /*yield*/, ModelType._deserialize_state(serialized_state, this)]; + case 5: + attributes = _a.sent(); + modelOptions = { + widget_manager: this, + model_id: model_id, + comm: options.comm, + }; + widget_model = new ModelType(attributes, modelOptions); + widget_model.name = options.model_name; + widget_model.module = options.model_module; + return [2 /*return*/, widget_model]; + } + }); + }); + }; + /** + * Close all widgets and empty the widget state. + * @return Promise that resolves when the widget state is cleared. + */ + ManagerBase.prototype.clear_state = function () { + var _this = this; + return resolvePromisesDict(this._models).then(function (models) { + Object.keys(models).forEach(function (id) { return models[id].close(); }); + _this._models = Object.create(null); + }); + }; + /** + * Asynchronously get the state of the widget manager. + * + * This includes all of the widget models, and follows the format given in + * the @jupyter-widgets/schema package. + * + * @param options - The options for what state to return. + * @returns Promise for a state dictionary + */ + ManagerBase.prototype.get_state = function (options) { + var _this = this; + if (options === void 0) { options = {}; } + var modelPromises = Object.keys(this._models).map(function (id) { return _this._models[id]; }); + return Promise.all(modelPromises).then(function (models) { + return serialize_state(models, options); + }); + }; + /** + * Set the widget manager state. + * + * @param state - a Javascript object conforming to the application/vnd.jupyter.widget-state+json spec. + * + * Reconstructs all of the widget models in the state, merges that with the + * current manager state, and then attempts to redisplay the widgets in the + * state. + */ + ManagerBase.prototype.set_state = function (state) { + var _this = this; + // Check to make sure that it's the same version we are parsing. + if (!(state.version_major && state.version_major <= 2)) { + throw 'Unsupported widget state format'; + } + var models = state.state; + // Recreate all the widget models for the given widget manager state. + var all_models = this._get_comm_info().then(function (live_comms) { + /* Note: It is currently safe to just loop over the models in any order, + given that the following holds (does at the time of writing): + 1: any call to `new_model` with state registers the model promise (e.g. with `register_model`) + synchronously (before it's first `await` statement). + 2: any calls to a model constructor or the `set_state` method on a model, + happens asynchronously (in a `then` clause, or after an `await` statement). + + Without these assumptions, one risks trying to set model state with a reference + to another model that doesn't exist yet! + */ + return Promise.all(Object.keys(models).map(function (model_id) { + // First put back the binary buffers + var decode = { 'base64': base64ToBuffer, 'hex': hexToBuffer }; + var model = models[model_id]; + var modelState = model.state; + if (model.buffers) { + var bufferPaths = model.buffers.map(function (b) { return b.path; }); + // put_buffers expects buffers to be DataViews + var buffers = model.buffers.map(function (b) { return new DataView(decode[b.encoding](b.data)); }); + put_buffers(model.state, bufferPaths, buffers); + } + // If the model has already been created, set its state and then + // return it. + if (_this._models[model_id]) { + return _this._models[model_id].then(function (model) { + // deserialize state + return model.constructor._deserialize_state(modelState || {}, _this).then(function (attributes) { + model.set_state(attributes); // case 2 + return model; + }); + }); + } + var modelCreate = { + model_id: model_id, + model_name: model.model_name, + model_module: model.model_module, + model_module_version: model.model_module_version + }; + if (live_comms.hasOwnProperty(model_id)) { // live comm + // This connects to an existing comm if it exists, and + // should *not* send a comm open message. + return _this._create_comm(_this.comm_target_name, model_id).then(function (comm) { + modelCreate.comm = comm; + return _this.new_model(modelCreate); // No state, so safe wrt. case 1 + }); + } + else { + return _this.new_model(modelCreate, modelState); // case 1 + } + })); + }); + return all_models; + }; + /** + * Disconnect the widget manager from the kernel, setting each model's comm + * as dead. + */ + ManagerBase.prototype.disconnect = function () { + var _this = this; + Object.keys(this._models).forEach(function (i) { + _this._models[i].then(function (model) { model.comm_live = false; }); + }); + }; + /** + * Resolve a URL relative to the current notebook location. + * + * The default implementation just returns the original url. + */ + ManagerBase.prototype.resolveUrl = function (url) { + return Promise.resolve(url); + }; + /** + * Filter serialized widget state to remove any ID's already present in manager. + * + * @param {*} state Serialized state to filter + * + * @returns {*} A copy of the state, with its 'state' attribute filtered + */ + ManagerBase.prototype.filterExistingModelState = function (serialized_state) { + var _this = this; + var models = serialized_state.state; + models = Object.keys(models) + .filter(function (model_id) { + return !_this._models[model_id]; + }) + .reduce(function (res, model_id) { + res[model_id] = models[model_id]; + return res; + }, {}); + return __assign$1(__assign$1({}, serialized_state), { state: models }); + }; + return ManagerBase; + }()); + /** + * Serialize an array of widget models + * + * #### Notes + * The return value follows the format given in the + * @jupyter-widgets/schema package. + */ + function serialize_state(models, options) { + if (options === void 0) { options = {}; } + var state = {}; + models.forEach(function (model) { + var model_id = model.model_id; + var split = remove_buffers(model.serialize(model.get_state(options.drop_defaults))); + var buffers = split.buffers.map(function (buffer, index) { + return { + data: bufferToBase64(buffer), + path: split.buffer_paths[index], + encoding: 'base64' + }; + }); + state[model_id] = { + model_name: model.name, + model_module: model.module, + model_module_version: model.get('_model_module_version'), + state: split.state + }; + // To save space, only include the buffers key if we have buffers + if (buffers.length > 0) { + state[model_id].buffers = buffers; + } + }); + return { version_major: 2, version_minor: 0, state: state }; + } + + // This file contains a modified version of the set function from the Backbone + // (see + // https://github.com/jashkenas/backbone/blob/05fde9e201f7e2137796663081105cd6dad12a98/backbone.js#L460, + // with changes below marked with an EDIT comment). This file in Backbone has the following license. + var __assign$2 = (undefined && undefined.__assign) || function () { + __assign$2 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$2.apply(this, arguments); + }; + // Set a hash of model attributes on the object, firing `"change"`. This is + // the core primitive operation of a model, updating the data and notifying + // anyone who needs to know about the change in state. The heart of the beast. + // This *MUST* be called with the model as the `this` context. + function set(key, val, options) { + /* tslint:disable:no-invalid-this */ + if (key == null) { + return this; + } + // Handle both `"key", value` and `{key: value}` -style arguments. + var attrs; + if (typeof key === 'object') { + attrs = key; + options = val; + } + else { + (attrs = {})[key] = val; + } + options || (options = {}); + // Run validation. + if (!this._validate(attrs, options)) { + return false; + } + // Extract attributes and options. + var unset = options.unset; + var silent = options.silent; + var changes = []; + var changing = this._changing; + this._changing = true; + if (!changing) { + // EDIT: changed to use object spread instead of _.clone + this._previousAttributes = __assign$2({}, this.attributes); + this.changed = {}; + } + var current = this.attributes; + var changed = this.changed; + var prev = this._previousAttributes; + // For each `set` attribute, update or delete the current value. + for (var attr in attrs) { + val = attrs[attr]; + // EDIT: the following two lines use our isEqual instead of _.isEqual + if (!isEqual$1(current[attr], val)) { + changes.push(attr); + } + if (!isEqual$1(prev[attr], val)) { + changed[attr] = val; + } + else { + delete changed[attr]; + } + unset ? delete current[attr] : current[attr] = val; + } + // Update the `id`. + this.id = this.get(this.idAttribute); + // Trigger all relevant attribute changes. + if (!silent) { + if (changes.length) { + this._pending = options; + } + for (var i = 0; i < changes.length; i++) { + this.trigger('change:' + changes[i], this, current[changes[i]], options); + } + } + // You might be wondering why there's a `while` loop here. Changes can + // be recursively nested within `"change"` events. + if (changing) { + return this; + } + if (!silent) { + while (this._pending) { + options = this._pending; + this._pending = false; + this.trigger('change', this, options); + } + } + this._pending = false; + this._changing = false; + return this; + /* tslint:enable:no-invalid-this */ + } + + // Underscore.js 1.10.2 + // https://underscorejs.org + // (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + // Underscore may be freely distributed under the MIT license. + + // Baseline setup + // -------------- + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root$1 = typeof self == 'object' && self.self === self && self || + typeof global == 'object' && global.global === global && global || + Function('return this')() || + {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype; + var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty$a = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var nativeIsArray = Array.isArray, + nativeKeys$1 = Object.keys, + nativeCreate$1 = Object.create; + + // Create references to these builtin functions because we override them. + var _isNaN = root$1.isNaN, + _isFinite = root$1.isFinite; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // The Underscore object. All exported functions below are added to it in the + // modules/index-all.js using the mixin function. + function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + } + + // Current version. + var VERSION = _.VERSION = '1.10.2'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + function optimizeCb(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + // The 2-argument case is omitted because we’re not using it. + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + } + + // An internal function to generate callbacks that can be applied to each + // element in a collection, returning the desired result — either `identity`, + // an arbitrary callback, a property matcher, or a property accessor. + function baseIteratee(value, context, argCount) { + if (value == null) return identity; + if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (isObject$1(value) && !isArray$1(value)) return matcher(value); + return property(value); + } + + // External wrapper for our callback generator. Users may customize + // `_.iteratee` if they want additional predicate/iteratee shorthand styles. + // This abstraction hides the internal-only argCount argument. + _.iteratee = iteratee; + function iteratee(value, context) { + return baseIteratee(value, context, Infinity); + } + + // The function we actually call internally. It invokes _.iteratee if + // overridden, otherwise baseIteratee. + function cb(value, context, argCount) { + if (_.iteratee !== iteratee) return _.iteratee(value, context); + return baseIteratee(value, context, argCount); + } + + // Some functions take a variable number of arguments, or a few expected + // arguments at the beginning and then a variable number of values to operate + // on. This helper accumulates all remaining arguments past the function’s + // argument length (or an explicit `startIndex`), into an array that becomes + // the last argument. Similar to ES6’s "rest parameter". + function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; + } + + // An internal function for creating a new object that inherits from another. + function baseCreate(prototype) { + if (!isObject$1(prototype)) return {}; + if (nativeCreate$1) return nativeCreate$1(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + } + + function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + } + + function _has(obj, path) { + return obj != null && hasOwnProperty$a.call(obj, path); + } + + function deepGet(obj, path) { + var length = path.length; + for (var i = 0; i < length; i++) { + if (obj == null) return void 0; + obj = obj[path[i]]; + } + return length ? obj : void 0; + } + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object. + // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = shallowProperty('length'); + function isArrayLike$1(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + } + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + function each(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike$1(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var _keys = keys$1(obj); + for (i = 0, length = _keys.length; i < length; i++) { + iteratee(obj[_keys[i]], _keys[i], obj); + } + } + return obj; + } + + // Return the results of applying the iteratee to each element. + function map(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = !isArrayLike$1(obj) && keys$1(obj), + length = (_keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Wrap code that reassigns argument variables in a separate function than + // the one that accesses `arguments.length` to avoid a perf hit. (#1991) + var reducer = function(obj, iteratee, memo, initial) { + var _keys = !isArrayLike$1(obj) && keys$1(obj), + length = (_keys || obj).length, + index = dir > 0 ? 0 : length - 1; + if (!initial) { + memo = obj[_keys ? _keys[index] : index]; + index += dir; + } + for (; index >= 0 && index < length; index += dir) { + var currentKey = _keys ? _keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + return function(obj, iteratee, memo, context) { + var initial = arguments.length >= 3; + return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + var reduce = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + var reduceRight = createReduce(-1); + + // Return the first value which passes a truth test. + function find(obj, predicate, context) { + var keyFinder = isArrayLike$1(obj) ? findIndex : findKey; + var key = keyFinder(obj, predicate, context); + if (key !== void 0 && key !== -1) return obj[key]; + } + + // Return all the elements that pass a truth test. + function filter(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + } + + // Return all the elements for which a truth test fails. + function reject$1(obj, predicate, context) { + return filter(obj, negate(cb(predicate)), context); + } + + // Determine whether all of the elements match a truth test. + function every(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike$1(obj) && keys$1(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + } + + // Determine if at least one element in the object matches a truth test. + function some(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike$1(obj) && keys$1(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + } + + // Determine if the array or object contains a given item (using `===`). + function contains(obj, item, fromIndex, guard) { + if (!isArrayLike$1(obj)) obj = values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return indexOf(obj, item, fromIndex) >= 0; + } + + // Invoke a method (with arguments) on every item in a collection. + var invoke = restArguments(function(obj, path, args) { + var contextPath, func; + if (isFunction$1(path)) { + func = path; + } else if (isArray$1(path)) { + contextPath = path.slice(0, -1); + path = path[path.length - 1]; + } + return map(obj, function(context) { + var method = func; + if (!method) { + if (contextPath && contextPath.length) { + context = deepGet(context, contextPath); + } + if (context == null) return void 0; + method = context[path]; + } + return method == null ? method : method.apply(context, args); + }); + }); + + // Convenience version of a common use case of `map`: fetching a property. + function pluck(obj, key) { + return map(obj, property(key)); + } + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + function where(obj, attrs) { + return filter(obj, matcher(attrs)); + } + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + function findWhere(obj, attrs) { + return find(obj, matcher(attrs)); + } + + // Return the maximum element (or element-based computation). + function max(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike$1(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Return the minimum element (or element-based computation). + function min(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike$1(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Shuffle a collection. + function shuffle(obj) { + return sample(obj, Infinity); + } + + // Sample **n** random values from a collection using the modern version of the + // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + function sample(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike$1(obj)) obj = values(obj); + return obj[random(obj.length - 1)]; + } + var sample = isArrayLike$1(obj) ? clone(obj) : values(obj); + var length = getLength(sample); + n = Math.max(Math.min(n, length), 0); + var last = length - 1; + for (var index = 0; index < n; index++) { + var rand = random(index, last); + var temp = sample[index]; + sample[index] = sample[rand]; + sample[rand] = temp; + } + return sample.slice(0, n); + } + + // Sort the object's values by a criterion produced by an iteratee. + function sortBy(obj, iteratee, context) { + var index = 0; + iteratee = cb(iteratee, context); + return pluck(map(obj, function(value, key, list) { + return { + value: value, + index: index++, + criteria: iteratee(value, key, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + } + + // An internal function used for aggregate "group by" operations. + function group(behavior, partition) { + return function(obj, iteratee, context) { + var result = partition ? [[], []] : {}; + iteratee = cb(iteratee, context); + each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + } + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + var groupBy = group(function(result, value, key) { + if (_has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + var indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + var countBy = group(function(result, value, key) { + if (_has(result, key)) result[key]++; else result[key] = 1; + }); + + var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; + // Safely create a real, live array from anything iterable. + function toArray(obj) { + if (!obj) return []; + if (isArray$1(obj)) return slice.call(obj); + if (isString(obj)) { + // Keep surrogate pair characters together + return obj.match(reStrSymbol); + } + if (isArrayLike$1(obj)) return map(obj, identity); + return values(obj); + } + + // Return the number of elements in an object. + function size(obj) { + if (obj == null) return 0; + return isArrayLike$1(obj) ? obj.length : keys$1(obj).length; + } + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + var partition = group(function(result, value, pass) { + result[pass ? 0 : 1].push(value); + }, true); + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. The **guard** check allows it to work with `map`. + function first(array, n, guard) { + if (array == null || array.length < 1) return n == null ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); + } + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + function initial(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + } + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + function last(array, n, guard) { + if (array == null || array.length < 1) return n == null ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); + } + + // Returns everything but the first entry of the array. Especially useful on + // the arguments object. Passing an **n** will return the rest N values in the + // array. + function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + } + + // Trim out all falsy values from an array. + function compact(array) { + return filter(array, Boolean); + } + + // Internal implementation of a recursive `flatten` function. + function _flatten(input, shallow, strict, output) { + output = output || []; + var idx = output.length; + for (var i = 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike$1(value) && (isArray$1(value) || isArguments$1(value))) { + // Flatten current level of array or arguments object. + if (shallow) { + var j = 0, len = value.length; + while (j < len) output[idx++] = value[j++]; + } else { + _flatten(value, shallow, strict, output); + idx = output.length; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + } + + // Flatten out an array, either recursively (by default), or just one level. + function flatten(array, shallow) { + return _flatten(array, shallow, false); + } + + // Return a version of the array that does not contain the specified value(s). + var without = restArguments(function(array, otherArrays) { + return difference$1(array, otherArrays); + }); + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // The faster algorithm will not work with an iteratee if the iteratee + // is not a one-to-one function, so providing an iteratee will disable + // the faster algorithm. + function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; + } + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + var union = restArguments(function(arrays) { + return uniq(_flatten(arrays, true, true)); + }); + + // Produce an array that contains every item shared between all the + // passed-in arrays. + function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + } + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + var difference$1 = restArguments(function(array, rest) { + rest = _flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); + }); + + // Complement of zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices. + function unzip(array) { + var length = array && max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; + } + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + var zip = restArguments(unzip); + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. Passing by pairs is the reverse of pairs. + function object(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + } + + // Generator function to create the findIndex and findLastIndex functions. + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test. + var findIndex = createPredicateIndexFinder(1); + var findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + function sortedIndex(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + } + + // Generator function to create the indexOf and lastIndexOf functions. + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), isNaN$1); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + var indexOf = createIndexFinder(1, findIndex, sortedIndex); + var lastIndexOf = createIndexFinder(-1, findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](https://docs.python.org/library/functions.html#range). + function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + } + + // Chunk a single array into multiple arrays, each containing `count` or fewer + // items. + function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; + } + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments. + function executeBound(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (isObject$1(result)) return result; + return self; + } + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + var bind = restArguments(function(func, context, args) { + if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); + var bound = restArguments(function(callArgs) { + return executeBound(func, bound, context, this, args.concat(callArgs)); + }); + return bound; + }); + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder by default, allowing any combination of arguments to be + // pre-filled. Set `partial.placeholder` for a custom placeholder argument. + var partial = restArguments(function(func, boundArgs) { + var placeholder = partial.placeholder; + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }); + + partial.placeholder = _; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + var bindAll = restArguments(function(obj, _keys) { + _keys = _flatten(_keys, false, false); + var index = _keys.length; + if (index < 1) throw new Error('bindAll must be passed function names'); + while (index--) { + var key = _keys[index]; + obj[key] = bind(obj[key], obj); + } + }); + + // Memoize an expensive function by storing its results. + function memoize(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + } + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + var delay = restArguments(function(func, wait, args) { + return setTimeout(function() { + return func.apply(null, args); + }, wait); + }); + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + var defer = partial(delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + function throttle(func, wait, options) { + var timeout, context, args, result; + var previous = 0; + if (!options) options = {}; + + var later = function() { + previous = options.leading === false ? 0 : now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function() { + var _now = now(); + if (!previous && options.leading === false) previous = _now; + var remaining = wait - (_now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = _now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function() { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; + } + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + function debounce(func, wait, immediate) { + var timeout, result; + + var later = function(context, args) { + timeout = null; + if (args) result = func.apply(context, args); + }; + + var debounced = restArguments(function(args) { + if (timeout) clearTimeout(timeout); + if (immediate) { + var callNow = !timeout; + timeout = setTimeout(later, wait); + if (callNow) result = func.apply(this, args); + } else { + timeout = delay(later, wait, this, args); + } + + return result; + }); + + debounced.cancel = function() { + clearTimeout(timeout); + timeout = null; + }; + + return debounced; + } + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + function wrap(func, wrapper) { + return partial(wrapper, func); + } + + // Returns a negated version of the passed-in predicate. + function negate(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + } + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + function compose() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + } + + // Returns a function that will only be executed on and after the Nth call. + function after(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + } + + // Returns a function that will only be executed up to (but not including) the Nth call. + function before(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + } + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + var once = partial(before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, _keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = isFunction$1(constructor) && constructor.prototype || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_has(obj, prop) && !contains(_keys, prop)) _keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !contains(_keys, prop)) { + _keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys`. + function keys$1(obj) { + if (!isObject$1(obj)) return []; + if (nativeKeys$1) return nativeKeys$1(obj); + var _keys = []; + for (var key in obj) if (_has(obj, key)) _keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, _keys); + return _keys; + } + + // Retrieve all the property names of an object. + function allKeys(obj) { + if (!isObject$1(obj)) return []; + var _keys = []; + for (var key in obj) _keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, _keys); + return _keys; + } + + // Retrieve the values of an object's properties. + function values(obj) { + var _keys = keys$1(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; + } + return values; + } + + // Returns the results of applying the iteratee to each element of the object. + // In contrast to map it returns an object. + function mapObject(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = keys$1(obj), + length = _keys.length, + results = {}; + for (var index = 0; index < length; index++) { + var currentKey = _keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Convert an object into a list of `[key, value]` pairs. + // The opposite of object. + function pairs(obj) { + var _keys = keys$1(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; + } + + // Invert the keys and values of an object. The values must be serializable. + function invert(obj) { + var result = {}; + var _keys = keys$1(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; + } + + // Return a sorted list of the function names available on the object. + function functions(obj) { + var names = []; + for (var key in obj) { + if (isFunction$1(obj[key])) names.push(key); + } + return names.sort(); + } + + // An internal function for creating assigner functions. + function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + _keys = keysFunc(source), + l = _keys.length; + for (var i = 0; i < l; i++) { + var key = _keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + } + + // Extend a given object with all the properties in passed-in object(s). + var extend = createAssigner(allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s). + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + var extendOwn = createAssigner(keys$1); + + // Returns the first key on an object that passes a predicate test. + function findKey(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = keys$1(obj), key; + for (var i = 0, length = _keys.length; i < length; i++) { + key = _keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + } + + // Internal pick helper function to determine if `obj` has key `key`. + function keyInObj(value, key, obj) { + return key in obj; + } + + // Return a copy of the object only containing the whitelisted properties. + var pick = restArguments(function(obj, _keys) { + var result = {}, iteratee = _keys[0]; + if (obj == null) return result; + if (isFunction$1(iteratee)) { + if (_keys.length > 1) iteratee = optimizeCb(iteratee, _keys[1]); + _keys = allKeys(obj); + } else { + iteratee = keyInObj; + _keys = _flatten(_keys, false, false); + obj = Object(obj); + } + for (var i = 0, length = _keys.length; i < length; i++) { + var key = _keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }); + + // Return a copy of the object without the blacklisted properties. + var omit = restArguments(function(obj, _keys) { + var iteratee = _keys[0], context; + if (isFunction$1(iteratee)) { + iteratee = negate(iteratee); + if (_keys.length > 1) context = _keys[1]; + } else { + _keys = map(_flatten(_keys, false, false), String); + iteratee = function(value, key) { + return !contains(_keys, key); + }; + } + return pick(obj, iteratee, context); + }); + + // Fill in a given object with default properties. + var defaults = createAssigner(allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; + } + + // Create a (shallow-cloned) duplicate of an object. + function clone(obj) { + if (!isObject$1(obj)) return obj; + return isArray$1(obj) ? obj.slice() : extend({}, obj); + } + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + function tap(obj, interceptor) { + interceptor(obj); + return obj; + } + + // Returns whether an object has a given set of `key:value` pairs. + function isMatch(object, attrs) { + var _keys = keys$1(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + } + + + // Internal recursive comparison function for `isEqual`. + function eq$1(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); + } + + // Internal recursive comparison function for `isEqual`. + function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && + isFunction$1(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq$1(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys$1(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys$1(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(_has(b, key) && eq$1(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + } + + // Perform a deep comparison to check if two objects are equal. + function isEqual$2(a, b) { + return eq$1(a, b); + } + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + function isEmpty(obj) { + if (obj == null) return true; + if (isArrayLike$1(obj) && (isArray$1(obj) || isString(obj) || isArguments$1(obj))) return obj.length === 0; + return keys$1(obj).length === 0; + } + + // Is a given value a DOM element? + function isElement(obj) { + return !!(obj && obj.nodeType === 1); + } + + // Internal function for creating a toString-based type tester. + function tagTester(name) { + return function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + } + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + var isArray$1 = nativeIsArray || tagTester('Array'); + + // Is a given variable an object? + function isObject$1(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + } + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. + var isArguments$1 = tagTester('Arguments'); + var isFunction$1 = tagTester('Function'); + var isString = tagTester('String'); + var isNumber = tagTester('Number'); + var isDate = tagTester('Date'); + var isRegExp = tagTester('RegExp'); + var isError = tagTester('Error'); + var isSymbol = tagTester('Symbol'); + var isMap = tagTester('Map'); + var isWeakMap = tagTester('WeakMap'); + var isSet = tagTester('Set'); + var isWeakSet = tagTester('WeakSet'); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + (function() { + if (!isArguments$1(arguments)) { + isArguments$1 = function(obj) { + return _has(obj, 'callee'); + }; + } + }()); + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). + var nodelist = root$1.document && root$1.document.childNodes; + if (typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction$1 = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + function isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !_isNaN(parseFloat(obj)); + } + + // Is the given value `NaN`? + function isNaN$1(obj) { + return isNumber(obj) && _isNaN(obj); + } + + // Is a given value a boolean? + function isBoolean(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + } + + // Is a given value equal to null? + function isNull(obj) { + return obj === null; + } + + // Is a given variable undefined? + function isUndefined(obj) { + return obj === void 0; + } + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + function has(obj, path) { + if (!isArray$1(path)) { + return _has(obj, path); + } + var length = path.length; + for (var i = 0; i < length; i++) { + var key = path[i]; + if (obj == null || !hasOwnProperty$a.call(obj, key)) { + return false; + } + obj = obj[key]; + } + return !!length; + } + + // Utility Functions + // ----------------- + + // Keep the identity function around for default iteratees. + function identity(value) { + return value; + } + + // Predicate-generating functions. Often useful outside of Underscore. + function constant(value) { + return function() { + return value; + }; + } + + function noop(){} + + // Creates a function that, when passed an object, will traverse that object’s + // properties down the given `path`, specified as an array of keys or indexes. + function property(path) { + if (!isArray$1(path)) { + return shallowProperty(path); + } + return function(obj) { + return deepGet(obj, path); + }; + } + + // Generates a function for a given object that returns a given property. + function propertyOf(obj) { + if (obj == null) { + return function(){}; + } + return function(path) { + return !isArray$1(path) ? obj[path] : deepGet(obj, path); + }; + } + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + function matcher(attrs) { + attrs = extendOwn({}, attrs); + return function(obj) { + return isMatch(obj, attrs); + }; + } + + // Run a function **n** times. + function times(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + } + + // Return a random integer between min and max (inclusive). + function random(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + } + + // A (possibly faster) way to get the current timestamp as an integer. + var now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + function createEscaper(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + keys$1(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + } + var escape = createEscaper(escapeMap); + var unescape = createEscaper(unescapeMap); + + // Traverses the children of `obj` along `path`. If a child is a function, it + // is invoked with its parent as context. Returns the value of the final + // child, or `fallback` if any child is undefined. + function result(obj, path, fallback) { + if (!isArray$1(path)) path = [path]; + var length = path.length; + if (!length) { + return isFunction$1(fallback) ? fallback.call(obj) : fallback; + } + for (var i = 0; i < length; i++) { + var prop = obj == null ? void 0 : obj[path[i]]; + if (prop === void 0) { + prop = fallback; + i = length; // Ensure we don't continue iterating. + } + obj = isFunction$1(prop) ? prop.call(obj) : prop; + } + return obj; + } + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + function uniqueId(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + } + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + var templateSettings = _.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + function template(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escapeRegExp, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offset. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + var render; + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + } + + // Add a "chain" function. Start chaining a wrapped Underscore object. + function chain(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + } + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + } + + // Add your own custom functions to the Underscore object. + function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; + } + + // Add all mutator Array functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return chainResult(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return chainResult(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return String(this._wrapped); + }; + + var allExports = /*#__PURE__*/Object.freeze({ + 'default': _, + VERSION: VERSION, + iteratee: iteratee, + restArguments: restArguments, + each: each, + forEach: each, + map: map, + collect: map, + reduce: reduce, + foldl: reduce, + inject: reduce, + reduceRight: reduceRight, + foldr: reduceRight, + find: find, + detect: find, + filter: filter, + select: filter, + reject: reject$1, + every: every, + all: every, + some: some, + any: some, + contains: contains, + includes: contains, + include: contains, + invoke: invoke, + pluck: pluck, + where: where, + findWhere: findWhere, + max: max, + min: min, + shuffle: shuffle, + sample: sample, + sortBy: sortBy, + groupBy: groupBy, + indexBy: indexBy, + countBy: countBy, + toArray: toArray, + size: size, + partition: partition, + first: first, + head: first, + take: first, + initial: initial, + last: last, + rest: rest, + tail: rest, + drop: rest, + compact: compact, + flatten: flatten, + without: without, + uniq: uniq, + unique: uniq, + union: union, + intersection: intersection, + difference: difference$1, + unzip: unzip, + zip: zip, + object: object, + findIndex: findIndex, + findLastIndex: findLastIndex, + sortedIndex: sortedIndex, + indexOf: indexOf, + lastIndexOf: lastIndexOf, + range: range, + chunk: chunk, + bind: bind, + partial: partial, + bindAll: bindAll, + memoize: memoize, + delay: delay, + defer: defer, + throttle: throttle, + debounce: debounce, + wrap: wrap, + negate: negate, + compose: compose, + after: after, + before: before, + once: once, + keys: keys$1, + allKeys: allKeys, + values: values, + mapObject: mapObject, + pairs: pairs, + invert: invert, + functions: functions, + methods: functions, + extend: extend, + extendOwn: extendOwn, + assign: extendOwn, + findKey: findKey, + pick: pick, + omit: omit, + defaults: defaults, + create: create, + clone: clone, + tap: tap, + isMatch: isMatch, + isEqual: isEqual$2, + isEmpty: isEmpty, + isElement: isElement, + isArray: isArray$1, + isObject: isObject$1, + get isArguments () { return isArguments$1; }, + get isFunction () { return isFunction$1; }, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isRegExp: isRegExp, + isError: isError, + isSymbol: isSymbol, + isMap: isMap, + isWeakMap: isWeakMap, + isSet: isSet, + isWeakSet: isWeakSet, + isFinite: isFinite, + isNaN: isNaN$1, + isBoolean: isBoolean, + isNull: isNull, + isUndefined: isUndefined, + has: has, + identity: identity, + constant: constant, + noop: noop, + property: property, + propertyOf: propertyOf, + matcher: matcher, + matches: matcher, + times: times, + random: random, + now: now, + escape: escape, + unescape: unescape, + result: result, + uniqueId: uniqueId, + templateSettings: templateSettings, + template: template, + chain: chain, + mixin: mixin + }); + + // Add all of the Underscore functions to the wrapper object. + var _$1 = mixin(allExports); + // Legacy Node.js API + _$1._ = _$1; + + // Backbone.js 1.2.3 + + // (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + // Backbone may be freely distributed under the MIT license. + // For all details and documentation: + // http://backbonejs.org + + (function(factory) { + + // Establish the root object, `window` (`self`) in the browser, or `global` on the server. + // We use `self` instead of `window` for `WebWorker` support. + var root = (typeof self == 'object' && self.self == self && self) || + (typeof global == 'object' && global.global == global && global); + + // Set up Backbone appropriately for the environment. Start with AMD. + { + var _ = _$1, $; + try { $ = $$1; } catch(e) {} + factory(root, exports, _, $); + + // Finally, as a browser global. + } + + }(function(root, Backbone, _, $) { + + // Initial Setup + // ------------- + + // Save the previous value of the `Backbone` variable, so that it can be + // restored later on, if `noConflict` is used. + var previousBackbone = root.Backbone; + + // Create a local reference to a common array method we'll want to use later. + var slice = Array.prototype.slice; + + // Current version of the library. Keep in sync with `package.json`. + Backbone.VERSION = '1.2.3'; + + // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns + // the `$` variable. + Backbone.$ = $; + + // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable + // to its previous owner. Returns a reference to this Backbone object. + Backbone.noConflict = function() { + root.Backbone = previousBackbone; + return this; + }; + + // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option + // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and + // set a `X-Http-Method-Override` header. + Backbone.emulateHTTP = false; + + // Turn on `emulateJSON` to support legacy servers that can't deal with direct + // `application/json` requests ... this will encode the body as + // `application/x-www-form-urlencoded` instead and will send the model in a + // form param named `model`. + Backbone.emulateJSON = false; + + // Proxy Backbone class methods to Underscore functions, wrapping the model's + // `attributes` object or collection's `models` array behind the scenes. + // + // collection.filter(function(model) { return model.get('age') > 10 }); + // collection.each(this.addView); + // + // `Function#apply` can be slow so we use the method's arg count, if we know it. + var addMethod = function(length, method, attribute) { + switch (length) { + case 1: return function() { + return _[method](this[attribute]); + }; + case 2: return function(value) { + return _[method](this[attribute], value); + }; + case 3: return function(iteratee, context) { + return _[method](this[attribute], cb(iteratee, this), context); + }; + case 4: return function(iteratee, defaultVal, context) { + return _[method](this[attribute], cb(iteratee, this), defaultVal, context); + }; + default: return function() { + var args = slice.call(arguments); + args.unshift(this[attribute]); + return _[method].apply(_, args); + }; + } + }; + var addUnderscoreMethods = function(Class, methods, attribute) { + _.each(methods, function(length, method) { + if (_[method]) Class.prototype[method] = addMethod(length, method, attribute); + }); + }; + + // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`. + var cb = function(iteratee, instance) { + if (_.isFunction(iteratee)) return iteratee; + if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee); + if (_.isString(iteratee)) return function(model) { return model.get(iteratee); }; + return iteratee; + }; + var modelMatcher = function(attrs) { + var matcher = _.matches(attrs); + return function(model) { + return matcher(model.attributes); + }; + }; + + // Backbone.Events + // --------------- + + // A module that can be mixed in to *any object* in order to provide it with + // a custom event channel. You may bind a callback to an event with `on` or + // remove with `off`; `trigger`-ing an event fires all callbacks in + // succession. + // + // var object = {}; + // _.extend(object, Backbone.Events); + // object.on('expand', function(){ alert('expanded'); }); + // object.trigger('expand'); + // + var Events = Backbone.Events = {}; + + // Regular expression used to split event strings. + var eventSplitter = /\s+/; + + // Iterates over the standard `event, callback` (as well as the fancy multiple + // space-separated events `"change blur", callback` and jQuery-style event + // maps `{event: callback}`). + var eventsApi = function(iteratee, events, name, callback, opts) { + var i = 0, names; + if (name && typeof name === 'object') { + // Handle event maps. + if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback; + for (names = _.keys(name); i < names.length ; i++) { + events = eventsApi(iteratee, events, names[i], name[names[i]], opts); + } + } else if (name && eventSplitter.test(name)) { + // Handle space separated event names by delegating them individually. + for (names = name.split(eventSplitter); i < names.length; i++) { + events = iteratee(events, names[i], callback, opts); + } + } else { + // Finally, standard events. + events = iteratee(events, name, callback, opts); + } + return events; + }; + + // Bind an event to a `callback` function. Passing `"all"` will bind + // the callback to all events fired. + Events.on = function(name, callback, context) { + return internalOn(this, name, callback, context); + }; + + // Guard the `listening` argument from the public API. + var internalOn = function(obj, name, callback, context, listening) { + obj._events = eventsApi(onApi, obj._events || {}, name, callback, { + context: context, + ctx: obj, + listening: listening + }); + + if (listening) { + var listeners = obj._listeners || (obj._listeners = {}); + listeners[listening.id] = listening; + } + + return obj; + }; + + // Inversion-of-control versions of `on`. Tell *this* object to listen to + // an event in another object... keeping track of what it's listening to + // for easier unbinding later. + Events.listenTo = function(obj, name, callback) { + if (!obj) return this; + var id = obj._listenId || (obj._listenId = _.uniqueId('l')); + var listeningTo = this._listeningTo || (this._listeningTo = {}); + var listening = listeningTo[id]; + + // This object is not listening to any other events on `obj` yet. + // Setup the necessary references to track the listening callbacks. + if (!listening) { + var thisId = this._listenId || (this._listenId = _.uniqueId('l')); + listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0}; + } + + // Bind callbacks on obj, and keep track of them on listening. + internalOn(obj, name, callback, this, listening); + return this; + }; + + // The reducing API that adds a callback to the `events` object. + var onApi = function(events, name, callback, options) { + if (callback) { + var handlers = events[name] || (events[name] = []); + var context = options.context, ctx = options.ctx, listening = options.listening; + if (listening) listening.count++; + + handlers.push({ callback: callback, context: context, ctx: context || ctx, listening: listening }); + } + return events; + }; + + // Remove one or many callbacks. If `context` is null, removes all + // callbacks with that function. If `callback` is null, removes all + // callbacks for the event. If `name` is null, removes all bound + // callbacks for all events. + Events.off = function(name, callback, context) { + if (!this._events) return this; + this._events = eventsApi(offApi, this._events, name, callback, { + context: context, + listeners: this._listeners + }); + return this; + }; + + // Tell this object to stop listening to either specific events ... or + // to every object it's currently listening to. + Events.stopListening = function(obj, name, callback) { + var listeningTo = this._listeningTo; + if (!listeningTo) return this; + + var ids = obj ? [obj._listenId] : _.keys(listeningTo); + + for (var i = 0; i < ids.length; i++) { + var listening = listeningTo[ids[i]]; + + // If listening doesn't exist, this object is not currently + // listening to obj. Break out early. + if (!listening) break; + + listening.obj.off(name, callback, this); + } + if (_.isEmpty(listeningTo)) this._listeningTo = void 0; + + return this; + }; + + // The reducing API that removes a callback from the `events` object. + var offApi = function(events, name, callback, options) { + if (!events) return; + + var i = 0, listening; + var context = options.context, listeners = options.listeners; + + // Delete all events listeners and "drop" events. + if (!name && !callback && !context) { + var ids = _.keys(listeners); + for (; i < ids.length; i++) { + listening = listeners[ids[i]]; + delete listeners[listening.id]; + delete listening.listeningTo[listening.objId]; + } + return; + } + + var names = name ? [name] : _.keys(events); + for (; i < names.length; i++) { + name = names[i]; + var handlers = events[name]; + + // Bail out if there are no events stored. + if (!handlers) break; + + // Replace events if there are any remaining. Otherwise, clean up. + var remaining = []; + for (var j = 0; j < handlers.length; j++) { + var handler = handlers[j]; + if ( + callback && callback !== handler.callback && + callback !== handler.callback._callback || + context && context !== handler.context + ) { + remaining.push(handler); + } else { + listening = handler.listening; + if (listening && --listening.count === 0) { + delete listeners[listening.id]; + delete listening.listeningTo[listening.objId]; + } + } + } + + // Update tail event if the list has any events. Otherwise, clean up. + if (remaining.length) { + events[name] = remaining; + } else { + delete events[name]; + } + } + if (_.size(events)) return events; + }; + + // Bind an event to only be triggered a single time. After the first time + // the callback is invoked, its listener will be removed. If multiple events + // are passed in using the space-separated syntax, the handler will fire + // once for each event, not once for a combination of all events. + Events.once = function(name, callback, context) { + // Map the event into a `{event: once}` object. + var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this)); + return this.on(events, void 0, context); + }; + + // Inversion-of-control versions of `once`. + Events.listenToOnce = function(obj, name, callback) { + // Map the event into a `{event: once}` object. + var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj)); + return this.listenTo(obj, events); + }; + + // Reduces the event callbacks into a map of `{event: onceWrapper}`. + // `offer` unbinds the `onceWrapper` after it has been called. + var onceMap = function(map, name, callback, offer) { + if (callback) { + var once = map[name] = _.once(function() { + offer(name, once); + callback.apply(this, arguments); + }); + once._callback = callback; + } + return map; + }; + + // Trigger one or many events, firing all bound callbacks. Callbacks are + // passed the same arguments as `trigger` is, apart from the event name + // (unless you're listening on `"all"`, which will cause your callback to + // receive the true name of the event as the first argument). + Events.trigger = function(name) { + if (!this._events) return this; + + var length = Math.max(0, arguments.length - 1); + var args = Array(length); + for (var i = 0; i < length; i++) args[i] = arguments[i + 1]; + + eventsApi(triggerApi, this._events, name, void 0, args); + return this; + }; + + // Handles triggering the appropriate event callbacks. + var triggerApi = function(objEvents, name, cb, args) { + if (objEvents) { + var events = objEvents[name]; + var allEvents = objEvents.all; + if (events && allEvents) allEvents = allEvents.slice(); + if (events) triggerEvents(events, args); + if (allEvents) triggerEvents(allEvents, [name].concat(args)); + } + return objEvents; + }; + + // A difficult-to-believe, but optimized internal dispatch function for + // triggering events. Tries to keep the usual cases speedy (most internal + // Backbone events have 3 arguments). + var triggerEvents = function(events, args) { + var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; + switch (args.length) { + case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return; + case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return; + case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return; + case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return; + default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return; + } + }; + + // Aliases for backwards compatibility. + Events.bind = Events.on; + Events.unbind = Events.off; + + // Allow the `Backbone` object to serve as a global event bus, for folks who + // want global "pubsub" in a convenient place. + _.extend(Backbone, Events); + + // Backbone.Model + // -------------- + + // Backbone **Models** are the basic data object in the framework -- + // frequently representing a row in a table in a database on your server. + // A discrete chunk of data and a bunch of useful, related methods for + // performing computations and transformations on that data. + + // Create a new model with the specified attributes. A client id (`cid`) + // is automatically generated and assigned for you. + var Model = Backbone.Model = function(attributes, options) { + var attrs = attributes || {}; + options || (options = {}); + this.cid = _.uniqueId(this.cidPrefix); + this.attributes = {}; + if (options.collection) this.collection = options.collection; + if (options.parse) attrs = this.parse(attrs, options) || {}; + attrs = _.defaults({}, attrs, _.result(this, 'defaults')); + this.set(attrs, options); + this.changed = {}; + this.initialize.apply(this, arguments); + }; + + // Attach all inheritable methods to the Model prototype. + _.extend(Model.prototype, Events, { + + // A hash of attributes whose current and previous value differ. + changed: null, + + // The value returned during the last failed validation. + validationError: null, + + // The default name for the JSON `id` attribute is `"id"`. MongoDB and + // CouchDB users may want to set this to `"_id"`. + idAttribute: 'id', + + // The prefix is used to create the client id which is used to identify models locally. + // You may want to override this if you're experiencing name clashes with model ids. + cidPrefix: 'c', + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // Return a copy of the model's `attributes` object. + toJSON: function(options) { + return _.clone(this.attributes); + }, + + // Proxy `Backbone.sync` by default -- but override this if you need + // custom syncing semantics for *this* particular model. + sync: function() { + return Backbone.sync.apply(this, arguments); + }, + + // Get the value of an attribute. + get: function(attr) { + return this.attributes[attr]; + }, + + // Get the HTML-escaped value of an attribute. + escape: function(attr) { + return _.escape(this.get(attr)); + }, + + // Returns `true` if the attribute contains a value that is not null + // or undefined. + has: function(attr) { + return this.get(attr) != null; + }, + + // Special-cased proxy to underscore's `_.matches` method. + matches: function(attrs) { + return !!_.iteratee(attrs, this)(this.attributes); + }, + + // Set a hash of model attributes on the object, firing `"change"`. This is + // the core primitive operation of a model, updating the data and notifying + // anyone who needs to know about the change in state. The heart of the beast. + set: function(key, val, options) { + if (key == null) return this; + + // Handle both `"key", value` and `{key: value}` -style arguments. + var attrs; + if (typeof key === 'object') { + attrs = key; + options = val; + } else { + (attrs = {})[key] = val; + } + + options || (options = {}); + + // Run validation. + if (!this._validate(attrs, options)) return false; + + // Extract attributes and options. + var unset = options.unset; + var silent = options.silent; + var changes = []; + var changing = this._changing; + this._changing = true; + + if (!changing) { + this._previousAttributes = _.clone(this.attributes); + this.changed = {}; + } + + var current = this.attributes; + var changed = this.changed; + var prev = this._previousAttributes; + + // For each `set` attribute, update or delete the current value. + for (var attr in attrs) { + val = attrs[attr]; + if (!_.isEqual(current[attr], val)) changes.push(attr); + if (!_.isEqual(prev[attr], val)) { + changed[attr] = val; + } else { + delete changed[attr]; + } + unset ? delete current[attr] : current[attr] = val; + } + + // Update the `id`. + this.id = this.get(this.idAttribute); + + // Trigger all relevant attribute changes. + if (!silent) { + if (changes.length) this._pending = options; + for (var i = 0; i < changes.length; i++) { + this.trigger('change:' + changes[i], this, current[changes[i]], options); + } + } + + // You might be wondering why there's a `while` loop here. Changes can + // be recursively nested within `"change"` events. + if (changing) return this; + if (!silent) { + while (this._pending) { + options = this._pending; + this._pending = false; + this.trigger('change', this, options); + } + } + this._pending = false; + this._changing = false; + return this; + }, + + // Remove an attribute from the model, firing `"change"`. `unset` is a noop + // if the attribute doesn't exist. + unset: function(attr, options) { + return this.set(attr, void 0, _.extend({}, options, {unset: true})); + }, + + // Clear all attributes on the model, firing `"change"`. + clear: function(options) { + var attrs = {}; + for (var key in this.attributes) attrs[key] = void 0; + return this.set(attrs, _.extend({}, options, {unset: true})); + }, + + // Determine if the model has changed since the last `"change"` event. + // If you specify an attribute name, determine if that attribute has changed. + hasChanged: function(attr) { + if (attr == null) return !_.isEmpty(this.changed); + return _.has(this.changed, attr); + }, + + // Return an object containing all the attributes that have changed, or + // false if there are no changed attributes. Useful for determining what + // parts of a view need to be updated and/or what attributes need to be + // persisted to the server. Unset attributes will be set to undefined. + // You can also pass an attributes object to diff against the model, + // determining if there *would be* a change. + changedAttributes: function(diff) { + if (!diff) return this.hasChanged() ? _.clone(this.changed) : false; + var old = this._changing ? this._previousAttributes : this.attributes; + var changed = {}; + for (var attr in diff) { + var val = diff[attr]; + if (_.isEqual(old[attr], val)) continue; + changed[attr] = val; + } + return _.size(changed) ? changed : false; + }, + + // Get the previous value of an attribute, recorded at the time the last + // `"change"` event was fired. + previous: function(attr) { + if (attr == null || !this._previousAttributes) return null; + return this._previousAttributes[attr]; + }, + + // Get all of the attributes of the model at the time of the previous + // `"change"` event. + previousAttributes: function() { + return _.clone(this._previousAttributes); + }, + + // Fetch the model from the server, merging the response with the model's + // local attributes. Any changed attributes will trigger a "change" event. + fetch: function(options) { + options = _.extend({parse: true}, options); + var model = this; + var success = options.success; + options.success = function(resp) { + var serverAttrs = options.parse ? model.parse(resp, options) : resp; + if (!model.set(serverAttrs, options)) return false; + if (success) success.call(options.context, model, resp, options); + model.trigger('sync', model, resp, options); + }; + wrapError(this, options); + return this.sync('read', this, options); + }, + + // Set a hash of model attributes, and sync the model to the server. + // If the server returns an attributes hash that differs, the model's + // state will be `set` again. + save: function(key, val, options) { + // Handle both `"key", value` and `{key: value}` -style arguments. + var attrs; + if (key == null || typeof key === 'object') { + attrs = key; + options = val; + } else { + (attrs = {})[key] = val; + } + + options = _.extend({validate: true, parse: true}, options); + var wait = options.wait; + + // If we're not waiting and attributes exist, save acts as + // `set(attr).save(null, opts)` with validation. Otherwise, check if + // the model will be valid when the attributes, if any, are set. + if (attrs && !wait) { + if (!this.set(attrs, options)) return false; + } else { + if (!this._validate(attrs, options)) return false; + } + + // After a successful server-side save, the client is (optionally) + // updated with the server-side state. + var model = this; + var success = options.success; + var attributes = this.attributes; + options.success = function(resp) { + // Ensure attributes are restored during synchronous saves. + model.attributes = attributes; + var serverAttrs = options.parse ? model.parse(resp, options) : resp; + if (wait) serverAttrs = _.extend({}, attrs, serverAttrs); + if (serverAttrs && !model.set(serverAttrs, options)) return false; + if (success) success.call(options.context, model, resp, options); + model.trigger('sync', model, resp, options); + }; + wrapError(this, options); + + // Set temporary attributes if `{wait: true}` to properly find new ids. + if (attrs && wait) this.attributes = _.extend({}, attributes, attrs); + + var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update'); + if (method === 'patch' && !options.attrs) options.attrs = attrs; + var xhr = this.sync(method, this, options); + + // Restore attributes. + this.attributes = attributes; + + return xhr; + }, + + // Destroy this model on the server if it was already persisted. + // Optimistically removes the model from its collection, if it has one. + // If `wait: true` is passed, waits for the server to respond before removal. + destroy: function(options) { + options = options ? _.clone(options) : {}; + var model = this; + var success = options.success; + var wait = options.wait; + + var destroy = function() { + model.stopListening(); + model.trigger('destroy', model, model.collection, options); + }; + + options.success = function(resp) { + if (wait) destroy(); + if (success) success.call(options.context, model, resp, options); + if (!model.isNew()) model.trigger('sync', model, resp, options); + }; + + var xhr = false; + if (this.isNew()) { + _.defer(options.success); + } else { + wrapError(this, options); + xhr = this.sync('delete', this, options); + } + if (!wait) destroy(); + return xhr; + }, + + // Default URL for the model's representation on the server -- if you're + // using Backbone's restful methods, override this to change the endpoint + // that will be called. + url: function() { + var base = + _.result(this, 'urlRoot') || + _.result(this.collection, 'url') || + urlError(); + if (this.isNew()) return base; + var id = this.get(this.idAttribute); + return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id); + }, + + // **parse** converts a response into the hash of attributes to be `set` on + // the model. The default implementation is just to pass the response along. + parse: function(resp, options) { + return resp; + }, + + // Create a new model with identical attributes to this one. + clone: function() { + return new this.constructor(this.attributes); + }, + + // A model is new if it has never been saved to the server, and lacks an id. + isNew: function() { + return !this.has(this.idAttribute); + }, + + // Check if the model is currently in a valid state. + isValid: function(options) { + return this._validate({}, _.defaults({validate: true}, options)); + }, + + // Run validation against the next complete set of model attributes, + // returning `true` if all is well. Otherwise, fire an `"invalid"` event. + _validate: function(attrs, options) { + if (!options.validate || !this.validate) return true; + attrs = _.extend({}, this.attributes, attrs); + var error = this.validationError = this.validate(attrs, options) || null; + if (!error) return true; + this.trigger('invalid', this, error, _.extend(options, {validationError: error})); + return false; + } + + }); + + // Underscore methods that we want to implement on the Model, mapped to the + // number of arguments they take. + var modelMethods = { keys: 1, values: 1, pairs: 1, invert: 1, pick: 0, + omit: 0, chain: 1, isEmpty: 1 }; + + // Mix in each Underscore method as a proxy to `Model#attributes`. + addUnderscoreMethods(Model, modelMethods, 'attributes'); + + // Backbone.Collection + // ------------------- + + // If models tend to represent a single row of data, a Backbone Collection is + // more analogous to a table full of data ... or a small slice or page of that + // table, or a collection of rows that belong together for a particular reason + // -- all of the messages in this particular folder, all of the documents + // belonging to this particular author, and so on. Collections maintain + // indexes of their models, both in order, and for lookup by `id`. + + // Create a new **Collection**, perhaps to contain a specific type of `model`. + // If a `comparator` is specified, the Collection will maintain + // its models in sort order, as they're added and removed. + var Collection = Backbone.Collection = function(models, options) { + options || (options = {}); + if (options.model) this.model = options.model; + if (options.comparator !== void 0) this.comparator = options.comparator; + this._reset(); + this.initialize.apply(this, arguments); + if (models) this.reset(models, _.extend({silent: true}, options)); + }; + + // Default options for `Collection#set`. + var setOptions = {add: true, remove: true, merge: true}; + var addOptions = {add: true, remove: false}; + + // Splices `insert` into `array` at index `at`. + var splice = function(array, insert, at) { + at = Math.min(Math.max(at, 0), array.length); + var tail = Array(array.length - at); + var length = insert.length; + for (var i = 0; i < tail.length; i++) tail[i] = array[i + at]; + for (i = 0; i < length; i++) array[i + at] = insert[i]; + for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i]; + }; + + // Define the Collection's inheritable methods. + _.extend(Collection.prototype, Events, { + + // The default model for a collection is just a **Backbone.Model**. + // This should be overridden in most cases. + model: Model, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // The JSON representation of a Collection is an array of the + // models' attributes. + toJSON: function(options) { + return this.map(function(model) { return model.toJSON(options); }); + }, + + // Proxy `Backbone.sync` by default. + sync: function() { + return Backbone.sync.apply(this, arguments); + }, + + // Add a model, or list of models to the set. `models` may be Backbone + // Models or raw JavaScript objects to be converted to Models, or any + // combination of the two. + add: function(models, options) { + return this.set(models, _.extend({merge: false}, options, addOptions)); + }, + + // Remove a model, or a list of models from the set. + remove: function(models, options) { + options = _.extend({}, options); + var singular = !_.isArray(models); + models = singular ? [models] : _.clone(models); + var removed = this._removeModels(models, options); + if (!options.silent && removed) this.trigger('update', this, options); + return singular ? removed[0] : removed; + }, + + // Update a collection by `set`-ing a new list of models, adding new ones, + // removing models that are no longer present, and merging models that + // already exist in the collection, as necessary. Similar to **Model#set**, + // the core operation for updating the data contained by the collection. + set: function(models, options) { + if (models == null) return; + + options = _.defaults({}, options, setOptions); + if (options.parse && !this._isModel(models)) models = this.parse(models, options); + + var singular = !_.isArray(models); + models = singular ? [models] : models.slice(); + + var at = options.at; + if (at != null) at = +at; + if (at < 0) at += this.length + 1; + + var set = []; + var toAdd = []; + var toRemove = []; + var modelMap = {}; + + var add = options.add; + var merge = options.merge; + var remove = options.remove; + + var sort = false; + var sortable = this.comparator && (at == null) && options.sort !== false; + var sortAttr = _.isString(this.comparator) ? this.comparator : null; + + // Turn bare objects into model references, and prevent invalid models + // from being added. + var model; + for (var i = 0; i < models.length; i++) { + model = models[i]; + + // If a duplicate is found, prevent it from being added and + // optionally merge it into the existing model. + var existing = this.get(model); + if (existing) { + if (merge && model !== existing) { + var attrs = this._isModel(model) ? model.attributes : model; + if (options.parse) attrs = existing.parse(attrs, options); + existing.set(attrs, options); + if (sortable && !sort) sort = existing.hasChanged(sortAttr); + } + if (!modelMap[existing.cid]) { + modelMap[existing.cid] = true; + set.push(existing); + } + models[i] = existing; + + // If this is a new, valid model, push it to the `toAdd` list. + } else if (add) { + model = models[i] = this._prepareModel(model, options); + if (model) { + toAdd.push(model); + this._addReference(model, options); + modelMap[model.cid] = true; + set.push(model); + } + } + } + + // Remove stale models. + if (remove) { + for (i = 0; i < this.length; i++) { + model = this.models[i]; + if (!modelMap[model.cid]) toRemove.push(model); + } + if (toRemove.length) this._removeModels(toRemove, options); + } + + // See if sorting is needed, update `length` and splice in new models. + var orderChanged = false; + var replace = !sortable && add && remove; + if (set.length && replace) { + orderChanged = this.length != set.length || _.some(this.models, function(model, index) { + return model !== set[index]; + }); + this.models.length = 0; + splice(this.models, set, 0); + this.length = this.models.length; + } else if (toAdd.length) { + if (sortable) sort = true; + splice(this.models, toAdd, at == null ? this.length : at); + this.length = this.models.length; + } + + // Silently sort the collection if appropriate. + if (sort) this.sort({silent: true}); + + // Unless silenced, it's time to fire all appropriate add/sort events. + if (!options.silent) { + for (i = 0; i < toAdd.length; i++) { + if (at != null) options.index = at + i; + model = toAdd[i]; + model.trigger('add', model, this, options); + } + if (sort || orderChanged) this.trigger('sort', this, options); + if (toAdd.length || toRemove.length) this.trigger('update', this, options); + } + + // Return the added (or merged) model (or models). + return singular ? models[0] : models; + }, + + // When you have more items than you want to add or remove individually, + // you can reset the entire set with a new list of models, without firing + // any granular `add` or `remove` events. Fires `reset` when finished. + // Useful for bulk operations and optimizations. + reset: function(models, options) { + options = options ? _.clone(options) : {}; + for (var i = 0; i < this.models.length; i++) { + this._removeReference(this.models[i], options); + } + options.previousModels = this.models; + this._reset(); + models = this.add(models, _.extend({silent: true}, options)); + if (!options.silent) this.trigger('reset', this, options); + return models; + }, + + // Add a model to the end of the collection. + push: function(model, options) { + return this.add(model, _.extend({at: this.length}, options)); + }, + + // Remove a model from the end of the collection. + pop: function(options) { + var model = this.at(this.length - 1); + return this.remove(model, options); + }, + + // Add a model to the beginning of the collection. + unshift: function(model, options) { + return this.add(model, _.extend({at: 0}, options)); + }, + + // Remove a model from the beginning of the collection. + shift: function(options) { + var model = this.at(0); + return this.remove(model, options); + }, + + // Slice out a sub-array of models from the collection. + slice: function() { + return slice.apply(this.models, arguments); + }, + + // Get a model from the set by id. + get: function(obj) { + if (obj == null) return void 0; + var id = this.modelId(this._isModel(obj) ? obj.attributes : obj); + return this._byId[obj] || this._byId[id] || this._byId[obj.cid]; + }, + + // Get the model at the given index. + at: function(index) { + if (index < 0) index += this.length; + return this.models[index]; + }, + + // Return models with matching attributes. Useful for simple cases of + // `filter`. + where: function(attrs, first) { + return this[first ? 'find' : 'filter'](attrs); + }, + + // Return the first model with matching attributes. Useful for simple cases + // of `find`. + findWhere: function(attrs) { + return this.where(attrs, true); + }, + + // Force the collection to re-sort itself. You don't need to call this under + // normal circumstances, as the set will maintain sort order as each item + // is added. + sort: function(options) { + var comparator = this.comparator; + if (!comparator) throw new Error('Cannot sort a set without a comparator'); + options || (options = {}); + + var length = comparator.length; + if (_.isFunction(comparator)) comparator = _.bind(comparator, this); + + // Run sort based on type of `comparator`. + if (length === 1 || _.isString(comparator)) { + this.models = this.sortBy(comparator); + } else { + this.models.sort(comparator); + } + if (!options.silent) this.trigger('sort', this, options); + return this; + }, + + // Pluck an attribute from each model in the collection. + pluck: function(attr) { + return _.invoke(this.models, 'get', attr); + }, + + // Fetch the default set of models for this collection, resetting the + // collection when they arrive. If `reset: true` is passed, the response + // data will be passed through the `reset` method instead of `set`. + fetch: function(options) { + options = _.extend({parse: true}, options); + var success = options.success; + var collection = this; + options.success = function(resp) { + var method = options.reset ? 'reset' : 'set'; + collection[method](resp, options); + if (success) success.call(options.context, collection, resp, options); + collection.trigger('sync', collection, resp, options); + }; + wrapError(this, options); + return this.sync('read', this, options); + }, + + // Create a new instance of a model in this collection. Add the model to the + // collection immediately, unless `wait: true` is passed, in which case we + // wait for the server to agree. + create: function(model, options) { + options = options ? _.clone(options) : {}; + var wait = options.wait; + model = this._prepareModel(model, options); + if (!model) return false; + if (!wait) this.add(model, options); + var collection = this; + var success = options.success; + options.success = function(model, resp, callbackOpts) { + if (wait) collection.add(model, callbackOpts); + if (success) success.call(callbackOpts.context, model, resp, callbackOpts); + }; + model.save(null, options); + return model; + }, + + // **parse** converts a response into a list of models to be added to the + // collection. The default implementation is just to pass it through. + parse: function(resp, options) { + return resp; + }, + + // Create a new collection with an identical list of models as this one. + clone: function() { + return new this.constructor(this.models, { + model: this.model, + comparator: this.comparator + }); + }, + + // Define how to uniquely identify models in the collection. + modelId: function (attrs) { + return attrs[this.model.prototype.idAttribute || 'id']; + }, + + // Private method to reset all internal state. Called when the collection + // is first initialized or reset. + _reset: function() { + this.length = 0; + this.models = []; + this._byId = {}; + }, + + // Prepare a hash of attributes (or other model) to be added to this + // collection. + _prepareModel: function(attrs, options) { + if (this._isModel(attrs)) { + if (!attrs.collection) attrs.collection = this; + return attrs; + } + options = options ? _.clone(options) : {}; + options.collection = this; + var model = new this.model(attrs, options); + if (!model.validationError) return model; + this.trigger('invalid', this, model.validationError, options); + return false; + }, + + // Internal method called by both remove and set. + _removeModels: function(models, options) { + var removed = []; + for (var i = 0; i < models.length; i++) { + var model = this.get(models[i]); + if (!model) continue; + + var index = this.indexOf(model); + this.models.splice(index, 1); + this.length--; + + if (!options.silent) { + options.index = index; + model.trigger('remove', model, this, options); + } + + removed.push(model); + this._removeReference(model, options); + } + return removed.length ? removed : false; + }, + + // Method for checking whether an object should be considered a model for + // the purposes of adding to the collection. + _isModel: function (model) { + return model instanceof Model; + }, + + // Internal method to create a model's ties to a collection. + _addReference: function(model, options) { + this._byId[model.cid] = model; + var id = this.modelId(model.attributes); + if (id != null) this._byId[id] = model; + model.on('all', this._onModelEvent, this); + }, + + // Internal method to sever a model's ties to a collection. + _removeReference: function(model, options) { + delete this._byId[model.cid]; + var id = this.modelId(model.attributes); + if (id != null) delete this._byId[id]; + if (this === model.collection) delete model.collection; + model.off('all', this._onModelEvent, this); + }, + + // Internal method called every time a model in the set fires an event. + // Sets need to update their indexes when models change ids. All other + // events simply proxy through. "add" and "remove" events that originate + // in other collections are ignored. + _onModelEvent: function(event, model, collection, options) { + if ((event === 'add' || event === 'remove') && collection !== this) return; + if (event === 'destroy') this.remove(model, options); + if (event === 'change') { + var prevId = this.modelId(model.previousAttributes()); + var id = this.modelId(model.attributes); + if (prevId !== id) { + if (prevId != null) delete this._byId[prevId]; + if (id != null) this._byId[id] = model; + } + } + this.trigger.apply(this, arguments); + } + + }); + + // Underscore methods that we want to implement on the Collection. + // 90% of the core usefulness of Backbone Collections is actually implemented + // right here: + var collectionMethods = { forEach: 3, each: 3, map: 3, collect: 3, reduce: 4, + foldl: 4, inject: 4, reduceRight: 4, foldr: 4, find: 3, detect: 3, filter: 3, + select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3, + contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3, + head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3, + without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3, + isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3, + sortBy: 3, indexBy: 3}; + + // Mix in each Underscore method as a proxy to `Collection#models`. + addUnderscoreMethods(Collection, collectionMethods, 'models'); + + // Backbone.View + // ------------- + + // Backbone Views are almost more convention than they are actual code. A View + // is simply a JavaScript object that represents a logical chunk of UI in the + // DOM. This might be a single item, an entire list, a sidebar or panel, or + // even the surrounding frame which wraps your whole app. Defining a chunk of + // UI as a **View** allows you to define your DOM events declaratively, without + // having to worry about render order ... and makes it easy for the view to + // react to specific changes in the state of your models. + + // Creating a Backbone.View creates its initial element outside of the DOM, + // if an existing element is not provided... + var View = Backbone.View = function(options) { + this.cid = _.uniqueId('view'); + _.extend(this, _.pick(options, viewOptions)); + this._ensureElement(); + this.initialize.apply(this, arguments); + }; + + // Cached regex to split keys for `delegate`. + var delegateEventSplitter = /^(\S+)\s*(.*)$/; + + // List of view options to be set as properties. + var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; + + // Set up all inheritable **Backbone.View** properties and methods. + _.extend(View.prototype, Events, { + + // The default `tagName` of a View's element is `"div"`. + tagName: 'div', + + // jQuery delegate for element lookup, scoped to DOM elements within the + // current view. This should be preferred to global lookups where possible. + $: function(selector) { + return this.$el.find(selector); + }, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // **render** is the core function that your view should override, in order + // to populate its element (`this.el`), with the appropriate HTML. The + // convention is for **render** to always return `this`. + render: function() { + return this; + }, + + // Remove this view by taking the element out of the DOM, and removing any + // applicable Backbone.Events listeners. + remove: function() { + this._removeElement(); + this.stopListening(); + return this; + }, + + // Remove this view's element from the document and all event listeners + // attached to it. Exposed for subclasses using an alternative DOM + // manipulation API. + _removeElement: function() { + this.$el.remove(); + }, + + // Change the view's element (`this.el` property) and re-delegate the + // view's events on the new element. + setElement: function(element) { + this.undelegateEvents(); + this._setElement(element); + this.delegateEvents(); + return this; + }, + + // Creates the `this.el` and `this.$el` references for this view using the + // given `el`. `el` can be a CSS selector or an HTML string, a jQuery + // context or an element. Subclasses can override this to utilize an + // alternative DOM manipulation API and are only required to set the + // `this.el` property. + _setElement: function(el) { + this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); + this.el = this.$el[0]; + }, + + // Set callbacks, where `this.events` is a hash of + // + // *{"event selector": "callback"}* + // + // { + // 'mousedown .title': 'edit', + // 'click .button': 'save', + // 'click .open': function(e) { ... } + // } + // + // pairs. Callbacks will be bound to the view, with `this` set properly. + // Uses event delegation for efficiency. + // Omitting the selector binds the event to `this.el`. + delegateEvents: function(events) { + events || (events = _.result(this, 'events')); + if (!events) return this; + this.undelegateEvents(); + for (var key in events) { + var method = events[key]; + if (!_.isFunction(method)) method = this[method]; + if (!method) continue; + var match = key.match(delegateEventSplitter); + this.delegate(match[1], match[2], _.bind(method, this)); + } + return this; + }, + + // Add a single event listener to the view's element (or a child element + // using `selector`). This only works for delegate-able events: not `focus`, + // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer. + delegate: function(eventName, selector, listener) { + this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Clears all callbacks previously bound to the view by `delegateEvents`. + // You usually don't need to use this, but may wish to if you have multiple + // Backbone views attached to the same DOM element. + undelegateEvents: function() { + if (this.$el) this.$el.off('.delegateEvents' + this.cid); + return this; + }, + + // A finer-grained `undelegateEvents` for removing a single delegated event. + // `selector` and `listener` are both optional. + undelegate: function(eventName, selector, listener) { + this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Produces a DOM element to be assigned to your view. Exposed for + // subclasses using an alternative DOM manipulation API. + _createElement: function(tagName) { + return document.createElement(tagName); + }, + + // Ensure that the View has a DOM element to render into. + // If `this.el` is a string, pass it through `$()`, take the first + // matching element, and re-assign it to `el`. Otherwise, create + // an element from the `id`, `className` and `tagName` properties. + _ensureElement: function() { + if (!this.el) { + var attrs = _.extend({}, _.result(this, 'attributes')); + if (this.id) attrs.id = _.result(this, 'id'); + if (this.className) attrs['class'] = _.result(this, 'className'); + this.setElement(this._createElement(_.result(this, 'tagName'))); + this._setAttributes(attrs); + } else { + this.setElement(_.result(this, 'el')); + } + }, + + // Set attributes from a hash on this view's element. Exposed for + // subclasses using an alternative DOM manipulation API. + _setAttributes: function(attributes) { + this.$el.attr(attributes); + } + + }); + + // Backbone.sync + // ------------- + + // Override this function to change the manner in which Backbone persists + // models to the server. You will be passed the type of request, and the + // model in question. By default, makes a RESTful Ajax request + // to the model's `url()`. Some possible customizations could be: + // + // * Use `setTimeout` to batch rapid-fire updates into a single request. + // * Send up the models as XML instead of JSON. + // * Persist models via WebSockets instead of Ajax. + // + // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests + // as `POST`, with a `_method` parameter containing the true HTTP method, + // as well as all requests with the body as `application/x-www-form-urlencoded` + // instead of `application/json` with the model in a param named `model`. + // Useful when interfacing with server-side languages like **PHP** that make + // it difficult to read the body of `PUT` requests. + Backbone.sync = function(method, model, options) { + var type = methodMap[method]; + + // Default options, unless specified. + _.defaults(options || (options = {}), { + emulateHTTP: Backbone.emulateHTTP, + emulateJSON: Backbone.emulateJSON + }); + + // Default JSON-request options. + var params = {type: type, dataType: 'json'}; + + // Ensure that we have a URL. + if (!options.url) { + params.url = _.result(model, 'url') || urlError(); + } + + // Ensure that we have the appropriate request data. + if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) { + params.contentType = 'application/json'; + params.data = JSON.stringify(options.attrs || model.toJSON(options)); + } + + // For older servers, emulate JSON by encoding the request into an HTML-form. + if (options.emulateJSON) { + params.contentType = 'application/x-www-form-urlencoded'; + params.data = params.data ? {model: params.data} : {}; + } + + // For older servers, emulate HTTP by mimicking the HTTP method with `_method` + // And an `X-HTTP-Method-Override` header. + if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) { + params.type = 'POST'; + if (options.emulateJSON) params.data._method = type; + var beforeSend = options.beforeSend; + options.beforeSend = function(xhr) { + xhr.setRequestHeader('X-HTTP-Method-Override', type); + if (beforeSend) return beforeSend.apply(this, arguments); + }; + } + + // Don't process data on a non-GET request. + if (params.type !== 'GET' && !options.emulateJSON) { + params.processData = false; + } + + // Pass along `textStatus` and `errorThrown` from jQuery. + var error = options.error; + options.error = function(xhr, textStatus, errorThrown) { + options.textStatus = textStatus; + options.errorThrown = errorThrown; + if (error) error.call(options.context, xhr, textStatus, errorThrown); + }; + + // Make the request, allowing the user to override any Ajax options. + var xhr = options.xhr = Backbone.ajax(_.extend(params, options)); + model.trigger('request', model, xhr, options); + return xhr; + }; + + // Map from CRUD to HTTP for our default `Backbone.sync` implementation. + var methodMap = { + 'create': 'POST', + 'update': 'PUT', + 'patch': 'PATCH', + 'delete': 'DELETE', + 'read': 'GET' + }; + + // Set the default implementation of `Backbone.ajax` to proxy through to `$`. + // Override this if you'd like to use a different library. + Backbone.ajax = function() { + return Backbone.$.ajax.apply(Backbone.$, arguments); + }; + + // Backbone.Router + // --------------- + + // Routers map faux-URLs to actions, and fire events when routes are + // matched. Creating a new one sets its `routes` hash, if not set statically. + var Router = Backbone.Router = function(options) { + options || (options = {}); + if (options.routes) this.routes = options.routes; + this._bindRoutes(); + this.initialize.apply(this, arguments); + }; + + // Cached regular expressions for matching named param parts and splatted + // parts of route strings. + var optionalParam = /\((.*?)\)/g; + var namedParam = /(\(\?)?:\w+/g; + var splatParam = /\*\w+/g; + var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; + + // Set up all inheritable **Backbone.Router** properties and methods. + _.extend(Router.prototype, Events, { + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // Manually bind a single named route to a callback. For example: + // + // this.route('search/:query/p:num', 'search', function(query, num) { + // ... + // }); + // + route: function(route, name, callback) { + if (!_.isRegExp(route)) route = this._routeToRegExp(route); + if (_.isFunction(name)) { + callback = name; + name = ''; + } + if (!callback) callback = this[name]; + var router = this; + Backbone.history.route(route, function(fragment) { + var args = router._extractParameters(route, fragment); + if (router.execute(callback, args, name) !== false) { + router.trigger.apply(router, ['route:' + name].concat(args)); + router.trigger('route', name, args); + Backbone.history.trigger('route', router, name, args); + } + }); + return this; + }, + + // Execute a route handler with the provided parameters. This is an + // excellent place to do pre-route setup or post-route cleanup. + execute: function(callback, args, name) { + if (callback) callback.apply(this, args); + }, + + // Simple proxy to `Backbone.history` to save a fragment into the history. + navigate: function(fragment, options) { + Backbone.history.navigate(fragment, options); + return this; + }, + + // Bind all defined routes to `Backbone.history`. We have to reverse the + // order of the routes here to support behavior where the most general + // routes can be defined at the bottom of the route map. + _bindRoutes: function() { + if (!this.routes) return; + this.routes = _.result(this, 'routes'); + var route, routes = _.keys(this.routes); + while ((route = routes.pop()) != null) { + this.route(route, this.routes[route]); + } + }, + + // Convert a route string into a regular expression, suitable for matching + // against the current location hash. + _routeToRegExp: function(route) { + route = route.replace(escapeRegExp, '\\$&') + .replace(optionalParam, '(?:$1)?') + .replace(namedParam, function(match, optional) { + return optional ? match : '([^/?]+)'; + }) + .replace(splatParam, '([^?]*?)'); + return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$'); + }, + + // Given a route, and a URL fragment that it matches, return the array of + // extracted decoded parameters. Empty or unmatched parameters will be + // treated as `null` to normalize cross-browser behavior. + _extractParameters: function(route, fragment) { + var params = route.exec(fragment).slice(1); + return _.map(params, function(param, i) { + // Don't decode the search params. + if (i === params.length - 1) return param || null; + return param ? decodeURIComponent(param) : null; + }); + } + + }); + + // Backbone.History + // ---------------- + + // Handles cross-browser history management, based on either + // [pushState](http://diveintohtml5.info/history.html) and real URLs, or + // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange) + // and URL fragments. If the browser supports neither (old IE, natch), + // falls back to polling. + var History = Backbone.History = function() { + this.handlers = []; + this.checkUrl = _.bind(this.checkUrl, this); + + // Ensure that `History` can be used outside of the browser. + if (typeof window !== 'undefined') { + this.location = window.location; + this.history = window.history; + } + }; + + // Cached regex for stripping a leading hash/slash and trailing space. + var routeStripper = /^[#\/]|\s+$/g; + + // Cached regex for stripping leading and trailing slashes. + var rootStripper = /^\/+|\/+$/g; + + // Cached regex for stripping urls of hash. + var pathStripper = /#.*$/; + + // Has the history handling already been started? + History.started = false; + + // Set up all inheritable **Backbone.History** properties and methods. + _.extend(History.prototype, Events, { + + // The default interval to poll for hash changes, if necessary, is + // twenty times a second. + interval: 50, + + // Are we at the app root? + atRoot: function() { + var path = this.location.pathname.replace(/[^\/]$/, '$&/'); + return path === this.root && !this.getSearch(); + }, + + // Does the pathname match the root? + matchRoot: function() { + var path = this.decodeFragment(this.location.pathname); + var root = path.slice(0, this.root.length - 1) + '/'; + return root === this.root; + }, + + // Unicode characters in `location.pathname` are percent encoded so they're + // decoded for comparison. `%25` should not be decoded since it may be part + // of an encoded parameter. + decodeFragment: function(fragment) { + return decodeURI(fragment.replace(/%25/g, '%2525')); + }, + + // In IE6, the hash fragment and search params are incorrect if the + // fragment contains `?`. + getSearch: function() { + var match = this.location.href.replace(/#.*/, '').match(/\?.+/); + return match ? match[0] : ''; + }, + + // Gets the true hash value. Cannot use location.hash directly due to bug + // in Firefox where location.hash will always be decoded. + getHash: function(window) { + var match = (window || this).location.href.match(/#(.*)$/); + return match ? match[1] : ''; + }, + + // Get the pathname and search params, without the root. + getPath: function() { + var path = this.decodeFragment( + this.location.pathname + this.getSearch() + ).slice(this.root.length - 1); + return path.charAt(0) === '/' ? path.slice(1) : path; + }, + + // Get the cross-browser normalized URL fragment from the path or hash. + getFragment: function(fragment) { + if (fragment == null) { + if (this._usePushState || !this._wantsHashChange) { + fragment = this.getPath(); + } else { + fragment = this.getHash(); + } + } + return fragment.replace(routeStripper, ''); + }, + + // Start the hash change handling, returning `true` if the current URL matches + // an existing route, and `false` otherwise. + start: function(options) { + if (History.started) throw new Error('Backbone.history has already been started'); + History.started = true; + + // Figure out the initial configuration. Do we need an iframe? + // Is pushState desired ... is it available? + this.options = _.extend({root: '/'}, this.options, options); + this.root = this.options.root; + this._wantsHashChange = this.options.hashChange !== false; + this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7); + this._useHashChange = this._wantsHashChange && this._hasHashChange; + this._wantsPushState = !!this.options.pushState; + this._hasPushState = !!(this.history && this.history.pushState); + this._usePushState = this._wantsPushState && this._hasPushState; + this.fragment = this.getFragment(); + + // Normalize root to always include a leading and trailing slash. + this.root = ('/' + this.root + '/').replace(rootStripper, '/'); + + // Transition from hashChange to pushState or vice versa if both are + // requested. + if (this._wantsHashChange && this._wantsPushState) { + + // If we've started off with a route from a `pushState`-enabled + // browser, but we're currently in a browser that doesn't support it... + if (!this._hasPushState && !this.atRoot()) { + var root = this.root.slice(0, -1) || '/'; + this.location.replace(root + '#' + this.getPath()); + // Return immediately as browser will do redirect to new url + return true; + + // Or if we've started out with a hash-based route, but we're currently + // in a browser where it could be `pushState`-based instead... + } else if (this._hasPushState && this.atRoot()) { + this.navigate(this.getHash(), {replace: true}); + } + + } + + // Proxy an iframe to handle location events if the browser doesn't + // support the `hashchange` event, HTML5 history, or the user wants + // `hashChange` but not `pushState`. + if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) { + this.iframe = document.createElement('iframe'); + this.iframe.src = 'javascript:0'; + this.iframe.style.display = 'none'; + this.iframe.tabIndex = -1; + var body = document.body; + // Using `appendChild` will throw on IE < 9 if the document is not ready. + var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow; + iWindow.document.open(); + iWindow.document.close(); + iWindow.location.hash = '#' + this.fragment; + } + + // Add a cross-platform `addEventListener` shim for older browsers. + var addEventListener = window.addEventListener || function (eventName, listener) { + return attachEvent('on' + eventName, listener); + }; + + // Depending on whether we're using pushState or hashes, and whether + // 'onhashchange' is supported, determine how we check the URL state. + if (this._usePushState) { + addEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + addEventListener('hashchange', this.checkUrl, false); + } else if (this._wantsHashChange) { + this._checkUrlInterval = setInterval(this.checkUrl, this.interval); + } + + if (!this.options.silent) return this.loadUrl(); + }, + + // Disable Backbone.history, perhaps temporarily. Not useful in a real app, + // but possibly useful for unit testing Routers. + stop: function() { + // Add a cross-platform `removeEventListener` shim for older browsers. + var removeEventListener = window.removeEventListener || function (eventName, listener) { + return detachEvent('on' + eventName, listener); + }; + + // Remove window listeners. + if (this._usePushState) { + removeEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + removeEventListener('hashchange', this.checkUrl, false); + } + + // Clean up the iframe if necessary. + if (this.iframe) { + document.body.removeChild(this.iframe); + this.iframe = null; + } + + // Some environments will throw when clearing an undefined interval. + if (this._checkUrlInterval) clearInterval(this._checkUrlInterval); + History.started = false; + }, + + // Add a route to be tested when the fragment changes. Routes added later + // may override previous routes. + route: function(route, callback) { + this.handlers.unshift({route: route, callback: callback}); + }, + + // Checks the current URL to see if it has changed, and if it has, + // calls `loadUrl`, normalizing across the hidden iframe. + checkUrl: function(e) { + var current = this.getFragment(); + + // If the user pressed the back button, the iframe's hash will have + // changed and we should use that for comparison. + if (current === this.fragment && this.iframe) { + current = this.getHash(this.iframe.contentWindow); + } + + if (current === this.fragment) return false; + if (this.iframe) this.navigate(current); + this.loadUrl(); + }, + + // Attempt to load the current URL fragment. If a route succeeds with a + // match, returns `true`. If no defined routes matches the fragment, + // returns `false`. + loadUrl: function(fragment) { + // If the root doesn't match, no routes can match either. + if (!this.matchRoot()) return false; + fragment = this.fragment = this.getFragment(fragment); + return _.some(this.handlers, function(handler) { + if (handler.route.test(fragment)) { + handler.callback(fragment); + return true; + } + }); + }, + + // Save a fragment into the hash history, or replace the URL state if the + // 'replace' option is passed. You are responsible for properly URL-encoding + // the fragment in advance. + // + // The options object can contain `trigger: true` if you wish to have the + // route callback be fired (not usually desirable), or `replace: true`, if + // you wish to modify the current URL without adding an entry to the history. + navigate: function(fragment, options) { + if (!History.started) return false; + if (!options || options === true) options = {trigger: !!options}; + + // Normalize the fragment. + fragment = this.getFragment(fragment || ''); + + // Don't include a trailing slash on the root. + var root = this.root; + if (fragment === '' || fragment.charAt(0) === '?') { + root = root.slice(0, -1) || '/'; + } + var url = root + fragment; + + // Strip the hash and decode for matching. + fragment = this.decodeFragment(fragment.replace(pathStripper, '')); + + if (this.fragment === fragment) return; + this.fragment = fragment; + + // If pushState is available, we use it to set the fragment as a real URL. + if (this._usePushState) { + this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url); + + // If hash changes haven't been explicitly disabled, update the hash + // fragment to store history. + } else if (this._wantsHashChange) { + this._updateHash(this.location, fragment, options.replace); + if (this.iframe && (fragment !== this.getHash(this.iframe.contentWindow))) { + var iWindow = this.iframe.contentWindow; + + // Opening and closing the iframe tricks IE7 and earlier to push a + // history entry on hash-tag change. When replace is true, we don't + // want this. + if (!options.replace) { + iWindow.document.open(); + iWindow.document.close(); + } + + this._updateHash(iWindow.location, fragment, options.replace); + } + + // If you've told us that you explicitly don't want fallback hashchange- + // based history, then `navigate` becomes a page refresh. + } else { + return this.location.assign(url); + } + if (options.trigger) return this.loadUrl(fragment); + }, + + // Update the hash location, either replacing the current entry, or adding + // a new one to the browser history. + _updateHash: function(location, fragment, replace) { + if (replace) { + var href = location.href.replace(/(javascript:|#).*$/, ''); + location.replace(href + '#' + fragment); + } else { + // Some browsers require that `hash` contains a leading #. + location.hash = '#' + fragment; + } + } + + }); + + // Create the default Backbone.history. + Backbone.history = new History; + + // Helpers + // ------- + + // Helper function to correctly set up the prototype chain for subclasses. + // Similar to `goog.inherits`, but uses a hash of prototype properties and + // class properties to be extended. + var extend = function(protoProps, staticProps) { + var parent = this; + var child; + + // The constructor function for the new subclass is either defined by you + // (the "constructor" property in your `extend` definition), or defaulted + // by us to simply call the parent constructor. + if (protoProps && _.has(protoProps, 'constructor')) { + child = protoProps.constructor; + } else { + child = function(){ return parent.apply(this, arguments); }; + } + + // Add static properties to the constructor function, if supplied. + _.extend(child, parent, staticProps); + + // Set the prototype chain to inherit from `parent`, without calling + // `parent` constructor function. + var Surrogate = function(){ this.constructor = child; }; + Surrogate.prototype = parent.prototype; + child.prototype = new Surrogate; + + // Add prototype properties (instance properties) to the subclass, + // if supplied. + if (protoProps) _.extend(child.prototype, protoProps); + + // Set a convenience property in case the parent's prototype is needed + // later. + child.__super__ = parent.prototype; + + return child; + }; + + // Set up inheritance for the model, collection, router, view and history. + Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend; + + // Throw an error when a URL is needed, and none is supplied. + var urlError = function() { + throw new Error('A "url" property or function must be specified'); + }; + + // Wrap an optional error callback with a fallback error event. + var wrapError = function(model, options) { + var error = options.error; + options.error = function(resp) { + if (error) error.call(options.context, model, resp, options); + model.trigger('error', model, resp, options); + }; + }; + + return Backbone; + + })); + + var __export1 = exports.View; + var __export2 = exports.Model; + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$1 = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + // Caches a local reference to `Element.prototype` for faster access. + var ElementProto = Element.prototype; // : typeof Element = (typeof Element !== 'undefined' && Element.prototype) || {}; + // Find the right `Element#matches` for IE>=9 and modern browsers. + var matchesSelector = ElementProto.matches || + ElementProto['webkitMatchesSelector'] || + ElementProto['mozMatchesSelector'] || + ElementProto['msMatchesSelector'] || + ElementProto['oMatchesSelector'] || + function matches(selector) { + /* tslint:disable:no-invalid-this */ + var matches = (this.document || this.ownerDocument).querySelectorAll(selector); + var i = matches.length; + while (--i >= 0 && matches.item(i) !== this) { + continue; + } + return i > -1; + /* tslint:enable:no-invalid-this */ + }; + var NativeView = /** @class */ (function (_super) { + __extends$1(NativeView, _super); + function NativeView() { + return _super !== null && _super.apply(this, arguments) || this; + } + NativeView.prototype._removeElement = function () { + this.undelegateEvents(); + if (this.el.parentNode) { + this.el.parentNode.removeChild(this.el); + } + }; + // Apply the `element` to the view. + NativeView.prototype._setElement = function (element) { + this.el = element; + }; + // Set a hash of attributes to the view's `el`. We use the "prop" version + // if available, falling back to `setAttribute` for the catch-all. + NativeView.prototype._setAttributes = function (attrs) { + for (var attr in attrs) { + attr in this.el ? this.el[attr] = attrs[attr] : this.el.setAttribute(attr, attrs[attr]); + } + }; + /** + * Make an event delegation handler for the given `eventName` and `selector` + * and attach it to `this.el`. + * If selector is empty, the listener will be bound to `this.el`. If not, a + * new handler that will recursively traverse up the event target's DOM + * hierarchy looking for a node that matches the selector. If one is found, + * the event's `delegateTarget` property is set to it and the return the + * result of calling bound `listener` with the parameters given to the + * handler. + * + * This does not properly handle selectors for things like focus and blur (see + * https://github.com/jquery/jquery/blob/7d21f02b9ec9f655583e898350badf89165ed4d5/src/event.js#L442 + * for some similar exceptional cases). + */ + NativeView.prototype.delegate = function (eventName, selector, listener) { + if (typeof selector !== 'string') { + listener = selector; + selector = null; + } + // We have to initialize this here, instead of in the constructor, because the + // super constructor eventually calls this method before we get a chance to initialize + // this._domEvents to an empty list. + if (this._domEvents === void 0) { + this._domEvents = []; + } + var root = this.el; + var handler = selector ? function (e) { + var node = e.target || e.srcElement; + for (; node && node !== root; node = node.parentNode) { + if (matchesSelector.call(node, selector)) { + e.delegateTarget = node; + if (listener.handleEvent) { + return listener.handleEvent(e); + } + else { + return listener(e); + } + } + } + } : listener; + this.el.addEventListener(eventName, handler, false); + this._domEvents.push({ eventName: eventName, handler: handler, listener: listener, selector: selector }); + return handler; + }; + // Remove a single delegated event. Either `eventName` or `selector` must + // be included, `selector` and `listener` are optional. + NativeView.prototype.undelegate = function (eventName, selector, listener) { + if (typeof selector === 'function') { + listener = selector; + selector = null; + } + if (this.el && this._domEvents) { + var handlers = this._domEvents.slice(); + var i = handlers.length; + while (i--) { + var item = handlers[i]; + var match = item.eventName === eventName && + (listener ? item.listener === listener : true) && + (selector ? item.selector === selector : true); + if (!match) { + continue; + } + this.el.removeEventListener(item.eventName, item.handler, false); + this._domEvents.splice(i, 1); + } + } + return this; + }; + // Remove all events created with `delegate` from `el` + NativeView.prototype.undelegateEvents = function () { + if (this.el && this._domEvents) { + var len = this._domEvents.length; + for (var i = 0; i < len; i++) { + var item = this._domEvents[i]; + this.el.removeEventListener(item.eventName, item.handler, false); + } + this._domEvents.length = 0; + } + return this; + }; + return NativeView; + }(__export1)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for array-specific algorithms. + */ + var ArrayExt; + (function (ArrayExt) { + /** + * Find the index of the first occurrence of a value in an array. + * + * @param array - The array-like object to search. + * + * @param value - The value to locate in the array. Values are + * compared using strict `===` equality. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the first occurrence of the value, or `-1` + * if the value is not found. + * + * #### Notes + * If `stop < start` the search will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = ['one', 'two', 'three', 'four', 'one']; + * ArrayExt.firstIndexOf(data, 'red'); // -1 + * ArrayExt.firstIndexOf(data, 'one'); // 0 + * ArrayExt.firstIndexOf(data, 'one', 1); // 4 + * ArrayExt.firstIndexOf(data, 'two', 2); // -1 + * ArrayExt.firstIndexOf(data, 'two', 2, 1); // 1 + * ``` + */ + function firstIndexOf(array, value, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n === 0) { + return -1; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var span; + if (stop < start) { + span = (stop + 1) + (n - start); + } + else { + span = stop - start + 1; + } + for (var i = 0; i < span; ++i) { + var j = (start + i) % n; + if (array[j] === value) { + return j; + } + } + return -1; + } + ArrayExt.firstIndexOf = firstIndexOf; + /** + * Find the index of the last occurrence of a value in an array. + * + * @param array - The array-like object to search. + * + * @param value - The value to locate in the array. Values are + * compared using strict `===` equality. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the last occurrence of the value, or `-1` + * if the value is not found. + * + * #### Notes + * If `start < stop` the search will wrap at the front of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = ['one', 'two', 'three', 'four', 'one']; + * ArrayExt.lastIndexOf(data, 'red'); // -1 + * ArrayExt.lastIndexOf(data, 'one'); // 4 + * ArrayExt.lastIndexOf(data, 'one', 1); // 0 + * ArrayExt.lastIndexOf(data, 'two', 0); // -1 + * ArrayExt.lastIndexOf(data, 'two', 0, 1); // 1 + * ``` + */ + function lastIndexOf(array, value, start, stop) { + if (start === void 0) { start = -1; } + if (stop === void 0) { stop = 0; } + var n = array.length; + if (n === 0) { + return -1; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var span; + if (start < stop) { + span = (start + 1) + (n - stop); + } + else { + span = start - stop + 1; + } + for (var i = 0; i < span; ++i) { + var j = (start - i + n) % n; + if (array[j] === value) { + return j; + } + } + return -1; + } + ArrayExt.lastIndexOf = lastIndexOf; + /** + * Find the index of the first value which matches a predicate. + * + * @param array - The array-like object to search. + * + * @param fn - The predicate function to apply to the values. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the first matching value, or `-1` if no + * matching value is found. + * + * #### Notes + * If `stop < start` the search will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` which is non-integral. + * + * Modifying the length of the array while searching. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function isEven(value: number): boolean { + * return value % 2 === 0; + * } + * + * let data = [1, 2, 3, 4, 3, 2, 1]; + * ArrayExt.findFirstIndex(data, isEven); // 1 + * ArrayExt.findFirstIndex(data, isEven, 4); // 5 + * ArrayExt.findFirstIndex(data, isEven, 6); // -1 + * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1 + * ``` + */ + function findFirstIndex(array, fn, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n === 0) { + return -1; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var span; + if (stop < start) { + span = (stop + 1) + (n - start); + } + else { + span = stop - start + 1; + } + for (var i = 0; i < span; ++i) { + var j = (start + i) % n; + if (fn(array[j], j)) { + return j; + } + } + return -1; + } + ArrayExt.findFirstIndex = findFirstIndex; + /** + * Find the index of the last value which matches a predicate. + * + * @param object - The array-like object to search. + * + * @param fn - The predicate function to apply to the values. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the last matching value, or `-1` if no + * matching value is found. + * + * #### Notes + * If `start < stop` the search will wrap at the front of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` which is non-integral. + * + * Modifying the length of the array while searching. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function isEven(value: number): boolean { + * return value % 2 === 0; + * } + * + * let data = [1, 2, 3, 4, 3, 2, 1]; + * ArrayExt.findLastIndex(data, isEven); // 5 + * ArrayExt.findLastIndex(data, isEven, 4); // 3 + * ArrayExt.findLastIndex(data, isEven, 0); // -1 + * ArrayExt.findLastIndex(data, isEven, 0, 1); // 5 + * ``` + */ + function findLastIndex(array, fn, start, stop) { + if (start === void 0) { start = -1; } + if (stop === void 0) { stop = 0; } + var n = array.length; + if (n === 0) { + return -1; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var d; + if (start < stop) { + d = (start + 1) + (n - stop); + } + else { + d = start - stop + 1; + } + for (var i = 0; i < d; ++i) { + var j = (start - i + n) % n; + if (fn(array[j], j)) { + return j; + } + } + return -1; + } + ArrayExt.findLastIndex = findLastIndex; + /** + * Find the first value which matches a predicate. + * + * @param array - The array-like object to search. + * + * @param fn - The predicate function to apply to the values. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The first matching value, or `undefined` if no matching + * value is found. + * + * #### Notes + * If `stop < start` the search will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` which is non-integral. + * + * Modifying the length of the array while searching. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function isEven(value: number): boolean { + * return value % 2 === 0; + * } + * + * let data = [1, 2, 3, 4, 3, 2, 1]; + * ArrayExt.findFirstValue(data, isEven); // 2 + * ArrayExt.findFirstValue(data, isEven, 2); // 4 + * ArrayExt.findFirstValue(data, isEven, 6); // undefined + * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2 + * ``` + */ + function findFirstValue(array, fn, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var index = findFirstIndex(array, fn, start, stop); + return index !== -1 ? array[index] : undefined; + } + ArrayExt.findFirstValue = findFirstValue; + /** + * Find the last value which matches a predicate. + * + * @param object - The array-like object to search. + * + * @param fn - The predicate function to apply to the values. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The last matching value, or `undefined` if no matching + * value is found. + * + * #### Notes + * If `start < stop` the search will wrap at the front of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` which is non-integral. + * + * Modifying the length of the array while searching. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function isEven(value: number): boolean { + * return value % 2 === 0; + * } + * + * let data = [1, 2, 3, 4, 3, 2, 1]; + * ArrayExt.findLastValue(data, isEven); // 2 + * ArrayExt.findLastValue(data, isEven, 4); // 4 + * ArrayExt.findLastValue(data, isEven, 0); // undefined + * ArrayExt.findLastValue(data, isEven, 0, 1); // 2 + * ``` + */ + function findLastValue(array, fn, start, stop) { + if (start === void 0) { start = -1; } + if (stop === void 0) { stop = 0; } + var index = findLastIndex(array, fn, start, stop); + return index !== -1 ? array[index] : undefined; + } + ArrayExt.findLastValue = findLastValue; + /** + * Find the index of the first element which compares `>=` to a value. + * + * @param array - The sorted array-like object to search. + * + * @param value - The value to locate in the array. + * + * @param fn - The 3-way comparison function to apply to the values. + * It should return `< 0` if an element is less than a value, `0` if + * an element is equal to a value, or `> 0` if an element is greater + * than a value. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the first element which compares `>=` to the + * value, or `length` if there is no such element. If the computed + * index for `stop` is less than `start`, then the computed index + * for `start` is returned. + * + * #### Notes + * The array must already be sorted in ascending order according to + * the comparison function. + * + * #### Complexity + * Logarithmic. + * + * #### Undefined Behavior + * Searching a range which is not sorted in ascending order. + * + * A `start` or `stop` which is non-integral. + * + * Modifying the length of the array while searching. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function numberCmp(a: number, b: number): number { + * return a - b; + * } + * + * let data = [0, 3, 4, 7, 7, 9]; + * ArrayExt.lowerBound(data, 0, numberCmp); // 0 + * ArrayExt.lowerBound(data, 6, numberCmp); // 3 + * ArrayExt.lowerBound(data, 7, numberCmp); // 3 + * ArrayExt.lowerBound(data, -1, numberCmp); // 0 + * ArrayExt.lowerBound(data, 10, numberCmp); // 6 + * ``` + */ + function lowerBound(array, value, fn, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n === 0) { + return 0; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var begin = start; + var span = stop - start + 1; + while (span > 0) { + var half = span >> 1; + var middle = begin + half; + if (fn(array[middle], value) < 0) { + begin = middle + 1; + span -= half + 1; + } + else { + span = half; + } + } + return begin; + } + ArrayExt.lowerBound = lowerBound; + /** + * Find the index of the first element which compares `>` than a value. + * + * @param array - The sorted array-like object to search. + * + * @param value - The value to locate in the array. + * + * @param fn - The 3-way comparison function to apply to the values. + * It should return `< 0` if an element is less than a value, `0` if + * an element is equal to a value, or `> 0` if an element is greater + * than a value. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the first element which compares `>` than the + * value, or `length` if there is no such element. If the computed + * index for `stop` is less than `start`, then the computed index + * for `start` is returned. + * + * #### Notes + * The array must already be sorted in ascending order according to + * the comparison function. + * + * #### Complexity + * Logarithmic. + * + * #### Undefined Behavior + * Searching a range which is not sorted in ascending order. + * + * A `start` or `stop` which is non-integral. + * + * Modifying the length of the array while searching. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function numberCmp(a: number, b: number): number { + * return a - b; + * } + * + * let data = [0, 3, 4, 7, 7, 9]; + * ArrayExt.upperBound(data, 0, numberCmp); // 1 + * ArrayExt.upperBound(data, 6, numberCmp); // 3 + * ArrayExt.upperBound(data, 7, numberCmp); // 5 + * ArrayExt.upperBound(data, -1, numberCmp); // 0 + * ArrayExt.upperBound(data, 10, numberCmp); // 6 + * ``` + */ + function upperBound(array, value, fn, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n === 0) { + return 0; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var begin = start; + var span = stop - start + 1; + while (span > 0) { + var half = span >> 1; + var middle = begin + half; + if (fn(array[middle], value) > 0) { + span = half; + } + else { + begin = middle + 1; + span -= half + 1; + } + } + return begin; + } + ArrayExt.upperBound = upperBound; + /** + * Test whether two arrays are shallowly equal. + * + * @param a - The first array-like object to compare. + * + * @param b - The second array-like object to compare. + * + * @param fn - The comparison function to apply to the elements. It + * should return `true` if the elements are "equal". The default + * compares elements using strict `===` equality. + * + * @returns Whether the two arrays are shallowly equal. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * Modifying the length of the arrays while comparing. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let d1 = [0, 3, 4, 7, 7, 9]; + * let d2 = [0, 3, 4, 7, 7, 9]; + * let d3 = [42]; + * ArrayExt.shallowEqual(d1, d2); // true + * ArrayExt.shallowEqual(d2, d3); // false + * ``` + */ + function shallowEqual(a, b, fn) { + // Check for object identity first. + if (a === b) { + return true; + } + // Bail early if the lengths are different. + if (a.length !== b.length) { + return false; + } + // Compare each element for equality. + for (var i = 0, n = a.length; i < n; ++i) { + if (fn ? !fn(a[i], b[i]) : a[i] !== b[i]) { + return false; + } + } + // The array are shallowly equal. + return true; + } + ArrayExt.shallowEqual = shallowEqual; + /** + * Create a slice of an array subject to an optional step. + * + * @param array - The array-like object of interest. + * + * @param options - The options for configuring the slice. + * + * @returns A new array with the specified values. + * + * @throws An exception if the slice `step` is `0`. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start`, `stop`, or `step` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [0, 3, 4, 7, 7, 9]; + * ArrayExt.slice(data); // [0, 3, 4, 7, 7, 9] + * ArrayExt.slice(data, { start: 2 }); // [4, 7, 7, 9] + * ArrayExt.slice(data, { start: 0, stop: 4 }); // [0, 3, 4, 7] + * ArrayExt.slice(data, { step: 2 }); // [0, 4, 7] + * ArrayExt.slice(data, { step: -1 }); // [9, 7, 7, 4, 3, 0] + * ``` + */ + function slice(array, options) { + if (options === void 0) { options = {}; } + // Extract the options. + var start = options.start, stop = options.stop, step = options.step; + // Set up the `step` value. + if (step === undefined) { + step = 1; + } + // Validate the step size. + if (step === 0) { + throw new Error('Slice `step` cannot be zero.'); + } + // Look up the length of the array. + var n = array.length; + // Set up the `start` value. + if (start === undefined) { + start = step < 0 ? n - 1 : 0; + } + else if (start < 0) { + start = Math.max(start + n, step < 0 ? -1 : 0); + } + else if (start >= n) { + start = step < 0 ? n - 1 : n; + } + // Set up the `stop` value. + if (stop === undefined) { + stop = step < 0 ? -1 : n; + } + else if (stop < 0) { + stop = Math.max(stop + n, step < 0 ? -1 : 0); + } + else if (stop >= n) { + stop = step < 0 ? n - 1 : n; + } + // Compute the slice length. + var length; + if ((step < 0 && stop >= start) || (step > 0 && start >= stop)) { + length = 0; + } + else if (step < 0) { + length = Math.floor((stop - start + 1) / step + 1); + } + else { + length = Math.floor((stop - start - 1) / step + 1); + } + // Compute the sliced result. + var result = []; + for (var i = 0; i < length; ++i) { + result[i] = array[start + i * step]; + } + // Return the result. + return result; + } + ArrayExt.slice = slice; + /** + * Move an element in an array from one index to another. + * + * @param array - The mutable array-like object of interest. + * + * @param fromIndex - The index of the element to move. Negative + * values are taken as an offset from the end of the array. + * + * @param toIndex - The target index of the element. Negative + * values are taken as an offset from the end of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `fromIndex` or `toIndex` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from from '@lumino/algorithm'; + * + * let data = [0, 1, 2, 3, 4]; + * ArrayExt.move(data, 1, 2); // [0, 2, 1, 3, 4] + * ArrayExt.move(data, 4, 2); // [0, 2, 4, 1, 3] + * ``` + */ + function move(array, fromIndex, toIndex) { + var n = array.length; + if (n <= 1) { + return; + } + if (fromIndex < 0) { + fromIndex = Math.max(0, fromIndex + n); + } + else { + fromIndex = Math.min(fromIndex, n - 1); + } + if (toIndex < 0) { + toIndex = Math.max(0, toIndex + n); + } + else { + toIndex = Math.min(toIndex, n - 1); + } + if (fromIndex === toIndex) { + return; + } + var value = array[fromIndex]; + var d = fromIndex < toIndex ? 1 : -1; + for (var i = fromIndex; i !== toIndex; i += d) { + array[i] = array[i + d]; + } + array[toIndex] = value; + } + ArrayExt.move = move; + /** + * Reverse an array in-place. + * + * @param array - The mutable array-like object of interest. + * + * @param start - The index of the first element in the range to be + * reversed, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * reversed, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` index which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [0, 1, 2, 3, 4]; + * ArrayExt.reverse(data, 1, 3); // [0, 3, 2, 1, 4] + * ArrayExt.reverse(data, 3); // [0, 3, 2, 4, 1] + * ArrayExt.reverse(data); // [1, 4, 2, 3, 0] + * ``` + */ + function reverse(array, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n <= 1) { + return; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + while (start < stop) { + var a = array[start]; + var b = array[stop]; + array[start++] = b; + array[stop--] = a; + } + } + ArrayExt.reverse = reverse; + /** + * Rotate the elements of an array in-place. + * + * @param array - The mutable array-like object of interest. + * + * @param delta - The amount of rotation to apply to the elements. A + * positive value will rotate the elements to the left. A negative + * value will rotate the elements to the right. + * + * @param start - The index of the first element in the range to be + * rotated, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * rotated, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `delta`, `start`, or `stop` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [0, 1, 2, 3, 4]; + * ArrayExt.rotate(data, 2); // [2, 3, 4, 0, 1] + * ArrayExt.rotate(data, -2); // [0, 1, 2, 3, 4] + * ArrayExt.rotate(data, 10); // [0, 1, 2, 3, 4] + * ArrayExt.rotate(data, 9); // [4, 0, 1, 2, 3] + * ArrayExt.rotate(data, 2, 1, 3); // [4, 2, 0, 1, 3] + * ``` + */ + function rotate(array, delta, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n <= 1) { + return; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + if (start >= stop) { + return; + } + var length = stop - start + 1; + if (delta > 0) { + delta = delta % length; + } + else if (delta < 0) { + delta = ((delta % length) + length) % length; + } + if (delta === 0) { + return; + } + var pivot = start + delta; + reverse(array, start, pivot - 1); + reverse(array, pivot, stop); + reverse(array, start, stop); + } + ArrayExt.rotate = rotate; + /** + * Fill an array with a static value. + * + * @param array - The mutable array-like object to fill. + * + * @param value - The static value to use to fill the array. + * + * @param start - The index of the first element in the range to be + * filled, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * filled, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * #### Notes + * If `stop < start` the fill will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * A `start` or `stop` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = ['one', 'two', 'three', 'four']; + * ArrayExt.fill(data, 'r'); // ['r', 'r', 'r', 'r'] + * ArrayExt.fill(data, 'g', 1); // ['r', 'g', 'g', 'g'] + * ArrayExt.fill(data, 'b', 2, 3); // ['r', 'g', 'b', 'b'] + * ArrayExt.fill(data, 'z', 3, 1); // ['z', 'z', 'b', 'z'] + * ``` + */ + function fill(array, value, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n === 0) { + return; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var span; + if (stop < start) { + span = (stop + 1) + (n - start); + } + else { + span = stop - start + 1; + } + for (var i = 0; i < span; ++i) { + array[(start + i) % n] = value; + } + } + ArrayExt.fill = fill; + /** + * Insert a value into an array at a specific index. + * + * @param array - The array of interest. + * + * @param index - The index at which to insert the value. Negative + * values are taken as an offset from the end of the array. + * + * @param value - The value to set at the specified index. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * An `index` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [0, 1, 2]; + * ArrayExt.insert(data, 0, -1); // [-1, 0, 1, 2] + * ArrayExt.insert(data, 2, 12); // [-1, 0, 12, 1, 2] + * ArrayExt.insert(data, -1, 7); // [-1, 0, 12, 1, 7, 2] + * ArrayExt.insert(data, 6, 19); // [-1, 0, 12, 1, 7, 2, 19] + * ``` + */ + function insert(array, index, value) { + var n = array.length; + if (index < 0) { + index = Math.max(0, index + n); + } + else { + index = Math.min(index, n); + } + for (var i = n; i > index; --i) { + array[i] = array[i - 1]; + } + array[index] = value; + } + ArrayExt.insert = insert; + /** + * Remove and return a value at a specific index in an array. + * + * @param array - The array of interest. + * + * @param index - The index of the value to remove. Negative values + * are taken as an offset from the end of the array. + * + * @returns The value at the specified index, or `undefined` if the + * index is out of range. + * + * #### Complexity + * Linear. + * + * #### Undefined Behavior + * An `index` which is non-integral. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [0, 12, 23, 39, 14, 12, 75]; + * ArrayExt.removeAt(data, 2); // 23 + * ArrayExt.removeAt(data, -2); // 12 + * ArrayExt.removeAt(data, 10); // undefined; + * ``` + */ + function removeAt(array, index) { + var n = array.length; + if (index < 0) { + index += n; + } + if (index < 0 || index >= n) { + return undefined; + } + var value = array[index]; + for (var i = index + 1; i < n; ++i) { + array[i - 1] = array[i]; + } + array.length = n - 1; + return value; + } + ArrayExt.removeAt = removeAt; + /** + * Remove the first occurrence of a value from an array. + * + * @param array - The array of interest. + * + * @param value - The value to remove from the array. Values are + * compared using strict `===` equality. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the removed value, or `-1` if the value + * is not contained in the array. + * + * #### Notes + * If `stop < start` the search will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [0, 12, 23, 39, 14, 12, 75]; + * ArrayExt.removeFirstOf(data, 12); // 1 + * ArrayExt.removeFirstOf(data, 17); // -1 + * ArrayExt.removeFirstOf(data, 39, 3); // -1 + * ArrayExt.removeFirstOf(data, 39, 3, 2); // 2 + * ``` + */ + function removeFirstOf(array, value, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var index = firstIndexOf(array, value, start, stop); + if (index !== -1) { + removeAt(array, index); + } + return index; + } + ArrayExt.removeFirstOf = removeFirstOf; + /** + * Remove the last occurrence of a value from an array. + * + * @param array - The array of interest. + * + * @param value - The value to remove from the array. Values are + * compared using strict `===` equality. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The index of the removed value, or `-1` if the value + * is not contained in the array. + * + * #### Notes + * If `start < stop` the search will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [0, 12, 23, 39, 14, 12, 75]; + * ArrayExt.removeLastOf(data, 12); // 5 + * ArrayExt.removeLastOf(data, 17); // -1 + * ArrayExt.removeLastOf(data, 39, 2); // -1 + * ArrayExt.removeLastOf(data, 39, 2, 3); // 3 + * ``` + */ + function removeLastOf(array, value, start, stop) { + if (start === void 0) { start = -1; } + if (stop === void 0) { stop = 0; } + var index = lastIndexOf(array, value, start, stop); + if (index !== -1) { + removeAt(array, index); + } + return index; + } + ArrayExt.removeLastOf = removeLastOf; + /** + * Remove all occurrences of a value from an array. + * + * @param array - The array of interest. + * + * @param value - The value to remove from the array. Values are + * compared using strict `===` equality. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The number of elements removed from the array. + * + * #### Notes + * If `stop < start` the search will conceptually wrap at the end of + * the array, however the array will be traversed front-to-back. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * let data = [14, 12, 23, 39, 14, 12, 19, 14]; + * ArrayExt.removeAllOf(data, 12); // 2 + * ArrayExt.removeAllOf(data, 17); // 0 + * ArrayExt.removeAllOf(data, 14, 1, 4); // 1 + * ``` + */ + function removeAllOf(array, value, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n === 0) { + return 0; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var count = 0; + for (var i = 0; i < n; ++i) { + if (start <= stop && (i >= start && i <= stop) && array[i] === value) { + count++; + } + else if (stop < start && (i <= stop || i >= start) && array[i] === value) { + count++; + } + else if (count > 0) { + array[i - count] = array[i]; + } + } + if (count > 0) { + array.length = n - count; + } + return count; + } + ArrayExt.removeAllOf = removeAllOf; + /** + * Remove the first occurrence of a value which matches a predicate. + * + * @param array - The array of interest. + * + * @param fn - The predicate function to apply to the values. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The removed `{ index, value }`, which will be `-1` and + * `undefined` if the value is not contained in the array. + * + * #### Notes + * If `stop < start` the search will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function isEven(value: number): boolean { + * return value % 2 === 0; + * } + * + * let data = [0, 12, 23, 39, 14, 12, 75]; + * ArrayExt.removeFirstWhere(data, isEven); // { index: 0, value: 0 } + * ArrayExt.removeFirstWhere(data, isEven, 2); // { index: 3, value: 14 } + * ArrayExt.removeFirstWhere(data, isEven, 4); // { index: -1, value: undefined } + * ``` + */ + function removeFirstWhere(array, fn, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var value; + var index = findFirstIndex(array, fn, start, stop); + if (index !== -1) { + value = removeAt(array, index); + } + return { index: index, value: value }; + } + ArrayExt.removeFirstWhere = removeFirstWhere; + /** + * Remove the last occurrence of a value which matches a predicate. + * + * @param array - The array of interest. + * + * @param fn - The predicate function to apply to the values. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The removed `{ index, value }`, which will be `-1` and + * `undefined` if the value is not contained in the array. + * + * #### Notes + * If `start < stop` the search will wrap at the end of the array. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function isEven(value: number): boolean { + * return value % 2 === 0; + * } + * + * let data = [0, 12, 23, 39, 14, 12, 75]; + * ArrayExt.removeLastWhere(data, isEven); // { index: 5, value: 12 } + * ArrayExt.removeLastWhere(data, isEven, 2); // { index: 1, value: 12 } + * ArrayExt.removeLastWhere(data, isEven, 2, 1); // { index: -1, value: undefined } + * ``` + */ + function removeLastWhere(array, fn, start, stop) { + if (start === void 0) { start = -1; } + if (stop === void 0) { stop = 0; } + var value; + var index = findLastIndex(array, fn, start, stop); + if (index !== -1) { + value = removeAt(array, index); + } + return { index: index, value: value }; + } + ArrayExt.removeLastWhere = removeLastWhere; + /** + * Remove all occurrences of values which match a predicate. + * + * @param array - The array of interest. + * + * @param fn - The predicate function to apply to the values. + * + * @param start - The index of the first element in the range to be + * searched, inclusive. The default value is `0`. Negative values + * are taken as an offset from the end of the array. + * + * @param stop - The index of the last element in the range to be + * searched, inclusive. The default value is `-1`. Negative values + * are taken as an offset from the end of the array. + * + * @returns The number of elements removed from the array. + * + * #### Notes + * If `stop < start` the search will conceptually wrap at the end of + * the array, however the array will be traversed front-to-back. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { ArrayExt } from '@lumino/algorithm'; + * + * function isEven(value: number): boolean { + * return value % 2 === 0; + * } + * + * function isNegative(value: number): boolean { + * return value < 0; + * } + * + * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75]; + * ArrayExt.removeAllWhere(data, isEven); // 4 + * ArrayExt.removeAllWhere(data, isNegative, 0, 3); // 2 + * ``` + */ + function removeAllWhere(array, fn, start, stop) { + if (start === void 0) { start = 0; } + if (stop === void 0) { stop = -1; } + var n = array.length; + if (n === 0) { + return 0; + } + if (start < 0) { + start = Math.max(0, start + n); + } + else { + start = Math.min(start, n - 1); + } + if (stop < 0) { + stop = Math.max(0, stop + n); + } + else { + stop = Math.min(stop, n - 1); + } + var count = 0; + for (var i = 0; i < n; ++i) { + if (start <= stop && (i >= start && i <= stop) && fn(array[i], i)) { + count++; + } + else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) { + count++; + } + else if (count > 0) { + array[i - count] = array[i]; + } + } + if (count > 0) { + array.length = n - count; + } + return count; + } + ArrayExt.removeAllWhere = removeAllWhere; + })(ArrayExt || (ArrayExt = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * Create an iterator for an iterable object. + * + * @param object - The iterable or array-like object of interest. + * + * @returns A new iterator for the given object. + * + * #### Notes + * This function allows iteration algorithms to operate on user-defined + * iterable types and builtin array-like objects in a uniform fashion. + */ + function iter(object) { + var it; + if (typeof object.iter === 'function') { + it = object.iter(); + } + else { + it = new ArrayIterator(object); + } + return it; + } + /** + * Invoke a function for each value in an iterable. + * + * @param object - The iterable or array-like object of interest. + * + * @param fn - The callback function to invoke for each value. + * + * #### Notes + * Iteration can be terminated early by returning `false` from the + * callback function. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { each } from '@lumino/algorithm'; + * + * let data = [5, 7, 0, -2, 9]; + * + * each(data, value => { console.log(value); }); + * ``` + */ + function each$1(object, fn) { + var index = 0; + var it = iter(object); + var value; + while ((value = it.next()) !== undefined) { + if (fn(value, index++) === false) { + return; + } + } + } + /** + * Test whether all values in an iterable satisfy a predicate. + * + * @param object - The iterable or array-like object of interest. + * + * @param fn - The predicate function to invoke for each value. + * + * @returns `true` if all values pass the test, `false` otherwise. + * + * #### Notes + * Iteration terminates on the first `false` predicate result. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { every } from '@lumino/algorithm'; + * + * let data = [5, 7, 1]; + * + * every(data, value => value % 2 === 0); // false + * every(data, value => value % 2 === 1); // true + * ``` + */ + function every$1(object, fn) { + var index = 0; + var it = iter(object); + var value; + while ((value = it.next()) !== undefined) { + if (!fn(value, index++)) { + return false; + } + } + return true; + } + /** + * Test whether any value in an iterable satisfies a predicate. + * + * @param object - The iterable or array-like object of interest. + * + * @param fn - The predicate function to invoke for each value. + * + * @returns `true` if any value passes the test, `false` otherwise. + * + * #### Notes + * Iteration terminates on the first `true` predicate result. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { some } from '@lumino/algorithm'; + * + * let data = [5, 7, 1]; + * + * some(data, value => value === 7); // true + * some(data, value => value === 3); // false + * ``` + */ + function some$1(object, fn) { + var index = 0; + var it = iter(object); + var value; + while ((value = it.next()) !== undefined) { + if (fn(value, index++)) { + return true; + } + } + return false; + } + /** + * Create an array from an iterable of values. + * + * @param object - The iterable or array-like object of interest. + * + * @returns A new array of values from the given object. + * + * #### Example + * ```typescript + * import { iter, toArray } from '@lumino/algorithm'; + * + * let data = [1, 2, 3, 4, 5, 6]; + * + * let stream = iter(data); + * + * toArray(stream); // [1, 2, 3, 4, 5, 6]; + * ``` + */ + function toArray$1(object) { + var index = 0; + var result = []; + var it = iter(object); + var value; + while ((value = it.next()) !== undefined) { + result[index++] = value; + } + return result; + } + /** + * An iterator for an array-like object. + * + * #### Notes + * This iterator can be used for any builtin JS array-like object. + */ + var ArrayIterator = /** @class */ (function () { + /** + * Construct a new array iterator. + * + * @param source - The array-like object of interest. + */ + function ArrayIterator(source) { + this._index = 0; + this._source = source; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + ArrayIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + ArrayIterator.prototype.clone = function () { + var result = new ArrayIterator(this._source); + result._index = this._index; + return result; + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + ArrayIterator.prototype.next = function () { + if (this._index >= this._source.length) { + return undefined; + } + return this._source[this._index++]; + }; + return ArrayIterator; + }()); + + // Copyright (c) Jupyter Development Team. + /** + * Chain together several iterables. + * + * @param objects - The iterable or array-like objects of interest. + * + * @returns An iterator which yields the values of the iterables + * in the order in which they are supplied. + * + * #### Example + * ```typescript + * import { chain, toArray } from '@lumino/algorithm'; + * + * let data1 = [1, 2, 3]; + * let data2 = [4, 5, 6]; + * + * let stream = chain(data1, data2); + * + * toArray(stream); // [1, 2, 3, 4, 5, 6] + * ``` + */ + function chain$1() { + var objects = []; + for (var _i = 0; _i < arguments.length; _i++) { + objects[_i] = arguments[_i]; + } + return new ChainIterator(iter(objects.map(iter))); + } + /** + * An iterator which chains together several iterators. + */ + var ChainIterator = /** @class */ (function () { + /** + * Construct a new chain iterator. + * + * @param source - The iterator of iterators of interest. + */ + function ChainIterator(source) { + this._cloned = false; + this._source = source; + this._active = undefined; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + ChainIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + ChainIterator.prototype.clone = function () { + var result = new ChainIterator(this._source.clone()); + result._active = this._active && this._active.clone(); + result._cloned = true; + this._cloned = true; + return result; + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + ChainIterator.prototype.next = function () { + if (this._active === undefined) { + var active = this._source.next(); + if (active === undefined) { + return undefined; + } + this._active = this._cloned ? active.clone() : active; + } + var value = this._active.next(); + if (value !== undefined) { + return value; + } + this._active = undefined; + return this.next(); + }; + return ChainIterator; + }()); + + /** + * Create an empty iterator. + * + * @returns A new iterator which yields nothing. + * + * #### Example + * ```typescript + * import { empty, toArray } from '@lumino/algorithm'; + * + * let stream = empty(); + * + * toArray(stream); // [] + * ``` + */ + function empty() { + return new EmptyIterator(); + } + /** + * An iterator which is always empty. + */ + var EmptyIterator = /** @class */ (function () { + /** + * Construct a new empty iterator. + */ + function EmptyIterator() { + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + EmptyIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + EmptyIterator.prototype.clone = function () { + return new EmptyIterator(); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + EmptyIterator.prototype.next = function () { + return undefined; + }; + return EmptyIterator; + }()); + + // Copyright (c) Jupyter Development Team. + /** + * Filter an iterable for values which pass a test. + * + * @param object - The iterable or array-like object of interest. + * + * @param fn - The predicate function to invoke for each value. + * + * @returns An iterator which yields the values which pass the test. + * + * #### Example + * ```typescript + * import { filter, toArray } from '@lumino/algorithm'; + * + * let data = [1, 2, 3, 4, 5, 6]; + * + * let stream = filter(data, value => value % 2 === 0); + * + * toArray(stream); // [2, 4, 6] + * ``` + */ + function filter$1(object, fn) { + return new FilterIterator(iter(object), fn); + } + /** + * An iterator which yields values which pass a test. + */ + var FilterIterator = /** @class */ (function () { + /** + * Construct a new filter iterator. + * + * @param source - The iterator of values of interest. + * + * @param fn - The predicate function to invoke for each value. + */ + function FilterIterator(source, fn) { + this._index = 0; + this._source = source; + this._fn = fn; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + FilterIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + FilterIterator.prototype.clone = function () { + var result = new FilterIterator(this._source.clone(), this._fn); + result._index = this._index; + return result; + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + FilterIterator.prototype.next = function () { + var fn = this._fn; + var it = this._source; + var value; + while ((value = it.next()) !== undefined) { + if (fn(value, this._index++)) { + return value; + } + } + return undefined; + }; + return FilterIterator; + }()); + + // Copyright (c) Jupyter Development Team. + /** + * Find the first value in an iterable which matches a predicate. + * + * @param object - The iterable or array-like object to search. + * + * @param fn - The predicate function to apply to the values. + * + * @returns The first matching value, or `undefined` if no matching + * value is found. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { find } from '@lumino/algorithm'; + * + * interface IAnimal { species: string, name: string }; + * + * function isCat(value: IAnimal): boolean { + * return value.species === 'cat'; + * } + * + * let data: IAnimal[] = [ + * { species: 'dog', name: 'spot' }, + * { species: 'cat', name: 'fluffy' }, + * { species: 'alligator', name: 'pocho' } + * ]; + * + * find(data, isCat).name; // 'fluffy' + * ``` + */ + function find$1(object, fn) { + var index = 0; + var it = iter(object); + var value; + while ((value = it.next()) !== undefined) { + if (fn(value, index++)) { + return value; + } + } + return undefined; + } + /** + * Find the maximum value in an iterable. + * + * @param object - The iterable or array-like object to search. + * + * @param fn - The 3-way comparison function to apply to the values. + * It should return `< 0` if the first value is less than the second. + * `0` if the values are equivalent, or `> 0` if the first value is + * greater than the second. + * + * @returns The maximum value in the iterable. If multiple values are + * equivalent to the maximum, the left-most value is returned. If + * the iterable is empty, this returns `undefined`. + * + * #### Complexity + * Linear. + * + * #### Example + * ```typescript + * import { max } from '@lumino/algorithm'; + * + * function numberCmp(a: number, b: number): number { + * return a - b; + * } + * + * max([7, 4, 0, 3, 9, 4], numberCmp); // 9 + * ``` + */ + function max$1(object, fn) { + var it = iter(object); + var value = it.next(); + if (value === undefined) { + return undefined; + } + var result = value; + while ((value = it.next()) !== undefined) { + if (fn(value, result) > 0) { + result = value; + } + } + return result; + } + + // Copyright (c) Jupyter Development Team. + /** + * Transform the values of an iterable with a mapping function. + * + * @param object - The iterable or array-like object of interest. + * + * @param fn - The mapping function to invoke for each value. + * + * @returns An iterator which yields the transformed values. + * + * #### Example + * ```typescript + * import { map, toArray } from '@lumino/algorithm'; + * + * let data = [1, 2, 3]; + * + * let stream = map(data, value => value * 2); + * + * toArray(stream); // [2, 4, 6] + * ``` + */ + function map$1(object, fn) { + return new MapIterator(iter(object), fn); + } + /** + * An iterator which transforms values using a mapping function. + */ + var MapIterator = /** @class */ (function () { + /** + * Construct a new map iterator. + * + * @param source - The iterator of values of interest. + * + * @param fn - The mapping function to invoke for each value. + */ + function MapIterator(source, fn) { + this._index = 0; + this._source = source; + this._fn = fn; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + MapIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + MapIterator.prototype.clone = function () { + var result = new MapIterator(this._source.clone(), this._fn); + result._index = this._index; + return result; + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + MapIterator.prototype.next = function () { + var value = this._source.next(); + if (value === undefined) { + return undefined; + } + return this._fn.call(undefined, value, this._index++); + }; + return MapIterator; + }()); + /** + * The namespace for the module implementation details. + */ + var Private; + (function (Private) { + /** + * Compute the effective length of a range. + * + * @param start - The starting value for the range, inclusive. + * + * @param stop - The stopping value for the range, exclusive. + * + * @param step - The distance between each value. + * + * @returns The number of steps need to traverse the range. + */ + function rangeLength(start, stop, step) { + if (step === 0) { + return Infinity; + } + if (start > stop && step > 0) { + return 0; + } + if (start < stop && step < 0) { + return 0; + } + return Math.ceil((stop - start) / step); + } + Private.rangeLength = rangeLength; + })(Private || (Private = {})); + + // Copyright (c) Jupyter Development Team. + function reduce$1(object, fn, initial) { + // Setup the iterator and fetch the first value. + var index = 0; + var it = iter(object); + var first = it.next(); + // An empty iterator and no initial value is an error. + if (first === undefined && initial === undefined) { + throw new TypeError('Reduce of empty iterable with no initial value.'); + } + // If the iterator is empty, return the initial value. + if (first === undefined) { + return initial; + } + // If the iterator has a single item and no initial value, the + // reducer is not invoked and the first item is the return value. + var second = it.next(); + if (second === undefined && initial === undefined) { + return first; + } + // If iterator has a single item and an initial value is provided, + // the reducer is invoked and that result is the return value. + if (second === undefined) { + return fn(initial, first, index++); + } + // Setup the initial accumlated value. + var accumulator; + if (initial === undefined) { + accumulator = fn(first, second, index++); + } + else { + accumulator = fn(fn(initial, first, index++), second, index++); + } + // Iterate the rest of the values, updating the accumulator. + var next; + while ((next = it.next()) !== undefined) { + accumulator = fn(accumulator, next, index++); + } + // Return the final accumulated value. + return accumulator; + } + /** + * Create an iterator which yields a value a single time. + * + * @param value - The value to wrap in an iterator. + * + * @returns A new iterator which yields the value a single time. + * + * #### Example + * ```typescript + * import { once, toArray } from '@lumino/algorithm'; + * + * let stream = once(7); + * + * toArray(stream); // [7] + * ``` + */ + function once$1(value) { + return new RepeatIterator(value, 1); + } + /** + * An iterator which repeats a value a specified number of times. + */ + var RepeatIterator = /** @class */ (function () { + /** + * Construct a new repeat iterator. + * + * @param value - The value to repeat. + * + * @param count - The number of times to repeat the value. + */ + function RepeatIterator(value, count) { + this._value = value; + this._count = count; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + RepeatIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + RepeatIterator.prototype.clone = function () { + return new RepeatIterator(this._value, this._count); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + RepeatIterator.prototype.next = function () { + if (this._count <= 0) { + return undefined; + } + this._count--; + return this._value; + }; + return RepeatIterator; + }()); + + /** + * Create an iterator for a retroable object. + * + * @param object - The retroable or array-like object of interest. + * + * @returns An iterator which traverses the object's values in reverse. + * + * #### Example + * ```typescript + * import { retro, toArray } from '@lumino/algorithm'; + * + * let data = [1, 2, 3, 4, 5, 6]; + * + * let stream = retro(data); + * + * toArray(stream); // [6, 5, 4, 3, 2, 1] + * ``` + */ + function retro(object) { + var it; + if (typeof object.retro === 'function') { + it = object.retro(); + } + else { + it = new RetroArrayIterator(object); + } + return it; + } + /** + * An iterator which traverses an array-like object in reverse. + * + * #### Notes + * This iterator can be used for any builtin JS array-like object. + */ + var RetroArrayIterator = /** @class */ (function () { + /** + * Construct a new retro iterator. + * + * @param source - The array-like object of interest. + */ + function RetroArrayIterator(source) { + this._source = source; + this._index = source.length - 1; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + RetroArrayIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + RetroArrayIterator.prototype.clone = function () { + var result = new RetroArrayIterator(this._source); + result._index = this._index; + return result; + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + RetroArrayIterator.prototype.next = function () { + if (this._index < 0 || this._index >= this._source.length) { + return undefined; + } + return this._source[this._index--]; + }; + return RetroArrayIterator; + }()); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for string-specific algorithms. + */ + var StringExt; + (function (StringExt) { + /** + * Find the indices of characters in a source text. + * + * @param source - The source text which should be searched. + * + * @param query - The characters to locate in the source text. + * + * @param start - The index to start the search. + * + * @returns The matched indices, or `null` if there is no match. + * + * #### Complexity + * Linear on `sourceText`. + * + * #### Notes + * In order for there to be a match, all of the characters in `query` + * **must** appear in `source` in the order given by `query`. + * + * Characters are matched using strict `===` equality. + */ + function findIndices(source, query, start) { + if (start === void 0) { start = 0; } + var indices = new Array(query.length); + for (var i = 0, j = start, n = query.length; i < n; ++i, ++j) { + j = source.indexOf(query[i], j); + if (j === -1) { + return null; + } + indices[i] = j; + } + return indices; + } + StringExt.findIndices = findIndices; + /** + * A string matcher which uses a sum-of-squares algorithm. + * + * @param source - The source text which should be searched. + * + * @param query - The characters to locate in the source text. + * + * @param start - The index to start the search. + * + * @returns The match result, or `null` if there is no match. + * A lower `score` represents a stronger match. + * + * #### Complexity + * Linear on `sourceText`. + * + * #### Notes + * This scoring algorithm uses a sum-of-squares approach to determine + * the score. In order for there to be a match, all of the characters + * in `query` **must** appear in `source` in order. The index of each + * matching character is squared and added to the score. This means + * that early and consecutive character matches are preferred, while + * late matches are heavily penalized. + */ + function matchSumOfSquares(source, query, start) { + if (start === void 0) { start = 0; } + var indices = findIndices(source, query, start); + if (!indices) { + return null; + } + var score = 0; + for (var i = 0, n = indices.length; i < n; ++i) { + var j = indices[i] - start; + score += j * j; + } + return { score: score, indices: indices }; + } + StringExt.matchSumOfSquares = matchSumOfSquares; + /** + * A string matcher which uses a sum-of-deltas algorithm. + * + * @param source - The source text which should be searched. + * + * @param query - The characters to locate in the source text. + * + * @param start - The index to start the search. + * + * @returns The match result, or `null` if there is no match. + * A lower `score` represents a stronger match. + * + * #### Complexity + * Linear on `sourceText`. + * + * #### Notes + * This scoring algorithm uses a sum-of-deltas approach to determine + * the score. In order for there to be a match, all of the characters + * in `query` **must** appear in `source` in order. The delta between + * the indices are summed to create the score. This means that groups + * of matched characters are preferred, while fragmented matches are + * penalized. + */ + function matchSumOfDeltas(source, query, start) { + if (start === void 0) { start = 0; } + var indices = findIndices(source, query, start); + if (!indices) { + return null; + } + var score = 0; + var last = start - 1; + for (var i = 0, n = indices.length; i < n; ++i) { + var j = indices[i]; + score += j - last - 1; + last = j; + } + return { score: score, indices: indices }; + } + StringExt.matchSumOfDeltas = matchSumOfDeltas; + /** + * Highlight the matched characters of a source text. + * + * @param source - The text which should be highlighted. + * + * @param indices - The indices of the matched characters. They must + * appear in increasing order and must be in bounds of the source. + * + * @param fn - The function to apply to the matched chunks. + * + * @returns An array of unmatched and highlighted chunks. + */ + function highlight(source, indices, fn) { + // Set up the result array. + var result = []; + // Set up the counter variables. + var k = 0; + var last = 0; + var n = indices.length; + // Iterator over each index. + while (k < n) { + // Set up the chunk indices. + var i = indices[k]; + var j = indices[k]; + // Advance the right chunk index until it's non-contiguous. + while (++k < n && indices[k] === j + 1) { + j++; + } + // Extract the unmatched text. + if (last < i) { + result.push(source.slice(last, i)); + } + // Extract and highlight the matched text. + if (i < j + 1) { + result.push(fn(source.slice(i, j + 1))); + } + // Update the last visited index. + last = j + 1; + } + // Extract any remaining unmatched text. + if (last < source.length) { + result.push(source.slice(last)); + } + // Return the highlighted result. + return result; + } + StringExt.highlight = highlight; + /** + * A 3-way string comparison function. + * + * @param a - The first string of interest. + * + * @param b - The second string of interest. + * + * @returns `-1` if `a < b`, else `1` if `a > b`, else `0`. + */ + function cmp(a, b) { + return a < b ? -1 : a > b ? 1 : 0; + } + StringExt.cmp = cmp; + })(StringExt || (StringExt = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2019, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for clipboard related functionality. + */ + var ClipboardExt; + (function (ClipboardExt) { + /** + * Copy text to the system clipboard. + * + * @param text - The text to copy to the clipboard. + */ + function copyText(text) { + // Fetch the document body. + var body = document.body; + // Set up the clipboard event listener. + var handler = function (event) { + // Stop the event propagation. + event.preventDefault(); + event.stopPropagation(); + // Set the clipboard data. + event.clipboardData.setData('text', text); + // Remove the event listener. + body.removeEventListener('copy', handler, true); + }; + // Add the event listener. + body.addEventListener('copy', handler, true); + // Trigger the event. + document.execCommand('copy'); + } + ClipboardExt.copyText = copyText; + })(ClipboardExt || (ClipboardExt = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for element related utilities. + */ + var ElementExt; + (function (ElementExt) { + /** + * Compute the box sizing for an element. + * + * @param element - The element of interest. + * + * @returns The box sizing data for the specified element. + */ + function boxSizing(element) { + var style = window.getComputedStyle(element); + var bt = parseFloat(style.borderTopWidth) || 0; + var bl = parseFloat(style.borderLeftWidth) || 0; + var br = parseFloat(style.borderRightWidth) || 0; + var bb = parseFloat(style.borderBottomWidth) || 0; + var pt = parseFloat(style.paddingTop) || 0; + var pl = parseFloat(style.paddingLeft) || 0; + var pr = parseFloat(style.paddingRight) || 0; + var pb = parseFloat(style.paddingBottom) || 0; + var hs = bl + pl + pr + br; + var vs = bt + pt + pb + bb; + return { + borderTop: bt, + borderLeft: bl, + borderRight: br, + borderBottom: bb, + paddingTop: pt, + paddingLeft: pl, + paddingRight: pr, + paddingBottom: pb, + horizontalSum: hs, + verticalSum: vs + }; + } + ElementExt.boxSizing = boxSizing; + /** + * Compute the size limits for an element. + * + * @param element - The element of interest. + * + * @returns The size limit data for the specified element. + */ + function sizeLimits(element) { + var style = window.getComputedStyle(element); + var minWidth = parseFloat(style.minWidth) || 0; + var minHeight = parseFloat(style.minHeight) || 0; + var maxWidth = parseFloat(style.maxWidth) || Infinity; + var maxHeight = parseFloat(style.maxHeight) || Infinity; + maxWidth = Math.max(minWidth, maxWidth); + maxHeight = Math.max(minHeight, maxHeight); + return { minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight }; + } + ElementExt.sizeLimits = sizeLimits; + /** + * Test whether a client position lies within an element. + * + * @param element - The DOM element of interest. + * + * @param clientX - The client X coordinate of interest. + * + * @param clientY - The client Y coordinate of interest. + * + * @returns Whether the point is within the given element. + */ + function hitTest(element, clientX, clientY) { + var rect = element.getBoundingClientRect(); + return (clientX >= rect.left && + clientX < rect.right && + clientY >= rect.top && + clientY < rect.bottom); + } + ElementExt.hitTest = hitTest; + /** + * Vertically scroll an element into view if needed. + * + * @param area - The scroll area element. + * + * @param element - The element of interest. + * + * #### Notes + * This follows the "nearest" behavior of the native `scrollIntoView` + * method, which is not supported by all browsers. + * https://drafts.csswg.org/cssom-view/#element-scrolling-members + * + * If the element fully covers the visible area or is fully contained + * within the visible area, no scrolling will take place. Otherwise, + * the nearest edges of the area and element are aligned. + */ + function scrollIntoViewIfNeeded(area, element) { + var ar = area.getBoundingClientRect(); + var er = element.getBoundingClientRect(); + if (er.top <= ar.top && er.bottom >= ar.bottom) { + return; + } + if (er.top < ar.top && er.height <= ar.height) { + area.scrollTop -= ar.top - er.top; + return; + } + if (er.bottom > ar.bottom && er.height >= ar.height) { + area.scrollTop -= ar.top - er.top; + return; + } + if (er.top < ar.top && er.height > ar.height) { + area.scrollTop -= ar.bottom - er.bottom; + return; + } + if (er.bottom > ar.bottom && er.height < ar.height) { + area.scrollTop -= ar.bottom - er.bottom; + return; + } + } + ElementExt.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded; + })(ElementExt || (ElementExt = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for platform related utilities. + */ + var Platform; + (function (Platform) { + /** + * A flag indicating whether the platform is Mac. + */ + Platform.IS_MAC = !!navigator.platform.match(/Mac/i); + /** + * A flag indicating whether the platform is Windows. + */ + Platform.IS_WIN = !!navigator.platform.match(/Win/i); + /** + * A flag indicating whether the browser is IE. + */ + Platform.IS_IE = /Trident/.test(navigator.userAgent); + /** + * A flag indicating whether the browser is Edge. + */ + Platform.IS_EDGE = /Edge/.test(navigator.userAgent); + /** + * Test whether the `accel` key is pressed. + * + * @param event - The keyboard or mouse event of interest. + * + * @returns Whether the `accel` key is pressed. + * + * #### Notes + * On Mac the `accel` key is the command key. On all other + * platforms the `accel` key is the control key. + */ + function accelKey(event) { + return Platform.IS_MAC ? event.metaKey : event.ctrlKey; + } + Platform.accelKey = accelKey; + })(Platform || (Platform = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * The namespace for selector related utilities. + */ + var Selector; + (function (Selector) { + /** + * Calculate the specificity of a single CSS selector. + * + * @param selector - The CSS selector of interest. + * + * @returns The specificity of the selector. + * + * #### Undefined Behavior + * The selector is invalid. + * + * #### Notes + * This is based on https://www.w3.org/TR/css3-selectors/#specificity + * + * A larger number represents a more specific selector. + * + * The smallest possible specificity is `0`. + * + * The result is represented as a hex number `0x` where + * each component is the count of the respective selector clause. + * + * If the selector contains commas, only the first clause is used. + * + * The computed result is cached, so subsequent calculations for the + * same selector are extremely fast. + */ + function calculateSpecificity(selector) { + if (selector in Private$1.specificityCache) { + return Private$1.specificityCache[selector]; + } + var result = Private$1.calculateSingle(selector); + return Private$1.specificityCache[selector] = result; + } + Selector.calculateSpecificity = calculateSpecificity; + /** + * Test whether a selector is a valid CSS selector. + * + * @param selector - The CSS selector of interest. + * + * @returns `true` if the selector is valid, `false` otherwise. + * + * #### Notes + * The computed result is cached, so subsequent tests for the same + * selector are extremely fast. + */ + function isValid(selector) { + if (selector in Private$1.validityCache) { + return Private$1.validityCache[selector]; + } + var result = true; + try { + Private$1.testElem.querySelector(selector); + } + catch (err) { + result = false; + } + return Private$1.validityCache[selector] = result; + } + Selector.isValid = isValid; + /** + * Test whether an element matches a CSS selector. + * + * @param element - The element of interest. + * + * @param selector - The valid CSS selector of interest. + * + * @returns `true` if the element is a match, `false` otherwise. + * + * #### Notes + * This function uses the builtin browser capabilities when possible, + * falling back onto a document query otherwise. + */ + function matches(element, selector) { + return Private$1.protoMatchFunc.call(element, selector); + } + Selector.matches = matches; + })(Selector || (Selector = {})); + /** + * The namespace for the module implementation details. + */ + var Private$1; + (function (Private) { + /** + * A cache of computed selector specificity values. + */ + Private.specificityCache = Object.create(null); + /** + * A cache of computed selector validity. + */ + Private.validityCache = Object.create(null); + /** + * An empty element for testing selector validity. + */ + Private.testElem = document.createElement('div'); + /** + * A cross-browser CSS selector matching prototype function. + */ + Private.protoMatchFunc = (function () { + var proto = Element.prototype; + return (proto.matches || + proto.matchesSelector || + proto.mozMatchesSelector || + proto.msMatchesSelector || + proto.oMatchesSelector || + proto.webkitMatchesSelector || + (function (selector) { + var elem = this; + var matches = elem.ownerDocument ? elem.ownerDocument.querySelectorAll(selector) : []; + return Array.prototype.indexOf.call(matches, elem) !== -1; + })); + })(); + /** + * Calculate the specificity of a single selector. + * + * The behavior is undefined if the selector is invalid. + */ + function calculateSingle(selector) { + // Ignore anything after the first comma. + selector = selector.split(',', 1)[0]; + // Setup the aggregate counters. + var a = 0; + var b = 0; + var c = 0; + // Apply a regex to the front of the selector. If it succeeds, that + // portion of the selector is removed. Returns a success/fail flag. + function match(re) { + var match = selector.match(re); + if (match === null) { + return false; + } + selector = selector.slice(match[0].length); + return true; + } + // Replace the negation pseudo-class (which is ignored), + // but keep its inner content (which is not ignored). + selector = selector.replace(NEGATION_RE, ' $1 '); + // Continue matching until the selector is consumed. + while (selector.length > 0) { + // Match an ID selector. + if (match(ID_RE)) { + a++; + continue; + } + // Match a class selector. + if (match(CLASS_RE)) { + b++; + continue; + } + // Match an attribute selector. + if (match(ATTR_RE)) { + b++; + continue; + } + // Match a pseudo-element selector. This is done before matching + // a pseudo-class since this regex overlaps with that regex. + if (match(PSEUDO_ELEM_RE)) { + c++; + continue; + } + // Match a pseudo-class selector. + if (match(PSEDUO_CLASS_RE)) { + b++; + continue; + } + // Match a plain type selector. + if (match(TYPE_RE)) { + c++; + continue; + } + // Finally, match any ignored characters. + if (match(IGNORE_RE)) { + continue; + } + // At this point, the selector is assumed to be invalid. + return 0; + } + // Clamp each component to a reasonable base. + a = Math.min(a, 0xFF); + b = Math.min(b, 0xFF); + c = Math.min(c, 0xFF); + // Combine the components into a single result. + return (a << 16) | (b << 8) | c; + } + Private.calculateSingle = calculateSingle; + /** + * A regex which matches an ID selector at string start. + */ + var ID_RE = /^#[^\s\+>~#\.\[:]+/; + /** + * A regex which matches a class selector at string start. + */ + var CLASS_RE = /^\.[^\s\+>~#\.\[:]+/; + /** + * A regex which matches an attribute selector at string start. + */ + var ATTR_RE = /^\[[^\]]+\]/; + /** + * A regex which matches a type selector at string start. + */ + var TYPE_RE = /^[^\s\+>~#\.\[:]+/; + /** + * A regex which matches a pseudo-element selector at string start. + */ + var PSEUDO_ELEM_RE = /^(::[^\s\+>~#\.\[:]+|:first-line|:first-letter|:before|:after)/; + /** + * A regex which matches a pseudo-class selector at string start. + */ + var PSEDUO_CLASS_RE = /^:[^\s\+>~#\.\[:]+/; + /** + * A regex which matches ignored characters at string start. + */ + var IGNORE_RE = /^[\s\+>~\*]+/; + /** + * A regex which matches the negation pseudo-class globally. + */ + var NEGATION_RE = /:not\(([^\)]+)\)/g; + })(Private$1 || (Private$1 = {})); + + // Copyright (c) Jupyter Development Team. + /** + * A generic B+ tree. + * + * #### Notes + * Most operations have `O(log32 n)` or better complexity. + */ + var BPlusTree = /** @class */ (function () { + /** + * Construct a new B+ tree. + * + * @param cmp - The item comparison function for the tree. + */ + function BPlusTree(cmp) { + this._root = new Private$2.LeafNode(); + this.cmp = cmp; + } + Object.defineProperty(BPlusTree.prototype, "isEmpty", { + /** + * Whether the tree is empty. + * + * #### Complexity + * `O(1)` + */ + get: function () { + return this._root.size === 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BPlusTree.prototype, "size", { + /** + * The size of the tree. + * + * #### Complexity + * `O(1)` + */ + get: function () { + return this._root.size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BPlusTree.prototype, "first", { + /** + * The first item in the tree. + * + * This is `undefined` if the tree is empty. + * + * #### Complexity + * `O(log32 n)` + */ + get: function () { + var node = Private$2.firstLeaf(this._root); + return node.size > 0 ? node.items[0] : undefined; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BPlusTree.prototype, "last", { + /** + * The last item in the tree. + * + * This is `undefined` if the tree is empty. + * + * #### Complexity + * `O(log32 n)` + */ + get: function () { + var node = Private$2.lastLeaf(this._root); + return node.size > 0 ? node.items[node.size - 1] : undefined; + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator over the items in the tree. + * + * @returns A new iterator starting with the first item. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.iter = function () { + return Private$2.iterItems(this._root); + }; + /** + * Create a reverse iterator over the items in the tree. + * + * @returns A new iterator starting with the last item. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.retro = function () { + return Private$2.retroItems(this._root); + }; + /** + * Create an iterator for a slice of items in the tree. + * + * @param start - The index of the first item, inclusive. This + * should be `< stop`. Negative values are taken as an offset + * from the end of the tree. The default is `0`. + * + * @param stop - The index of the last item, exclusive. This + * should be `> start`. Negative values are taken as an offset + * from the end of the tree. The default is `size`. + * + * @returns A new iterator starting with the specified item. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.slice = function (start, stop) { + return Private$2.sliceItems(this._root, start, stop); + }; + /** + * Create a reverse iterator for a slice of items in the tree. + * + * @param start - The index of the first item, inclusive. This + * should be `> stop`. Negative values are taken as an offset + * from the end of the tree. The default is `size - 1`. + * + * @param stop - The index of the last item, exclusive. This + * should be `< start`. Negative values are taken as an offset + * from the end of the tree. The default is `-size - 1`. + * + * @returns A new reverse iterator starting with the specified item. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.retroSlice = function (start, stop) { + return Private$2.retroSliceItems(this._root, start, stop); + }; + /** + * Get the item at a particular index. + * + * @param index - The index of the item of interest. Negative + * values are taken as an offset from the end of the tree. + * + * @returns The item at the specified index, or `undefined` if + * the index is out of range. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.at = function (index) { + return Private$2.itemAt(this._root, index); + }; + /** + * Test whether the tree has an item which matches a key. + * + * @param key - The key of interest. + * + * @param cmp - A function which compares an item against the key. + * + * @returns `true` if the tree has an item which matches the given + * key, `false` otherwise. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.has = function (key, cmp) { + return Private$2.hasItem(this._root, key, cmp); + }; + /** + * Get the index of an item which matches a key. + * + * @param key - The key of interest. + * + * @param cmp - A function which compares an item against the key. + * + * @returns The index of the item which matches the given key. A + * negative value means that a matching item does not exist in + * the tree, but if one did it would reside at `-index - 1`. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.indexOf = function (key, cmp) { + return Private$2.indexOf(this._root, key, cmp); + }; + /** + * Get the item which matches a key. + * + * @param item - The key of interest. + * + * @param cmp - A function which compares an item against the key. + * + * @returns The item which matches the given key, or `undefined` if + * the tree does not have a matching item. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.get = function (key, cmp) { + return Private$2.getItem(this._root, key, cmp); + }; + /** + * Assign new items to the tree, replacing all current items. + * + * @param items - The items to assign to the tree. + * + * #### Complexity + * `O(n log32 n)` + */ + BPlusTree.prototype.assign = function (items) { + this.clear(); + this.update(items); + }; + /** + * Insert an item into the tree. + * + * @param item - The item of interest. + * + * @returns If the given item matches an existing item in the tree, + * the given item will replace it, and the existing item will be + * returned. Otherwise, this method returns `undefined`. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.insert = function (item) { + var existing = Private$2.insertItem(this._root, item, this.cmp); + this._root = Private$2.maybeSplitRoot(this._root); + return existing; + }; + /** + * Update the tree with multiple items. + * + * @param items - The items to insert into the tree. + * + * #### Complexity + * `O(k log32 n)` + */ + BPlusTree.prototype.update = function (items) { + var _this = this; + each$1(items, function (item) { _this.insert(item); }); + }; + /** + * Delete an item which matches a particular key. + * + * @param key - The key of interest. + * + * @param cmp - A function which compares an item against the key. + * + * @returns The item removed from the tree, or `undefined` if no + * item matched the given key. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.delete = function (key, cmp) { + var item = Private$2.deleteItem(this._root, key, cmp); + this._root = Private$2.maybeExtractRoot(this._root); + return item; + }; + /** + * Remove an item at a particular index. + * + * @param index - The index of the item to remove. Negative + * values are taken as an offset from the end of the tree. + * + * @returns The item removed from the tree, or `undefined` if + * the given index is out of range. + * + * #### Complexity + * `O(log32 n)` + */ + BPlusTree.prototype.remove = function (index) { + var item = Private$2.removeItem(this._root, index); + this._root = Private$2.maybeExtractRoot(this._root); + return item; + }; + /** + * Clear the contents of the tree. + * + * #### Complexity + * `O(n)` + */ + BPlusTree.prototype.clear = function () { + Private$2.clear(this._root); + this._root = new Private$2.LeafNode(); + }; + return BPlusTree; + }()); + /** + * The namespace for the `BPlusTree` class statics. + */ + (function (BPlusTree) { + /** + * Create a new B+ tree populated with the given items. + * + * @param items - The items to add to the tree. + * + * @param cmp - The item comparison function for the tree. + * + * @returns A new B+ tree populated with the given items. + * + * #### Complexity + * `O(n log32 n)` + */ + function from(items, cmp) { + var tree = new BPlusTree(cmp); + tree.assign(items); + return tree; + } + BPlusTree.from = from; + })(BPlusTree || (BPlusTree = {})); + /** + * The namespace for the module implementation details. + */ + var Private$2; + (function (Private) { + /** + * A branch node in a B+ tree. + */ + var BranchNode = /** @class */ (function () { + function BranchNode() { + /** + * The left-most item of each child subtree. + */ + this.items = []; + /** + * The cumulative sizes of each child subtree. + */ + this.sizes = []; + /** + * The child nodes of this branch node. + */ + this.children = []; + } + Object.defineProperty(BranchNode.prototype, "type", { + /** + * The discriminated type of the node. + */ + get: function () { + return 0 /* Branch */; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BranchNode.prototype, "size", { + /** + * The total number of items in the subtree. + */ + get: function () { + return this.sizes[this.sizes.length - 1]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BranchNode.prototype, "width", { + /** + * The tree width of the node. + */ + get: function () { + return this.children.length; + }, + enumerable: true, + configurable: true + }); + return BranchNode; + }()); + Private.BranchNode = BranchNode; + /** + * A leaf node in a B+ tree. + */ + var LeafNode = /** @class */ (function () { + function LeafNode() { + /** + * The next sibling leaf node of this leaf node. + */ + this.next = null; + /** + * The previous sibling leaf node of this leaf node. + */ + this.prev = null; + /** + * The items of the leaf. + */ + this.items = []; + } + Object.defineProperty(LeafNode.prototype, "type", { + /** + * The discriminated type of the node. + */ + get: function () { + return 1 /* Leaf */; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LeafNode.prototype, "size", { + /** + * The total number of items in the leaf. + */ + get: function () { + return this.items.length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LeafNode.prototype, "width", { + /** + * The tree width of the node. + */ + get: function () { + return this.items.length; + }, + enumerable: true, + configurable: true + }); + return LeafNode; + }()); + Private.LeafNode = LeafNode; + /** + * Get the first leaf node in the tree. + * + * @param node - The root node of interest. + * + * @returns The first leaf node in the tree. + * + * #### Complexity + * `O(log32 n)` + */ + function firstLeaf(node) { + while (node.type === 0 /* Branch */) { + node = node.children[0]; + } + return node; + } + Private.firstLeaf = firstLeaf; + /** + * Get the last leaf node in the tree. + * + * @param node - The root node of interest. + * + * @returns The last leaf node in the tree. + * + * #### Complexity + * `O(log32 n)` + */ + function lastLeaf(node) { + while (node.type === 0 /* Branch */) { + node = node.children[node.children.length - 1]; + } + return node; + } + Private.lastLeaf = lastLeaf; + /** + * Create a forward iterator for the items in the tree. + * + * @param node - The root node of interest. + * + * @returns A new forward iterator starting with the first item. + * + * #### Complexity + * `O(log32 n)` + */ + function iterItems(node) { + var leaf = firstLeaf(node); + return new ForwardIterator(leaf, 0, -1); + } + Private.iterItems = iterItems; + /** + * Create a reverse iterator for the items in the tree. + * + * @param node - The root node of interest. + * + * @returns A new reverse iterator starting with the last item. + * + * #### Complexity + * `O(log32 n)` + */ + function retroItems(node) { + var leaf = lastLeaf(node); + return new RetroIterator(leaf, leaf.size - 1, -1); + } + Private.retroItems = retroItems; + /** + * Create an iterator for a slice of items in the tree. + * + * @param node - The root node of interest. + * + * @param start - The index of the first item, inclusive. This + * should be `< stop`. Negative values are taken as an offset + * from the end of the tree. The default is `0`. + * + * @param stop - The index of the last item, exclusive. This + * should be `> start`. Negative values are taken as an offset + * from the end of the tree. The default is `size`. + * + * @returns A new iterator starting with the specified item. + * + * #### Complexity + * `O(log32 n)` + */ + function sliceItems(node, start, stop) { + // Normalize the start index. + if (start === undefined) { + start = 0; + } + else if (start < 0) { + start = Math.max(0, start + node.size); + } + else { + start = Math.min(start, node.size); + } + // Normalize the stop index. + if (stop === undefined) { + stop = node.size; + } + else if (stop < 0) { + stop = Math.max(0, stop + node.size); + } + else { + stop = Math.min(stop, node.size); + } + // Compute effective count. + var count = Math.max(0, stop - start); + // Bail early if there is nothing to iterate. + if (count === 0) { + return empty(); + } + // Find the starting leaf node and local index. + while (node.type === 0 /* Branch */) { + var i = findPivotIndexByIndex(node.sizes, start); + if (i > 0) + start -= node.sizes[i - 1]; + node = node.children[i]; + } + // Return the forward iterator for the range. + return new ForwardIterator(node, start, count); + } + Private.sliceItems = sliceItems; + /** + * Create a reverse iterator for a slice of items in the tree. + * + * @param node - The root node of interest. + * + * @param start - The index of the first item, inclusive. This + * should be `> stop`. Negative values are taken as an offset + * from the end of the tree. The default is `size - 1`. + * + * @param stop - The index of the last item, exclusive. This + * should be `< start`. Negative values are taken as an offset + * from the end of the tree. The default is `-size - 1`. + * + * @returns A new reverse iterator starting with the specified item. + * + * #### Complexity + * `O(log32 n)` + */ + function retroSliceItems(node, start, stop) { + // Normalize the start index. + if (start === undefined) { + start = node.size - 1; + } + else if (start < 0) { + start = Math.max(-1, start + node.size); + } + else { + start = Math.min(start, node.size - 1); + } + // Normalize the stop index. + if (stop === undefined) { + stop = -1; + } + else if (stop < 0) { + stop = Math.max(-1, stop + node.size); + } + else { + stop = Math.min(stop, node.size - 1); + } + // Compute the effective count. + var count = Math.max(0, start - stop); + // Bail early if there is nothing to iterate. + if (count === 0) { + return empty(); + } + // Find the starting leaf node and local index. + while (node.type === 0 /* Branch */) { + var i = findPivotIndexByIndex(node.sizes, start); + if (i > 0) + start -= node.sizes[i - 1]; + node = node.children[i]; + } + // Return the retro iterator for the range. + return new RetroIterator(node, start, count); + } + Private.retroSliceItems = retroSliceItems; + /** + * Get the item at the specified index. + * + * @param node - The root node of interest. + * + * @param index - The index of the item of interest. Negative + * values are taken as an offset from the end of the tree. + * + * @returns The item at the specified index, or `undefined` if + * the index is out of range. + * + * #### Complexity + * `O(log32 n)` + */ + function itemAt(node, index) { + // Wrap negative indices. + if (index < 0) { + index += node.size; + } + // Bail early if the index is out of range. + if (index < 0 || index >= node.size) { + return undefined; + } + // Find the containing leaf node and local index. + while (node.type === 0 /* Branch */) { + var i = findPivotIndexByIndex(node.sizes, index); + if (i > 0) + index -= node.sizes[i - 1]; + node = node.children[i]; + } + // Return the item at the specified index. + return node.items[index]; + } + Private.itemAt = itemAt; + /** + * Test whether the tree contains an item which matches a key. + * + * @param node - The root node of interest. + * + * @param key - The key of interest. + * + * @param cmp - The key comparison function. + * + * @returns Whether the tree contains a matching item. + * + * #### Complexity + * `O(log32 n)` + */ + function hasItem(node, key, cmp) { + // Find the containing leaf node. + while (node.type === 0 /* Branch */) { + var i_1 = findPivotIndexByKey(node.items, key, cmp); + node = node.children[i_1]; + } + // Find the key index. + var i = findKeyIndex(node.items, key, cmp); + // Return whether or not the node contains a matching item. + return i >= 0; + } + Private.hasItem = hasItem; + /** + * Get the index of the item which matches a key. + * + * @param node - The node of interest. + * + * @param key - The key of interest. + * + * @param cmp - The key comparison function. + * + * @returns The index of the item which matches the given key. A + * negative value means that a matching item does not exist in + * the tree, but if one did it would reside at `-index - 1`. + * + * #### Complexity + * `O(log32 n)` + */ + function indexOf(node, key, cmp) { + // Set up the global index. + var index = 0; + // Find the containing leaf node and global index. + while (node.type === 0 /* Branch */) { + var i_2 = findPivotIndexByKey(node.items, key, cmp); + if (i_2 > 0) + index += node.sizes[i_2 - 1]; + node = node.children[i_2]; + } + // Find the key index. + var i = findKeyIndex(node.items, key, cmp); + // Return the final computed index. + return i >= 0 ? index + i : -index + i; + } + Private.indexOf = indexOf; + /** + * Get the item for a particular key. + * + * @param node - The node of interest. + * + * @param key - The key of interest. + * + * @param cmp - The key comparison function. + * + * @returns The item for the specified key, or `undefined` if + * the tree does not have a matching item for the key. + * + * #### Complexity + * `O(log32 n)` + */ + function getItem(node, key, cmp) { + // Find the containing leaf node. + while (node.type === 0 /* Branch */) { + var i_3 = findPivotIndexByKey(node.items, key, cmp); + node = node.children[i_3]; + } + // Find the key index. + var i = findKeyIndex(node.items, key, cmp); + // Return the item for the given key. + return i >= 0 ? node.items[i] : undefined; + } + Private.getItem = getItem; + /** + * Insert an item into the tree. + * + * @param node - The root node of interest. + * + * @param item - The item of interest. + * + * @param cmp - The item comparison function. + * + * @returns If the given item matches an existing item in the tree, + * the given item will replace it, and the existing item will be + * returned. Otherwise, this function returns `undefined`. + * + * #### Complexity + * `O(log32 n)` + * + * #### Notes + * The root may be overfull after calling this function. + */ + function insertItem(node, item, cmp) { + // Handle leaf nodes first. + if (node.type === 1 /* Leaf */) { + // Find the index for the given item. + var i_4 = findKeyIndex(node.items, item, cmp); + // Fetch the existing item and insert the new item. + var existing_1; + if (i_4 >= 0) { + existing_1 = node.items[i_4]; + node.items[i_4] = item; + } + else { + existing_1 = undefined; + ArrayExt.insert(node.items, -i_4 - 1, item); + } + // Return the existing item. + return existing_1; + } + // Find the pivot index for the insert. + var i = findPivotIndexByKey(node.items, item, cmp); + // Fetch the pivot child. + var child = node.children[i]; + // Fetch the current size of the child. + var prevSize = child.size; + // Recursively insert the item into the child. + var existing = insertItem(child, item, cmp); + // Fetch the updated size of the child. + var currSize = child.size; + // Update the item state of the branch. + node.items[i] = child.items[0]; + // Bail early if the child size did not change. + if (prevSize === currSize) { + return existing; + } + // Split the child if it's overfull. + if (child.width > MAX_NODE_WIDTH) { + var next = splitNode(child); + ArrayExt.insert(node.children, i + 1, next); + ArrayExt.insert(node.items, i + 1, next.items[0]); + } + // Update the dirty sizes of the branch. + updateSizes(node, i); + // Return the existing item. + return existing; + } + Private.insertItem = insertItem; + /** + * Delete an item in the tree. + * + * @param node - The node of interest. + * + * @param key - The key of interest. + * + * @param cmp - The key comparison function. + * + * @returns The deleted item or `undefined`. + * + * #### Complexity + * `O(log32 n)` + * + * #### Notes + * The root may be underfull after calling this function. + */ + function deleteItem(node, key, cmp) { + // Handle leaf nodes first. + if (node.type === 1 /* Leaf */) { + // Find the index for the given key. + var i_5 = findKeyIndex(node.items, key, cmp); + // Bail early if the item does not exist. + if (i_5 < 0) { + return undefined; + } + // Remove the item at the computed index. + return ArrayExt.removeAt(node.items, i_5); + } + // Find the pivot index for the delete. + var i = findPivotIndexByKey(node.items, key, cmp); + // Fetch the pivot child. + var child = node.children[i]; + // Fetch the current size of the child. + var prevSize = child.size; + // Recursively remove the item from the child. + var item = deleteItem(child, key, cmp); + // Fetch the updated size of the child. + var currSize = child.size; + // Bail early if the child size did not change. + if (prevSize === currSize) { + return item; + } + // Update the item state of the branch. + node.items[i] = child.items[0]; + // Join the child if it's underfull. + if (child.width < MIN_NODE_WIDTH) { + i = joinChild(node, i); + } + // Update the dirty sizes of the branch. + updateSizes(node, i); + // Return the deleted item. + return item; + } + Private.deleteItem = deleteItem; + /** + * Remove an item from the tree. + * + * @param node - The node of interest. + * + * @param index - The index of interest. + * + * @returns The removed item or `undefined`. + * + * #### Complexity + * `O(log32 n)` + * + * #### Notes + * The root may be underfull after calling this function. + */ + function removeItem(node, index) { + // Wrap negative indices. + if (index < 0) { + index += node.size; + } + // Bail early if the index is out of range. + if (index < 0 || index >= node.size) { + return undefined; + } + // Handle leaf nodes first. + if (node.type === 1 /* Leaf */) { + return ArrayExt.removeAt(node.items, index); + } + // Find the pivot index for the remove. + var i = findPivotIndexByIndex(node.sizes, index); + if (i > 0) + index -= node.sizes[i]; + // Fetch the pivot child. + var child = node.children[i]; + // Recursively remove the item from the child. + var item = removeItem(child, index); + // Update the item state of the branch. + node.items[i] = child.items[0]; + // Join the child if it's underfull. + if (child.width < MIN_NODE_WIDTH) { + i = joinChild(node, i); + } + // Update the dirty sizes of the branch. + updateSizes(node, i); + // Return the removed item. + return item; + } + Private.removeItem = removeItem; + /** + * Recursively clear the contents of a node. + * + * @param node - The node of interest. + * + * #### Complexity + * `O(n)` + */ + function clear(node) { + if (node.type === 0 /* Branch */) { + each$1(node.children, clear); + node.children.length = 0; + node.sizes.length = 0; + node.items.length = 0; + } + else { + node.items.length = 0; + node.next = null; + node.prev = null; + } + } + Private.clear = clear; + /** + * Split a root node and create a new root, if needed. + * + * @param node - The root node of interest. + * + * @returns The new root node. + */ + function maybeSplitRoot(node) { + // Bail early if the current root is not overfull. + if (node.width <= MAX_NODE_WIDTH) { + return node; + } + // Create a new root branch node. + var root = new BranchNode(); + // Split the node to the right and create a new sibling. + var next = splitNode(node); + // Add the sizes to the root. + root.sizes[0] = node.size; + root.sizes[1] = node.size + next.size; + // Add the children to the root. + root.children[0] = node; + root.children[1] = next; + // Add the items to the root. + root.items[0] = node.items[0]; + root.items[1] = next.items[0]; + // Return the new root node. + return root; + } + Private.maybeSplitRoot = maybeSplitRoot; + /** + * Extract a single node child as a new root, if needed. + * + * @param node - The root node of interest. + * + * @returns The new root node. + */ + function maybeExtractRoot(node) { + // Bail early if the node it already a leaf. + if (node.type === 1 /* Leaf */) { + return node; + } + // Bail early if the branch has more than one child. + if (node.children.length > 1) { + return node; + } + // Extract the sole remaining child as the new root. + var root = node.children.pop(); + // Clear the rest of the node state. + clear(node); + // Return the new root. + return root; + } + Private.maybeExtractRoot = maybeExtractRoot; + /** + * The maximum width for a node in the tree. + */ + var MAX_NODE_WIDTH = 32; + /** + * The minimum width for a node in the tree. + */ + var MIN_NODE_WIDTH = MAX_NODE_WIDTH >> 1; + /** + * A forward iterator for a B+ tree. + */ + var ForwardIterator = /** @class */ (function () { + /** + * Construct a new forward iterator. + * + * @param node - The first leaf node in the chain. + * + * @param index - The local index of the first item. + * + * @param count - The number of items to iterate. A value `< 0` + * will iterate all available items. + */ + function ForwardIterator(node, index, count) { + this._node = node; + this._index = index; + this._count = count; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + ForwardIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + ForwardIterator.prototype.clone = function () { + return new ForwardIterator(this._node, this._index, this._count); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + ForwardIterator.prototype.next = function () { + if (this._node === null || this._count === 0) { + return undefined; + } + if (this._index >= this._node.size) { + this._node = this._node.next; + this._index = 0; + return this.next(); + } + if (this._count > 0) { + this._count--; + } + return this._node.items[this._index++]; + }; + return ForwardIterator; + }()); + /** + * A reverse iterator for a B+ tree. + */ + var RetroIterator = /** @class */ (function () { + /** + * Construct a new retro iterator. + * + * @param node - The last leaf node in the chain. + * + * @param index - The local index of the last item. + * + * @param count - The number of items to iterate. A value `< 0` + * will iterate all available items. + */ + function RetroIterator(node, index, count) { + this._node = node; + this._index = index; + this._count = count; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + RetroIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + RetroIterator.prototype.clone = function () { + return new RetroIterator(this._node, this._index, this._count); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + RetroIterator.prototype.next = function () { + if (this._node === null || this._count === 0) { + return undefined; + } + if (this._index >= this._node.size) { + this._index = this._node.size - 1; + } + if (this._index < 0) { + this._node = this._node.prev; + this._index = this._node ? this._node.size - 1 : -1; + return this.next(); + } + if (this._count > 0) { + this._count--; + } + return this._node.items[this._index--]; + }; + return RetroIterator; + }()); + /** + * Find the pivot index for a particular local index. + */ + function findPivotIndexByIndex(sizes, index) { + var n = sizes.length; + for (var i = 0; i < n; ++i) { + if (sizes[i] > index) { + return i; + } + } + return n - 1; + } + /** + * Find the pivot index for a particular key. + */ + function findPivotIndexByKey(items, key, cmp) { + var n = items.length; + for (var i = 1; i < n; ++i) { + if (cmp(items[i], key) > 0) { + return i - 1; + } + } + return n - 1; + } + /** + * Find the key index for a particular key. + */ + function findKeyIndex(items, key, cmp) { + var n = items.length; + for (var i = 0; i < n; ++i) { + var c = cmp(items[i], key); + if (c === 0) { + return i; + } + if (c > 0) { + return -i - 1; + } + } + return -n - 1; + } + /** + * Update the sizes of a branch node starting at the given index. + */ + function updateSizes(node, i) { + var sizes = node.sizes, children = node.children; + var last = i > 0 ? sizes[i - 1] : 0; + for (var n = children.length; i < n; ++i) { + last = sizes[i] = last + children[i].size; + } + sizes.length = children.length; + } + /** + * Split a node and return its new next sibling. + * + * @param node - The node of interest. + * + * @returns The new next sibling node. + */ + function splitNode(node) { + // Handle leaf nodes first. + if (node.type === 1 /* Leaf */) { + // Create the new sibling leaf node. + var next_1 = new LeafNode(); + // Move the items to the new sibling. + var v1_1 = node.items; + var v2_1 = next_1.items; + for (var i = MIN_NODE_WIDTH, n = v1_1.length; i < n; ++i) { + v2_1.push(v1_1[i]); + } + v1_1.length = MIN_NODE_WIDTH; + // Patch up the sibling links. + if (node.next) + node.next.prev = next_1; + next_1.next = node.next; + next_1.prev = node; + node.next = next_1; + // Return the new next sibling. + return next_1; + } + // Create the new sibling branch node. + var next = new BranchNode(); + // Move the children to the new sibling. + var c1 = node.children; + var c2 = next.children; + for (var i = MIN_NODE_WIDTH, n = c1.length; i < n; ++i) { + c2.push(c1[i]); + } + c1.length = MIN_NODE_WIDTH; + // Move the items to the new sibling. + var v1 = node.items; + var v2 = next.items; + for (var i = MIN_NODE_WIDTH, n = v1.length; i < n; ++i) { + v2.push(v1[i]); + } + v1.length = MIN_NODE_WIDTH; + // Update the dirty sizes of the nodes. + updateSizes(node, MIN_NODE_WIDTH); + updateSizes(next, 0); + // Return the new next sibling. + return next; + } + /** + * Join a child node of a branch with one of its siblings. + * + * @param node - The branch node of interest. + * + * @param i - The index of the child node of interest. + * + * @returns The first modified index. + * + * #### Notes + * This may cause the branch to become underfull. + */ + function joinChild(node, i) { + var _a, _b, _c, _d, _e, _f; + // Fetch the child to be joined. + var child = node.children[i]; + // Fetch the relevant sibling. + var sibling = i === 0 ? node.children[i + 1] : node.children[i - 1]; + // Compute the flags which control the join behavior. + var hasNext = i === 0; + var isLeaf = child.type === 1 /* Leaf */; + var hasExtra = sibling.width > MIN_NODE_WIDTH; + // Join case #1: steal from next sibling leaf + if (isLeaf && hasExtra && hasNext) { + // Cast the children as leaves. + var c = child; + var s = sibling; + // Steal an item. + c.items.push(s.items.shift()); + // Update the branch items. + node.items[i + 1] = s.items[0]; + // Return the first modified index. + return i; + } + // Join case #2: steal from previous sibling leaf + if (isLeaf && hasExtra && !hasNext) { + // Cast the children as leaves. + var c = child; + var s = sibling; + // Steal an item. + c.items.unshift(s.items.pop()); + // Update the branch items. + node.items[i] = c.items[0]; + // Return the first modified index. + return i - 1; + } + // Join case #3: merge with next sibling leaf + if (isLeaf && !hasExtra && hasNext) { + // Cast the children as leaves. + var c = child; + var s = sibling; + // Merge items. + (_a = s.items).unshift.apply(_a, c.items); + // Remove the old branch child. + ArrayExt.removeAt(node.children, i); + // Remove the stale branch item. + ArrayExt.removeAt(node.items, i + 1); + // Patch up the sibling links. + if (c.prev) + c.prev.next = s; + s.prev = c.prev; + // Clear the original child. + clear(c); + // Return the first modified index. + return i; + } + // Join case #4: merge with previous sibling leaf + if (isLeaf && !hasExtra && !hasNext) { + // Cast the children as leaves. + var c = child; + var s = sibling; + // Merge items. + (_b = s.items).push.apply(_b, c.items); + // Remove the old branch child. + ArrayExt.removeAt(node.children, i); + // Remove the stale branch item. + ArrayExt.removeAt(node.items, i); + // Patch up the sibling links. + if (c.next) + c.next.prev = s; + s.next = c.next; + // Clear the original child. + clear(c); + // Return the first modified index. + return i - 1; + } + // Join case #5: steal from next sibling branch + if (!isLeaf && hasExtra && hasNext) { + // Cast the children to branches. + var c = child; + var s = sibling; + // Steal a child from the next sibling. + c.children.push(s.children.shift()); + // Steal an item from the next sibling. + c.items.push(s.items.shift()); + // Update the branch items. + node.items[i + 1] = s.items[0]; + // Update the sibling sizes. + updateSizes(c, c.width - 1); + updateSizes(s, 0); + // Return the first modified index. + return i; + } + // Join case #6: steal from previous sibling branch + if (!isLeaf && hasExtra && !hasNext) { + // Cast the children to branches. + var c = child; + var s = sibling; + // Steal a child from the previous sibling. + c.children.unshift(s.children.pop()); + // Steal an item from the previous sibling. + c.items.unshift(s.items.pop()); + // Update the branch items. + node.items[i] = c.items[0]; + // Update the sibling sizes. + updateSizes(c, 0); + updateSizes(s, s.width - 1); + // Return the first modified index. + return i - 1; + } + // Join case #7: merge with next sibling branch + if (!isLeaf && !hasExtra && hasNext) { + // Cast the children to branches. + var c = child; + var s = sibling; + // Merge the children with the next sibling. + (_c = s.children).unshift.apply(_c, c.children); + // Merge the items with the next sibling. + (_d = s.items).unshift.apply(_d, c.items); + // Remove the old branch child. + ArrayExt.removeAt(node.children, i); + // Remove the stale branch item. + ArrayExt.removeAt(node.items, i + 1); + // Update the sibling sizes. + updateSizes(s, 0); + // Clear the original child but, not its children. + c.children.length = 0; + clear(c); + // Return the first modified index. + return i; + } + // Join case #8: merge with previous sibling branch + if (!isLeaf && !hasExtra && !hasNext) { + // Cast the children to branches. + var c = child; + var s = sibling; + // Merge the children with the previous sibling. + (_e = s.children).push.apply(_e, c.children); + // Merge the items with the previous sibling. + (_f = s.items).push.apply(_f, c.items); + // Remove the old branch child. + ArrayExt.removeAt(node.children, i); + // Remove the stale branch item. + ArrayExt.removeAt(node.items, i); + // Update the sibling sizes. + updateSizes(s, 0); + // Clear the original child, but not its children. + c.children.length = 0; + clear(c); + // Return the first modified index. + return i - 1; + } + // One of the above cases must match. + throw 'unreachable'; + } + })(Private$2 || (Private$2 = {})); + + // Copyright (c) Jupyter Development Team. + /** + * A generic doubly-linked list. + */ + var LinkedList = /** @class */ (function () { + /** + * Construct a new linked list. + */ + function LinkedList() { + this._first = null; + this._last = null; + this._size = 0; + } + Object.defineProperty(LinkedList.prototype, "isEmpty", { + /** + * Whether the list is empty. + * + * #### Complexity + * Constant. + */ + get: function () { + return this._size === 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "size", { + /** + * The size of the list. + * + * #### Complexity + * `O(1)` + * + * #### Notes + * This is equivalent to `length`. + */ + get: function () { + return this._size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "length", { + /** + * The length of the list. + * + * #### Complexity + * Constant. + * + * #### Notes + * This is equivalent to `size`. + * + * This property is deprecated. + */ + get: function () { + return this._size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "first", { + /** + * The first value in the list. + * + * This is `undefined` if the list is empty. + * + * #### Complexity + * Constant. + */ + get: function () { + return this._first ? this._first.value : undefined; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "last", { + /** + * The last value in the list. + * + * This is `undefined` if the list is empty. + * + * #### Complexity + * Constant. + */ + get: function () { + return this._last ? this._last.value : undefined; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "firstNode", { + /** + * The first node in the list. + * + * This is `null` if the list is empty. + * + * #### Complexity + * Constant. + */ + get: function () { + return this._first; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "lastNode", { + /** + * The last node in the list. + * + * This is `null` if the list is empty. + * + * #### Complexity + * Constant. + */ + get: function () { + return this._last; + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator over the values in the list. + * + * @returns A new iterator starting with the first value. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.iter = function () { + return new LinkedList.ForwardValueIterator(this._first); + }; + /** + * Create a reverse iterator over the values in the list. + * + * @returns A new iterator starting with the last value. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.retro = function () { + return new LinkedList.RetroValueIterator(this._last); + }; + /** + * Create an iterator over the nodes in the list. + * + * @returns A new iterator starting with the first node. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.nodes = function () { + return new LinkedList.ForwardNodeIterator(this._first); + }; + /** + * Create a reverse iterator over the nodes in the list. + * + * @returns A new iterator starting with the last node. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.retroNodes = function () { + return new LinkedList.RetroNodeIterator(this._last); + }; + /** + * Assign new values to the list, replacing all current values. + * + * @param values - The values to assign to the list. + * + * #### Complexity + * Linear. + */ + LinkedList.prototype.assign = function (values) { + var _this = this; + this.clear(); + each$1(values, function (value) { _this.addLast(value); }); + }; + /** + * Add a value to the end of the list. + * + * @param value - The value to add to the end of the list. + * + * #### Complexity + * Constant. + * + * #### Notes + * This is equivalent to `addLast`. + */ + LinkedList.prototype.push = function (value) { + this.addLast(value); + }; + /** + * Remove and return the value at the end of the list. + * + * @returns The removed value, or `undefined` if the list is empty. + * + * #### Complexity + * Constant. + * + * #### Notes + * This is equivalent to `removeLast`. + */ + LinkedList.prototype.pop = function () { + return this.removeLast(); + }; + /** + * Add a value to the beginning of the list. + * + * @param value - The value to add to the beginning of the list. + * + * #### Complexity + * Constant. + * + * #### Notes + * This is equivalent to `addFirst`. + */ + LinkedList.prototype.shift = function (value) { + this.addFirst(value); + }; + /** + * Remove and return the value at the beginning of the list. + * + * @returns The removed value, or `undefined` if the list is empty. + * + * #### Complexity + * Constant. + * + * #### Notes + * This is equivalent to `removeFirst`. + */ + LinkedList.prototype.unshift = function () { + return this.removeFirst(); + }; + /** + * Add a value to the beginning of the list. + * + * @param value - The value to add to the beginning of the list. + * + * @returns The list node which holds the value. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.addFirst = function (value) { + var node = new Private$1$1.LinkedListNode(this, value); + if (!this._first) { + this._first = node; + this._last = node; + } + else { + node.next = this._first; + this._first.prev = node; + this._first = node; + } + this._size++; + return node; + }; + /** + * Add a value to the end of the list. + * + * @param value - The value to add to the end of the list. + * + * @returns The list node which holds the value. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.addLast = function (value) { + var node = new Private$1$1.LinkedListNode(this, value); + if (!this._last) { + this._first = node; + this._last = node; + } + else { + node.prev = this._last; + this._last.next = node; + this._last = node; + } + this._size++; + return node; + }; + /** + * Insert a value before a specific node in the list. + * + * @param value - The value to insert before the reference node. + * + * @param ref - The reference node of interest. If this is `null`, + * the value will be added to the beginning of the list. + * + * @returns The list node which holds the value. + * + * #### Notes + * The reference node must be owned by the list. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.insertBefore = function (value, ref) { + if (!ref || ref === this._first) { + return this.addFirst(value); + } + if (!(ref instanceof Private$1$1.LinkedListNode) || ref.list !== this) { + throw new Error('Reference node is not owned by the list.'); + } + var node = new Private$1$1.LinkedListNode(this, value); + var _ref = ref; + var prev = _ref.prev; + node.next = _ref; + node.prev = prev; + _ref.prev = node; + prev.next = node; + this._size++; + return node; + }; + /** + * Insert a value after a specific node in the list. + * + * @param value - The value to insert after the reference node. + * + * @param ref - The reference node of interest. If this is `null`, + * the value will be added to the end of the list. + * + * @returns The list node which holds the value. + * + * #### Notes + * The reference node must be owned by the list. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.insertAfter = function (value, ref) { + if (!ref || ref === this._last) { + return this.addLast(value); + } + if (!(ref instanceof Private$1$1.LinkedListNode) || ref.list !== this) { + throw new Error('Reference node is not owned by the list.'); + } + var node = new Private$1$1.LinkedListNode(this, value); + var _ref = ref; + var next = _ref.next; + node.next = next; + node.prev = _ref; + _ref.next = node; + next.prev = node; + this._size++; + return node; + }; + /** + * Remove and return the value at the beginning of the list. + * + * @returns The removed value, or `undefined` if the list is empty. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.removeFirst = function () { + var node = this._first; + if (!node) { + return undefined; + } + if (node === this._last) { + this._first = null; + this._last = null; + } + else { + this._first = node.next; + this._first.prev = null; + } + node.list = null; + node.next = null; + node.prev = null; + this._size--; + return node.value; + }; + /** + * Remove and return the value at the end of the list. + * + * @returns The removed value, or `undefined` if the list is empty. + * + * #### Complexity + * Constant. + */ + LinkedList.prototype.removeLast = function () { + var node = this._last; + if (!node) { + return undefined; + } + if (node === this._first) { + this._first = null; + this._last = null; + } + else { + this._last = node.prev; + this._last.next = null; + } + node.list = null; + node.next = null; + node.prev = null; + this._size--; + return node.value; + }; + /** + * Remove a specific node from the list. + * + * @param node - The node to remove from the list. + * + * #### Complexity + * Constant. + * + * #### Notes + * The node must be owned by the list. + */ + LinkedList.prototype.removeNode = function (node) { + if (!(node instanceof Private$1$1.LinkedListNode) || node.list !== this) { + throw new Error('Node is not owned by the list.'); + } + var _node = node; + if (_node === this._first && _node === this._last) { + this._first = null; + this._last = null; + } + else if (_node === this._first) { + this._first = _node.next; + this._first.prev = null; + } + else if (_node === this._last) { + this._last = _node.prev; + this._last.next = null; + } + else { + _node.next.prev = _node.prev; + _node.prev.next = _node.next; + } + _node.list = null; + _node.next = null; + _node.prev = null; + this._size--; + }; + /** + * Remove all values from the list. + * + * #### Complexity + * Linear. + */ + LinkedList.prototype.clear = function () { + var node = this._first; + while (node) { + var next = node.next; + node.list = null; + node.prev = null; + node.next = null; + node = next; + } + this._first = null; + this._last = null; + this._size = 0; + }; + return LinkedList; + }()); + /** + * The namespace for the `LinkedList` class statics. + */ + (function (LinkedList) { + /** + * Create a linked list from an iterable of values. + * + * @param values - The iterable or array-like object of interest. + * + * @returns A new linked list initialized with the given values. + * + * #### Complexity + * Linear. + */ + function from(values) { + var list = new LinkedList(); + list.assign(values); + return list; + } + LinkedList.from = from; + /** + * A forward iterator for values in a linked list. + */ + var ForwardValueIterator = /** @class */ (function () { + /** + * Construct a forward value iterator. + * + * @param node - The first node in the list. + */ + function ForwardValueIterator(node) { + this._node = node; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + ForwardValueIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + ForwardValueIterator.prototype.clone = function () { + return new ForwardValueIterator(this._node); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + ForwardValueIterator.prototype.next = function () { + if (!this._node) { + return undefined; + } + var node = this._node; + this._node = node.next; + return node.value; + }; + return ForwardValueIterator; + }()); + LinkedList.ForwardValueIterator = ForwardValueIterator; + /** + * A reverse iterator for values in a linked list. + */ + var RetroValueIterator = /** @class */ (function () { + /** + * Construct a retro value iterator. + * + * @param node - The last node in the list. + */ + function RetroValueIterator(node) { + this._node = node; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + RetroValueIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + RetroValueIterator.prototype.clone = function () { + return new RetroValueIterator(this._node); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + RetroValueIterator.prototype.next = function () { + if (!this._node) { + return undefined; + } + var node = this._node; + this._node = node.prev; + return node.value; + }; + return RetroValueIterator; + }()); + LinkedList.RetroValueIterator = RetroValueIterator; + /** + * A forward iterator for nodes in a linked list. + */ + var ForwardNodeIterator = /** @class */ (function () { + /** + * Construct a forward node iterator. + * + * @param node - The first node in the list. + */ + function ForwardNodeIterator(node) { + this._node = node; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + ForwardNodeIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + ForwardNodeIterator.prototype.clone = function () { + return new ForwardNodeIterator(this._node); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + ForwardNodeIterator.prototype.next = function () { + if (!this._node) { + return undefined; + } + var node = this._node; + this._node = node.next; + return node; + }; + return ForwardNodeIterator; + }()); + LinkedList.ForwardNodeIterator = ForwardNodeIterator; + /** + * A reverse iterator for nodes in a linked list. + */ + var RetroNodeIterator = /** @class */ (function () { + /** + * Construct a retro node iterator. + * + * @param node - The last node in the list. + */ + function RetroNodeIterator(node) { + this._node = node; + } + /** + * Get an iterator over the object's values. + * + * @returns An iterator which yields the object's values. + */ + RetroNodeIterator.prototype.iter = function () { + return this; + }; + /** + * Create an independent clone of the iterator. + * + * @returns A new independent clone of the iterator. + */ + RetroNodeIterator.prototype.clone = function () { + return new RetroNodeIterator(this._node); + }; + /** + * Get the next value from the iterator. + * + * @returns The next value from the iterator, or `undefined`. + */ + RetroNodeIterator.prototype.next = function () { + if (!this._node) { + return undefined; + } + var node = this._node; + this._node = node.prev; + return node; + }; + return RetroNodeIterator; + }()); + LinkedList.RetroNodeIterator = RetroNodeIterator; + })(LinkedList || (LinkedList = {})); + /** + * The namespace for the module implementation details. + */ + var Private$1$1; + (function (Private) { + /** + * The internal linked list node implementation. + */ + var LinkedListNode = /** @class */ (function () { + /** + * Construct a new linked list node. + * + * @param list - The list which owns the node. + * + * @param value - The value for the link. + */ + function LinkedListNode(list, value) { + /** + * The linked list which created and owns the node. + */ + this.list = null; + /** + * The next node in the list. + */ + this.next = null; + /** + * The previous node in the list. + */ + this.prev = null; + this.list = list; + this.value = value; + } + return LinkedListNode; + }()); + Private.LinkedListNode = LinkedListNode; + })(Private$1$1 || (Private$1$1 = {})); + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends$2(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + /** + * A message which can be delivered to a message handler. + * + * #### Notes + * This class may be subclassed to create complex message types. + */ + var Message = /** @class */ (function () { + /** + * Construct a new message. + * + * @param type - The type of the message. + */ + function Message(type) { + this.type = type; + } + Object.defineProperty(Message.prototype, "isConflatable", { + /** + * Test whether the message is conflatable. + * + * #### Notes + * Message conflation is an advanced topic. Most message types will + * not make use of this feature. + * + * If a conflatable message is posted to a handler while another + * conflatable message of the same `type` has already been posted + * to the handler, the `conflate()` method of the existing message + * will be invoked. If that method returns `true`, the new message + * will not be enqueued. This allows messages to be compressed, so + * that only a single instance of the message type is processed per + * cycle, no matter how many times messages of that type are posted. + * + * Custom message types may reimplement this property. + * + * The default implementation is always `false`. + */ + get: function () { + return false; + }, + enumerable: true, + configurable: true + }); + /** + * Conflate this message with another message of the same `type`. + * + * @param other - A conflatable message of the same `type`. + * + * @returns `true` if the message was successfully conflated, or + * `false` otherwise. + * + * #### Notes + * Message conflation is an advanced topic. Most message types will + * not make use of this feature. + * + * This method is called automatically by the message loop when the + * given message is posted to the handler paired with this message. + * This message will already be enqueued and conflatable, and the + * given message will have the same `type` and also be conflatable. + * + * This method should merge the state of the other message into this + * message as needed so that when this message is finally delivered + * to the handler, it receives the most up-to-date information. + * + * If this method returns `true`, it signals that the other message + * was successfully conflated and that message will not be enqueued. + * + * If this method returns `false`, the other message will be enqueued + * for normal delivery. + * + * Custom message types may reimplement this method. + * + * The default implementation always returns `false`. + */ + Message.prototype.conflate = function (other) { + return false; + }; + return Message; + }()); + /** + * A convenience message class which conflates automatically. + * + * #### Notes + * Message conflation is an advanced topic. Most user code will not + * make use of this class. + * + * This message class is useful for creating message instances which + * should be conflated, but which have no state other than `type`. + * + * If conflation of stateful messages is required, a custom `Message` + * subclass should be created. + */ + var ConflatableMessage = /** @class */ (function (_super) { + __extends$2(ConflatableMessage, _super); + function ConflatableMessage() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ConflatableMessage.prototype, "isConflatable", { + /** + * Test whether the message is conflatable. + * + * #### Notes + * This property is always `true`. + */ + get: function () { + return true; + }, + enumerable: true, + configurable: true + }); + /** + * Conflate this message with another message of the same `type`. + * + * #### Notes + * This method always returns `true`. + */ + ConflatableMessage.prototype.conflate = function (other) { + return true; + }; + return ConflatableMessage; + }(Message)); + /** + * The namespace for the global singleton message loop. + */ + var MessageLoop; + (function (MessageLoop) { + /** + * Send a message to a message handler to process immediately. + * + * @param handler - The handler which should process the message. + * + * @param msg - The message to deliver to the handler. + * + * #### Notes + * The message will first be sent through any installed message hooks + * for the handler. If the message passes all hooks, it will then be + * delivered to the `processMessage` method of the handler. + * + * The message will not be conflated with pending posted messages. + * + * Exceptions in hooks and handlers will be caught and logged. + */ + function sendMessage(handler, msg) { + // Lookup the message hooks for the handler. + var hooks = messageHooks.get(handler); + // Handle the common case of no installed hooks. + if (!hooks || hooks.length === 0) { + invokeHandler(handler, msg); + return; + } + // Invoke the message hooks starting with the newest first. + var passed = every$1(retro(hooks), function (hook) { + return hook ? invokeHook(hook, handler, msg) : true; + }); + // Invoke the handler if the message passes all hooks. + if (passed) { + invokeHandler(handler, msg); + } + } + MessageLoop.sendMessage = sendMessage; + /** + * Post a message to a message handler to process in the future. + * + * @param handler - The handler which should process the message. + * + * @param msg - The message to post to the handler. + * + * #### Notes + * The message will be conflated with the pending posted messages for + * the handler, if possible. If the message is not conflated, it will + * be queued for normal delivery on the next cycle of the event loop. + * + * Exceptions in hooks and handlers will be caught and logged. + */ + function postMessage(handler, msg) { + // Handle the common case of a non-conflatable message. + if (!msg.isConflatable) { + enqueueMessage(handler, msg); + return; + } + // Conflate the message with an existing message if possible. + var conflated = some$1(messageQueue, function (posted) { + if (posted.handler !== handler) { + return false; + } + if (!posted.msg) { + return false; + } + if (posted.msg.type !== msg.type) { + return false; + } + if (!posted.msg.isConflatable) { + return false; + } + return posted.msg.conflate(msg); + }); + // Enqueue the message if it was not conflated. + if (!conflated) { + enqueueMessage(handler, msg); + } + } + MessageLoop.postMessage = postMessage; + /** + * Install a message hook for a message handler. + * + * @param handler - The message handler of interest. + * + * @param hook - The message hook to install. + * + * #### Notes + * A message hook is invoked before a message is delivered to the + * handler. If the hook returns `false`, no other hooks will be + * invoked and the message will not be delivered to the handler. + * + * The most recently installed message hook is executed first. + * + * If the hook is already installed, this is a no-op. + */ + function installMessageHook(handler, hook) { + // Lookup the hooks for the handler. + var hooks = messageHooks.get(handler); + // Bail early if the hook is already installed. + if (hooks && hooks.indexOf(hook) !== -1) { + return; + } + // Add the hook to the end, so it will be the first to execute. + if (!hooks) { + messageHooks.set(handler, [hook]); + } + else { + hooks.push(hook); + } + } + MessageLoop.installMessageHook = installMessageHook; + /** + * Remove an installed message hook for a message handler. + * + * @param handler - The message handler of interest. + * + * @param hook - The message hook to remove. + * + * #### Notes + * It is safe to call this function while the hook is executing. + * + * If the hook is not installed, this is a no-op. + */ + function removeMessageHook(handler, hook) { + // Lookup the hooks for the handler. + var hooks = messageHooks.get(handler); + // Bail early if the hooks do not exist. + if (!hooks) { + return; + } + // Lookup the index of the hook and bail if not found. + var i = hooks.indexOf(hook); + if (i === -1) { + return; + } + // Clear the hook and schedule a cleanup of the array. + hooks[i] = null; + scheduleCleanup(hooks); + } + MessageLoop.removeMessageHook = removeMessageHook; + /** + * Clear all message data associated with a message handler. + * + * @param handler - The message handler of interest. + * + * #### Notes + * This will clear all posted messages and hooks for the handler. + */ + function clearData(handler) { + // Lookup the hooks for the handler. + var hooks = messageHooks.get(handler); + // Clear all messsage hooks for the handler. + if (hooks && hooks.length > 0) { + ArrayExt.fill(hooks, null); + scheduleCleanup(hooks); + } + // Clear all posted messages for the handler. + each$1(messageQueue, function (posted) { + if (posted.handler === handler) { + posted.handler = null; + posted.msg = null; + } + }); + } + MessageLoop.clearData = clearData; + /** + * Process the pending posted messages in the queue immediately. + * + * #### Notes + * This function is useful when posted messages must be processed + * immediately, instead of on the next animation frame. + * + * This function should normally not be needed, but it may be + * required to work around certain browser idiosyncrasies. + * + * Recursing into this function is a no-op. + */ + function flush() { + // Bail if recursion is detected or if there is no pending task. + if (flushGuard || loopTaskID === 0) { + return; + } + // Unschedule the pending loop task. + unschedule(loopTaskID); + // Run the message loop within the recursion guard. + flushGuard = true; + runMessageLoop(); + flushGuard = false; + } + MessageLoop.flush = flush; + /** + * Get the message loop exception handler. + * + * @returns The current exception handler. + * + * #### Notes + * The default exception handler is `console.error`. + */ + function getExceptionHandler() { + return exceptionHandler; + } + MessageLoop.getExceptionHandler = getExceptionHandler; + /** + * Set the message loop exception handler. + * + * @param handler - The function to use as the exception handler. + * + * @returns The old exception handler. + * + * #### Notes + * The exception handler is invoked when a message handler or a + * message hook throws an exception. + */ + function setExceptionHandler(handler) { + var old = exceptionHandler; + exceptionHandler = handler; + return old; + } + MessageLoop.setExceptionHandler = setExceptionHandler; + /** + * The queue of posted message pairs. + */ + var messageQueue = new LinkedList(); + /** + * A mapping of handler to array of installed message hooks. + */ + var messageHooks = new WeakMap(); + /** + * A set of message hook arrays which are pending cleanup. + */ + var dirtySet = new Set(); + /** + * The message loop exception handler. + */ + var exceptionHandler = function (err) { + console.error(err); + }; + /** + * The id of the pending loop task animation frame. + */ + var loopTaskID = 0; + /** + * A guard flag to prevent flush recursion. + */ + var flushGuard = false; + /** + * A function to schedule an event loop callback. + */ + var schedule = (function () { + var ok = typeof requestAnimationFrame === 'function'; + return ok ? requestAnimationFrame : setImmediate; + })(); + /** + * A function to unschedule an event loop callback. + */ + var unschedule = (function () { + var ok = typeof cancelAnimationFrame === 'function'; + return ok ? cancelAnimationFrame : clearImmediate; + })(); + /** + * Invoke a message hook with the specified handler and message. + * + * Returns the result of the hook, or `true` if the hook throws. + * + * Exceptions in the hook will be caught and logged. + */ + function invokeHook(hook, handler, msg) { + var result = true; + try { + if (typeof hook === 'function') { + result = hook(handler, msg); + } + else { + result = hook.messageHook(handler, msg); + } + } + catch (err) { + exceptionHandler(err); + } + return result; + } + /** + * Invoke a message handler with the specified message. + * + * Exceptions in the handler will be caught and logged. + */ + function invokeHandler(handler, msg) { + try { + handler.processMessage(msg); + } + catch (err) { + exceptionHandler(err); + } + } + /** + * Add a message to the end of the message queue. + * + * This will automatically schedule a run of the message loop. + */ + function enqueueMessage(handler, msg) { + // Add the posted message to the queue. + messageQueue.addLast({ handler: handler, msg: msg }); + // Bail if a loop task is already pending. + if (loopTaskID !== 0) { + return; + } + // Schedule a run of the message loop. + loopTaskID = schedule(runMessageLoop); + } + /** + * Run an iteration of the message loop. + * + * This will process all pending messages in the queue. If a message + * is added to the queue while the message loop is running, it will + * be processed on the next cycle of the loop. + */ + function runMessageLoop() { + // Clear the task ID so the next loop can be scheduled. + loopTaskID = 0; + // If the message queue is empty, there is nothing else to do. + if (messageQueue.isEmpty) { + return; + } + // Add a sentinel value to the end of the queue. The queue will + // only be processed up to the sentinel. Messages posted during + // this cycle will execute on the next cycle. + var sentinel = { handler: null, msg: null }; + messageQueue.addLast(sentinel); + // Enter the message loop. + while (true) { + // Remove the first posted message in the queue. + var posted = messageQueue.removeFirst(); + // If the value is the sentinel, exit the loop. + if (posted === sentinel) { + return; + } + // Dispatch the message if it has not been cleared. + if (posted.handler && posted.msg) { + sendMessage(posted.handler, posted.msg); + } + } + } + /** + * Schedule a cleanup of a message hooks array. + * + * This will add the array to the dirty set and schedule a deferred + * cleanup of the array contents. On cleanup, any `null` hook will + * be removed from the array. + */ + function scheduleCleanup(hooks) { + if (dirtySet.size === 0) { + schedule(cleanupDirtySet); + } + dirtySet.add(hooks); + } + /** + * Cleanup the message hook arrays in the dirty set. + * + * This function should only be invoked asynchronously, when the + * stack frame is guaranteed to not be on the path of user code. + */ + function cleanupDirtySet() { + dirtySet.forEach(cleanupHooks); + dirtySet.clear(); + } + /** + * Cleanup the dirty hooks in a message hooks array. + * + * This will remove any `null` hook from the array. + * + * This function should only be invoked asynchronously, when the + * stack frame is guaranteed to not be on the path of user code. + */ + function cleanupHooks(hooks) { + ArrayExt.removeAllWhere(hooks, isNull); + } + /** + * Test whether a value is `null`. + */ + function isNull(value) { + return value === null; + } + })(MessageLoop || (MessageLoop = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * A class which attaches a value to an external object. + * + * #### Notes + * Attached properties are used to extend the state of an object with + * semantic data from an unrelated class. They also encapsulate value + * creation, coercion, and notification. + * + * Because attached property values are stored in a hash table, which + * in turn is stored in a WeakMap keyed on the owner object, there is + * non-trivial storage overhead involved in their use. The pattern is + * therefore best used for the storage of rare data. + */ + var AttachedProperty = /** @class */ (function () { + /** + * Construct a new attached property. + * + * @param options - The options for initializing the property. + */ + function AttachedProperty(options) { + this._pid = Private$3.nextPID(); + this.name = options.name; + this._create = options.create; + this._coerce = options.coerce || null; + this._compare = options.compare || null; + this._changed = options.changed || null; + } + /** + * Get the current value of the property for a given owner. + * + * @param owner - The property owner of interest. + * + * @returns The current value of the property. + * + * #### Notes + * If the value has not yet been set, the default value will be + * computed and assigned as the current value of the property. + */ + AttachedProperty.prototype.get = function (owner) { + var value; + var map = Private$3.ensureMap(owner); + if (this._pid in map) { + value = map[this._pid]; + } + else { + value = map[this._pid] = this._createValue(owner); + } + return value; + }; + /** + * Set the current value of the property for a given owner. + * + * @param owner - The property owner of interest. + * + * @param value - The value for the property. + * + * #### Notes + * If the value has not yet been set, the default value will be + * computed and used as the previous value for the comparison. + */ + AttachedProperty.prototype.set = function (owner, value) { + var oldValue; + var map = Private$3.ensureMap(owner); + if (this._pid in map) { + oldValue = map[this._pid]; + } + else { + oldValue = map[this._pid] = this._createValue(owner); + } + var newValue = this._coerceValue(owner, value); + this._maybeNotify(owner, oldValue, map[this._pid] = newValue); + }; + /** + * Explicitly coerce the current property value for a given owner. + * + * @param owner - The property owner of interest. + * + * #### Notes + * If the value has not yet been set, the default value will be + * computed and used as the previous value for the comparison. + */ + AttachedProperty.prototype.coerce = function (owner) { + var oldValue; + var map = Private$3.ensureMap(owner); + if (this._pid in map) { + oldValue = map[this._pid]; + } + else { + oldValue = map[this._pid] = this._createValue(owner); + } + var newValue = this._coerceValue(owner, oldValue); + this._maybeNotify(owner, oldValue, map[this._pid] = newValue); + }; + /** + * Get or create the default value for the given owner. + */ + AttachedProperty.prototype._createValue = function (owner) { + var create = this._create; + return create(owner); + }; + /** + * Coerce the value for the given owner. + */ + AttachedProperty.prototype._coerceValue = function (owner, value) { + var coerce = this._coerce; + return coerce ? coerce(owner, value) : value; + }; + /** + * Compare the old value and new value for equality. + */ + AttachedProperty.prototype._compareValue = function (oldValue, newValue) { + var compare = this._compare; + return compare ? compare(oldValue, newValue) : oldValue === newValue; + }; + /** + * Run the change notification if the given values are different. + */ + AttachedProperty.prototype._maybeNotify = function (owner, oldValue, newValue) { + var changed = this._changed; + if (changed && !this._compareValue(oldValue, newValue)) { + changed(owner, oldValue, newValue); + } + }; + return AttachedProperty; + }()); + /** + * The namespace for the `AttachedProperty` class statics. + */ + (function (AttachedProperty) { + /** + * Clear the stored property data for the given owner. + * + * @param owner - The property owner of interest. + * + * #### Notes + * This will clear all property values for the owner, but it will + * **not** run the change notification for any of the properties. + */ + function clearData(owner) { + Private$3.ownerData.delete(owner); + } + AttachedProperty.clearData = clearData; + })(AttachedProperty || (AttachedProperty = {})); + /** + * The namespace for the module implementation details. + */ + var Private$3; + (function (Private) { + /** + * A weak mapping of property owner to property map. + */ + Private.ownerData = new WeakMap(); + /** + * A function which computes successive unique property ids. + */ + Private.nextPID = (function () { + var id = 0; + return function () { + var rand = Math.random(); + var stem = ("" + rand).slice(2); + return "pid-" + stem + "-" + id++; + }; + })(); + /** + * Lookup the data map for the property owner. + * + * This will create the map if one does not already exist. + */ + function ensureMap(owner) { + var map = Private.ownerData.get(owner); + if (map) { + return map; + } + map = Object.create(null); + Private.ownerData.set(owner, map); + return map; + } + Private.ensureMap = ensureMap; + })(Private$3 || (Private$3 = {})); + + // Copyright (c) Jupyter Development Team. + /** + * A concrete implementation of `ISignal`. + * + * #### Example + * ```typescript + * import { ISignal, Signal } from '@lumino/signaling'; + * + * class SomeClass { + * + * constructor(name: string) { + * this.name = name; + * } + * + * readonly name: string; + * + * get valueChanged: ISignal { + * return this._valueChanged; + * } + * + * get value(): number { + * return this._value; + * } + * + * set value(value: number) { + * if (value === this._value) { + * return; + * } + * this._value = value; + * this._valueChanged.emit(value); + * } + * + * private _value = 0; + * private _valueChanged = new Signal(this); + * } + * + * function logger(sender: SomeClass, value: number): void { + * console.log(sender.name, value); + * } + * + * let m1 = new SomeClass('foo'); + * let m2 = new SomeClass('bar'); + * + * m1.valueChanged.connect(logger); + * m2.valueChanged.connect(logger); + * + * m1.value = 42; // logs: foo 42 + * m2.value = 17; // logs: bar 17 + * ``` + */ + var Signal = /** @class */ (function () { + /** + * Construct a new signal. + * + * @param sender - The sender which owns the signal. + */ + function Signal(sender) { + this.sender = sender; + } + /** + * Connect a slot to the signal. + * + * @param slot - The slot to invoke when the signal is emitted. + * + * @param thisArg - The `this` context for the slot. If provided, + * this must be a non-primitive object. + * + * @returns `true` if the connection succeeds, `false` otherwise. + */ + Signal.prototype.connect = function (slot, thisArg) { + return Private$4.connect(this, slot, thisArg); + }; + /** + * Disconnect a slot from the signal. + * + * @param slot - The slot to disconnect from the signal. + * + * @param thisArg - The `this` context for the slot. If provided, + * this must be a non-primitive object. + * + * @returns `true` if the connection is removed, `false` otherwise. + */ + Signal.prototype.disconnect = function (slot, thisArg) { + return Private$4.disconnect(this, slot, thisArg); + }; + /** + * Emit the signal and invoke the connected slots. + * + * @param args - The args to pass to the connected slots. + * + * #### Notes + * Slots are invoked synchronously in connection order. + * + * Exceptions thrown by connected slots will be caught and logged. + */ + Signal.prototype.emit = function (args) { + Private$4.emit(this, args); + }; + return Signal; + }()); + /** + * The namespace for the `Signal` class statics. + */ + (function (Signal) { + /** + * Remove all connections between a sender and receiver. + * + * @param sender - The sender object of interest. + * + * @param receiver - The receiver object of interest. + * + * #### Notes + * If a `thisArg` is provided when connecting a signal, that object + * is considered the receiver. Otherwise, the `slot` is considered + * the receiver. + */ + function disconnectBetween(sender, receiver) { + Private$4.disconnectBetween(sender, receiver); + } + Signal.disconnectBetween = disconnectBetween; + /** + * Remove all connections where the given object is the sender. + * + * @param sender - The sender object of interest. + */ + function disconnectSender(sender) { + Private$4.disconnectSender(sender); + } + Signal.disconnectSender = disconnectSender; + /** + * Remove all connections where the given object is the receiver. + * + * @param receiver - The receiver object of interest. + * + * #### Notes + * If a `thisArg` is provided when connecting a signal, that object + * is considered the receiver. Otherwise, the `slot` is considered + * the receiver. + */ + function disconnectReceiver(receiver) { + Private$4.disconnectReceiver(receiver); + } + Signal.disconnectReceiver = disconnectReceiver; + /** + * Remove all connections where an object is the sender or receiver. + * + * @param object - The object of interest. + * + * #### Notes + * If a `thisArg` is provided when connecting a signal, that object + * is considered the receiver. Otherwise, the `slot` is considered + * the receiver. + */ + function disconnectAll(object) { + Private$4.disconnectAll(object); + } + Signal.disconnectAll = disconnectAll; + /** + * Clear all signal data associated with the given object. + * + * @param object - The object for which the data should be cleared. + * + * #### Notes + * This removes all signal connections and any other signal data + * associated with the object. + */ + function clearData(object) { + Private$4.disconnectAll(object); + } + Signal.clearData = clearData; + /** + * Get the signal exception handler. + * + * @returns The current exception handler. + * + * #### Notes + * The default exception handler is `console.error`. + */ + function getExceptionHandler() { + return Private$4.exceptionHandler; + } + Signal.getExceptionHandler = getExceptionHandler; + /** + * Set the signal exception handler. + * + * @param handler - The function to use as the exception handler. + * + * @returns The old exception handler. + * + * #### Notes + * The exception handler is invoked when a slot throws an exception. + */ + function setExceptionHandler(handler) { + var old = Private$4.exceptionHandler; + Private$4.exceptionHandler = handler; + return old; + } + Signal.setExceptionHandler = setExceptionHandler; + })(Signal || (Signal = {})); + /** + * The namespace for the module implementation details. + */ + var Private$4; + (function (Private) { + /** + * The signal exception handler function. + */ + Private.exceptionHandler = function (err) { + console.error(err); + }; + /** + * Connect a slot to a signal. + * + * @param signal - The signal of interest. + * + * @param slot - The slot to invoke when the signal is emitted. + * + * @param thisArg - The `this` context for the slot. If provided, + * this must be a non-primitive object. + * + * @returns `true` if the connection succeeds, `false` otherwise. + */ + function connect(signal, slot, thisArg) { + // Coerce a `null` `thisArg` to `undefined`. + thisArg = thisArg || undefined; + // Ensure the sender's array of receivers is created. + var receivers = receiversForSender.get(signal.sender); + if (!receivers) { + receivers = []; + receiversForSender.set(signal.sender, receivers); + } + // Bail if a matching connection already exists. + if (findConnection(receivers, signal, slot, thisArg)) { + return false; + } + // Choose the best object for the receiver. + var receiver = thisArg || slot; + // Ensure the receiver's array of senders is created. + var senders = sendersForReceiver.get(receiver); + if (!senders) { + senders = []; + sendersForReceiver.set(receiver, senders); + } + // Create a new connection and add it to the end of each array. + var connection = { signal: signal, slot: slot, thisArg: thisArg }; + receivers.push(connection); + senders.push(connection); + // Indicate a successful connection. + return true; + } + Private.connect = connect; + /** + * Disconnect a slot from a signal. + * + * @param signal - The signal of interest. + * + * @param slot - The slot to disconnect from the signal. + * + * @param thisArg - The `this` context for the slot. If provided, + * this must be a non-primitive object. + * + * @returns `true` if the connection is removed, `false` otherwise. + */ + function disconnect(signal, slot, thisArg) { + // Coerce a `null` `thisArg` to `undefined`. + thisArg = thisArg || undefined; + // Lookup the list of receivers, and bail if none exist. + var receivers = receiversForSender.get(signal.sender); + if (!receivers || receivers.length === 0) { + return false; + } + // Bail if no matching connection exits. + var connection = findConnection(receivers, signal, slot, thisArg); + if (!connection) { + return false; + } + // Choose the best object for the receiver. + var receiver = thisArg || slot; + // Lookup the array of senders, which is now known to exist. + var senders = sendersForReceiver.get(receiver); + // Clear the connection and schedule cleanup of the arrays. + connection.signal = null; + scheduleCleanup(receivers); + scheduleCleanup(senders); + // Indicate a successful disconnection. + return true; + } + Private.disconnect = disconnect; + /** + * Remove all connections between a sender and receiver. + * + * @param sender - The sender object of interest. + * + * @param receiver - The receiver object of interest. + */ + function disconnectBetween(sender, receiver) { + // If there are no receivers, there is nothing to do. + var receivers = receiversForSender.get(sender); + if (!receivers || receivers.length === 0) { + return; + } + // If there are no senders, there is nothing to do. + var senders = sendersForReceiver.get(receiver); + if (!senders || senders.length === 0) { + return; + } + // Clear each connection between the sender and receiver. + each$1(senders, function (connection) { + // Skip connections which have already been cleared. + if (!connection.signal) { + return; + } + // Clear the connection if it matches the sender. + if (connection.signal.sender === sender) { + connection.signal = null; + } + }); + // Schedule a cleanup of the senders and receivers. + scheduleCleanup(receivers); + scheduleCleanup(senders); + } + Private.disconnectBetween = disconnectBetween; + /** + * Remove all connections where the given object is the sender. + * + * @param sender - The sender object of interest. + */ + function disconnectSender(sender) { + // If there are no receivers, there is nothing to do. + var receivers = receiversForSender.get(sender); + if (!receivers || receivers.length === 0) { + return; + } + // Clear each receiver connection. + each$1(receivers, function (connection) { + // Skip connections which have already been cleared. + if (!connection.signal) { + return; + } + // Choose the best object for the receiver. + var receiver = connection.thisArg || connection.slot; + // Clear the connection. + connection.signal = null; + // Cleanup the array of senders, which is now known to exist. + scheduleCleanup(sendersForReceiver.get(receiver)); + }); + // Schedule a cleanup of the receivers. + scheduleCleanup(receivers); + } + Private.disconnectSender = disconnectSender; + /** + * Remove all connections where the given object is the receiver. + * + * @param receiver - The receiver object of interest. + */ + function disconnectReceiver(receiver) { + // If there are no senders, there is nothing to do. + var senders = sendersForReceiver.get(receiver); + if (!senders || senders.length === 0) { + return; + } + // Clear each sender connection. + each$1(senders, function (connection) { + // Skip connections which have already been cleared. + if (!connection.signal) { + return; + } + // Lookup the sender for the connection. + var sender = connection.signal.sender; + // Clear the connection. + connection.signal = null; + // Cleanup the array of receivers, which is now known to exist. + scheduleCleanup(receiversForSender.get(sender)); + }); + // Schedule a cleanup of the list of senders. + scheduleCleanup(senders); + } + Private.disconnectReceiver = disconnectReceiver; + /** + * Remove all connections where an object is the sender or receiver. + * + * @param object - The object of interest. + */ + function disconnectAll(object) { + // Remove all connections where the given object is the sender. + disconnectSender(object); + // Remove all connections where the given object is the receiver. + disconnectReceiver(object); + } + Private.disconnectAll = disconnectAll; + /** + * Emit a signal and invoke its connected slots. + * + * @param signal - The signal of interest. + * + * @param args - The args to pass to the connected slots. + * + * #### Notes + * Slots are invoked synchronously in connection order. + * + * Exceptions thrown by connected slots will be caught and logged. + */ + function emit(signal, args) { + // If there are no receivers, there is nothing to do. + var receivers = receiversForSender.get(signal.sender); + if (!receivers || receivers.length === 0) { + return; + } + // Invoke the slots for connections with a matching signal. + // Any connections added during emission are not invoked. + for (var i = 0, n = receivers.length; i < n; ++i) { + var connection = receivers[i]; + if (connection.signal === signal) { + invokeSlot(connection, args); + } + } + } + Private.emit = emit; + /** + * A weak mapping of sender to array of receiver connections. + */ + var receiversForSender = new WeakMap(); + /** + * A weak mapping of receiver to array of sender connections. + */ + var sendersForReceiver = new WeakMap(); + /** + * A set of connection arrays which are pending cleanup. + */ + var dirtySet = new Set(); + /** + * A function to schedule an event loop callback. + */ + var schedule = (function () { + var ok = typeof requestAnimationFrame === 'function'; + // @ts-ignore + return ok ? requestAnimationFrame : setImmediate; + })(); + /** + * Find a connection which matches the given parameters. + */ + function findConnection(connections, signal, slot, thisArg) { + return find$1(connections, function (connection) { return (connection.signal === signal && + connection.slot === slot && + connection.thisArg === thisArg); }); + } + /** + * Invoke a slot with the given parameters. + * + * The connection is assumed to be valid. + * + * Exceptions in the slot will be caught and logged. + */ + function invokeSlot(connection, args) { + var signal = connection.signal, slot = connection.slot, thisArg = connection.thisArg; + try { + slot.call(thisArg, signal.sender, args); + } + catch (err) { + Private.exceptionHandler(err); + } + } + /** + * Schedule a cleanup of a connection array. + * + * This will add the array to the dirty set and schedule a deferred + * cleanup of the array contents. On cleanup, any connection with a + * `null` signal will be removed from the array. + */ + function scheduleCleanup(array) { + if (dirtySet.size === 0) { + schedule(cleanupDirtySet); + } + dirtySet.add(array); + } + /** + * Cleanup the connection lists in the dirty set. + * + * This function should only be invoked asynchronously, when the + * stack frame is guaranteed to not be on the path of user code. + */ + function cleanupDirtySet() { + dirtySet.forEach(cleanupConnections); + dirtySet.clear(); + } + /** + * Cleanup the dirty connections in a connections array. + * + * This will remove any connection with a `null` signal. + * + * This function should only be invoked asynchronously, when the + * stack frame is guaranteed to not be on the path of user code. + */ + function cleanupConnections(connections) { + ArrayExt.removeAllWhere(connections, isDeadConnection); + } + /** + * Test whether a connection is dead. + * + * A dead connection has a `null` signal. + */ + function isDeadConnection(connection) { + return connection.signal === null; + } + })(Private$4 || (Private$4 = {})); + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics$1 = function(d, b) { + extendStatics$1 = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics$1(d, b); + }; + + function __extends$3(d, b) { + extendStatics$1(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + /** + * A disposable object which delegates to a callback function. + */ + var DisposableDelegate = /** @class */ (function () { + /** + * Construct a new disposable delegate. + * + * @param fn - The callback function to invoke on dispose. + */ + function DisposableDelegate(fn) { + this._fn = fn; + } + Object.defineProperty(DisposableDelegate.prototype, "isDisposed", { + /** + * Test whether the delegate has been disposed. + */ + get: function () { + return !this._fn; + }, + enumerable: true, + configurable: true + }); + /** + * Dispose of the delegate and invoke the callback function. + */ + DisposableDelegate.prototype.dispose = function () { + if (!this._fn) { + return; + } + var fn = this._fn; + this._fn = null; + fn(); + }; + return DisposableDelegate; + }()); + /** + * An observable disposable object which delegates to a callback function. + */ + var ObservableDisposableDelegate = /** @class */ (function (_super) { + __extends$3(ObservableDisposableDelegate, _super); + function ObservableDisposableDelegate() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._disposed = new Signal(_this); + return _this; + } + Object.defineProperty(ObservableDisposableDelegate.prototype, "disposed", { + /** + * A signal emitted when the delegate is disposed. + */ + get: function () { + return this._disposed; + }, + enumerable: true, + configurable: true + }); + /** + * Dispose of the delegate and invoke the callback function. + */ + ObservableDisposableDelegate.prototype.dispose = function () { + if (this.isDisposed) { + return; + } + _super.prototype.dispose.call(this); + this._disposed.emit(undefined); + Signal.clearData(this); + }; + return ObservableDisposableDelegate; + }(DisposableDelegate)); + /** + * An object which manages a collection of disposable items. + */ + var DisposableSet = /** @class */ (function () { + /** + * Construct a new disposable set. + */ + function DisposableSet() { + this._isDisposed = false; + this._items = new Set(); + } + Object.defineProperty(DisposableSet.prototype, "isDisposed", { + /** + * Test whether the set has been disposed. + */ + get: function () { + return this._isDisposed; + }, + enumerable: true, + configurable: true + }); + /** + * Dispose of the set and the items it contains. + * + * #### Notes + * Items are disposed in the order they are added to the set. + */ + DisposableSet.prototype.dispose = function () { + if (this._isDisposed) { + return; + } + this._isDisposed = true; + this._items.forEach(function (item) { item.dispose(); }); + this._items.clear(); + }; + /** + * Test whether the set contains a specific item. + * + * @param item - The item of interest. + * + * @returns `true` if the set contains the item, `false` otherwise. + */ + DisposableSet.prototype.contains = function (item) { + return this._items.has(item); + }; + /** + * Add a disposable item to the set. + * + * @param item - The item to add to the set. + * + * #### Notes + * If the item is already contained in the set, this is a no-op. + */ + DisposableSet.prototype.add = function (item) { + this._items.add(item); + }; + /** + * Remove a disposable item from the set. + * + * @param item - The item to remove from the set. + * + * #### Notes + * If the item is not contained in the set, this is a no-op. + */ + DisposableSet.prototype.remove = function (item) { + this._items.delete(item); + }; + /** + * Remove all items from the set. + */ + DisposableSet.prototype.clear = function () { + this._items.clear(); + }; + return DisposableSet; + }()); + /** + * The namespace for the `DisposableSet` class statics. + */ + (function (DisposableSet) { + /** + * Create a disposable set from an iterable of items. + * + * @param items - The iterable or array-like object of interest. + * + * @returns A new disposable initialized with the given items. + */ + function from(items) { + var set = new DisposableSet(); + each$1(items, function (item) { set.add(item); }); + return set; + } + DisposableSet.from = from; + })(DisposableSet || (DisposableSet = {})); + /** + * An observable object which manages a collection of disposable items. + */ + var ObservableDisposableSet = /** @class */ (function (_super) { + __extends$3(ObservableDisposableSet, _super); + function ObservableDisposableSet() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._disposed = new Signal(_this); + return _this; + } + Object.defineProperty(ObservableDisposableSet.prototype, "disposed", { + /** + * A signal emitted when the set is disposed. + */ + get: function () { + return this._disposed; + }, + enumerable: true, + configurable: true + }); + /** + * Dispose of the set and the items it contains. + * + * #### Notes + * Items are disposed in the order they are added to the set. + */ + ObservableDisposableSet.prototype.dispose = function () { + if (this.isDisposed) { + return; + } + _super.prototype.dispose.call(this); + this._disposed.emit(undefined); + Signal.clearData(this); + }; + return ObservableDisposableSet; + }(DisposableSet)); + /** + * The namespace for the `ObservableDisposableSet` class statics. + */ + (function (ObservableDisposableSet) { + /** + * Create an observable disposable set from an iterable of items. + * + * @param items - The iterable or array-like object of interest. + * + * @returns A new disposable initialized with the given items. + */ + function from(items) { + var set = new ObservableDisposableSet(); + each$1(items, function (item) { set.add(item); }); + return set; + } + ObservableDisposableSet.from = from; + })(ObservableDisposableSet || (ObservableDisposableSet = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * Get the global application keyboard layout instance. + * + * @returns The keyboard layout for use by the application. + * + * #### Notes + * The default keyboard layout is US-English. + */ + function getKeyboardLayout() { + return Private$5.keyboardLayout; + } + /** + * A concrete implementation of [[IKeyboardLayout]] based on keycodes. + * + * The `keyCode` property of a `'keydown'` event is a browser and OS + * specific representation of the physical key (not character) which + * was pressed on a keyboard. While not the most convenient API, it + * is currently the only one which works reliably on all browsers. + * + * This class accepts a user-defined mapping of keycode to key, which + * allows for reliable shortcuts tailored to the user's system. + */ + var KeycodeLayout = /** @class */ (function () { + /** + * Construct a new keycode layout. + * + * @param name - The human readable name for the layout. + * + * @param codes - A mapping of keycode to key value. + */ + function KeycodeLayout(name, codes) { + this.name = name; + this._codes = codes; + this._keys = KeycodeLayout.extractKeys(codes); + } + /** + * Get an array of the key values supported by the layout. + * + * @returns A new array of the supported key values. + */ + KeycodeLayout.prototype.keys = function () { + return Object.keys(this._keys); + }; + /** + * Test whether the given key is a valid value for the layout. + * + * @param key - The user provided key to test for validity. + * + * @returns `true` if the key is valid, `false` otherwise. + */ + KeycodeLayout.prototype.isValidKey = function (key) { + return key in this._keys; + }; + /** + * Get the key for a `'keydown'` event. + * + * @param event - The event object for a `'keydown'` event. + * + * @returns The associated key value, or an empty string if + * the event does not represent a valid primary key. + */ + KeycodeLayout.prototype.keyForKeydownEvent = function (event) { + return this._codes[event.keyCode] || ''; + }; + return KeycodeLayout; + }()); + /** + * The namespace for the `KeycodeLayout` class statics. + */ + (function (KeycodeLayout) { + /** + * Extract the set of keys from a code map. + * + * @param code - The code map of interest. + * + * @returns A set of the keys in the code map. + */ + function extractKeys(codes) { + var keys = Object.create(null); + for (var c in codes) { + keys[codes[c]] = true; + } + return keys; + } + KeycodeLayout.extractKeys = extractKeys; + })(KeycodeLayout || (KeycodeLayout = {})); + /** + * A keycode-based keyboard layout for US English keyboards. + * + * This layout is valid for the following OS/Browser combinations. + * + * - Windows + * - Chrome + * - Firefox + * - IE + * + * - OSX + * - Chrome + * - Firefox + * - Safari + * + * - Linux + * - Chrome + * - Firefox + * + * Other combinations may also work, but are untested. + */ + var EN_US = new KeycodeLayout('en-us', { + 8: 'Backspace', + 9: 'Tab', + 13: 'Enter', + 19: 'Pause', + 27: 'Escape', + 32: 'Space', + 33: 'PageUp', + 34: 'PageDown', + 35: 'End', + 36: 'Home', + 37: 'ArrowLeft', + 38: 'ArrowUp', + 39: 'ArrowRight', + 40: 'ArrowDown', + 45: 'Insert', + 46: 'Delete', + 48: '0', + 49: '1', + 50: '2', + 51: '3', + 52: '4', + 53: '5', + 54: '6', + 55: '7', + 56: '8', + 57: '9', + 59: ';', + 61: '=', + 65: 'A', + 66: 'B', + 67: 'C', + 68: 'D', + 69: 'E', + 70: 'F', + 71: 'G', + 72: 'H', + 73: 'I', + 74: 'J', + 75: 'K', + 76: 'L', + 77: 'M', + 78: 'N', + 79: 'O', + 80: 'P', + 81: 'Q', + 82: 'R', + 83: 'S', + 84: 'T', + 85: 'U', + 86: 'V', + 87: 'W', + 88: 'X', + 89: 'Y', + 90: 'Z', + 93: 'ContextMenu', + 96: '0', + 97: '1', + 98: '2', + 99: '3', + 100: '4', + 101: '5', + 102: '6', + 103: '7', + 104: '8', + 105: '9', + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111: '/', + 112: 'F1', + 113: 'F2', + 114: 'F3', + 115: 'F4', + 116: 'F5', + 117: 'F6', + 118: 'F7', + 119: 'F8', + 120: 'F9', + 121: 'F10', + 122: 'F11', + 123: 'F12', + 173: '-', + 186: ';', + 187: '=', + 188: ',', + 189: '-', + 190: '.', + 191: '/', + 192: '`', + 219: '[', + 220: '\\', + 221: ']', + 222: '\'' + }); + /** + * The namespace for the module implementation details. + */ + var Private$5; + (function (Private) { + /** + * The global keyboard layout instance. + */ + Private.keyboardLayout = EN_US; + })(Private$5 || (Private$5 = {})); + + // Copyright (c) Jupyter Development Team. + /** + * An object which manages a collection of commands. + * + * #### Notes + * A command registry can be used to populate a variety of action-based + * widgets, such as command palettes, menus, and toolbars. + */ + var CommandRegistry = /** @class */ (function () { + /** + * Construct a new command registry. + */ + function CommandRegistry() { + this._timerID = 0; + this._replaying = false; + this._keystrokes = []; + this._keydownEvents = []; + this._keyBindings = []; + this._exactKeyMatch = null; + this._commands = Object.create(null); + this._commandChanged = new Signal(this); + this._commandExecuted = new Signal(this); + this._keyBindingChanged = new Signal(this); + } + Object.defineProperty(CommandRegistry.prototype, "commandChanged", { + /** + * A signal emitted when a command has changed. + * + * #### Notes + * This signal is useful for visual representations of commands which + * need to refresh when the state of a relevant command has changed. + */ + get: function () { + return this._commandChanged; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandRegistry.prototype, "commandExecuted", { + /** + * A signal emitted when a command has executed. + * + * #### Notes + * Care should be taken when consuming this signal. It is intended to + * be used largely for debugging and logging purposes. It should not + * be (ab)used for general purpose spying on command execution. + */ + get: function () { + return this._commandExecuted; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandRegistry.prototype, "keyBindingChanged", { + /** + * A signal emitted when a key binding is changed. + */ + get: function () { + return this._keyBindingChanged; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandRegistry.prototype, "keyBindings", { + /** + * A read-only array of the key bindings in the registry. + */ + get: function () { + return this._keyBindings; + }, + enumerable: true, + configurable: true + }); + /** + * List the ids of the registered commands. + * + * @returns A new array of the registered command ids. + */ + CommandRegistry.prototype.listCommands = function () { + return Object.keys(this._commands); + }; + /** + * Test whether a specific command is registered. + * + * @param id - The id of the command of interest. + * + * @returns `true` if the command is registered, `false` otherwise. + */ + CommandRegistry.prototype.hasCommand = function (id) { + return id in this._commands; + }; + /** + * Add a command to the registry. + * + * @param id - The unique id of the command. + * + * @param options - The options for the command. + * + * @returns A disposable which will remove the command. + * + * @throws An error if the given `id` is already registered. + */ + CommandRegistry.prototype.addCommand = function (id, options) { + var _this = this; + // Throw an error if the id is already registered. + if (id in this._commands) { + throw new Error("Command '" + id + "' already registered."); + } + // Add the command to the registry. + this._commands[id] = Private$6.createCommand(options); + // Emit the `commandChanged` signal. + this._commandChanged.emit({ id: id, type: 'added' }); + // Return a disposable which will remove the command. + return new DisposableDelegate(function () { + // Remove the command from the registry. + delete _this._commands[id]; + // Emit the `commandChanged` signal. + _this._commandChanged.emit({ id: id, type: 'removed' }); + }); + }; + /** + * Notify listeners that the state of a command has changed. + * + * @param id - The id of the command which has changed. If more than + * one command has changed, this argument should be omitted. + * + * @throws An error if the given `id` is not registered. + * + * #### Notes + * This method should be called by the command author whenever the + * application state changes such that the results of the command + * metadata functions may have changed. + * + * This will cause the `commandChanged` signal to be emitted. + */ + CommandRegistry.prototype.notifyCommandChanged = function (id) { + if (id !== undefined && !(id in this._commands)) { + throw new Error("Command '" + id + "' is not registered."); + } + this._commandChanged.emit({ id: id, type: id ? 'changed' : 'many-changed' }); + }; + /** + * Get the display label for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The display label for the command, or an empty string + * if the command is not registered. + */ + CommandRegistry.prototype.label = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.label.call(undefined, args) : ''; + }; + /** + * Get the mnemonic index for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The mnemonic index for the command, or `-1` if the + * command is not registered. + */ + CommandRegistry.prototype.mnemonic = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.mnemonic.call(undefined, args) : -1; + }; + /** + * Get the icon renderer for a specific command. + * + * DEPRECATED: if set to a string value, the .icon field will + * function as an alias for the .iconClass field, for backwards + * compatibility. In the future when this is removed, the default + * return type will become undefined. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The icon renderer for the command, or + * an empty string if the command is not registered. + */ + CommandRegistry.prototype.icon = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.icon.call(undefined, args) : /* */ '' /* */ /* undefined */; + }; + /** + * Get the icon class for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The icon class for the command, or an empty string if + * the command is not registered. + */ + CommandRegistry.prototype.iconClass = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.iconClass.call(undefined, args) : ''; + }; + /** + * Get the icon label for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The icon label for the command, or an empty string if + * the command is not registered. + */ + CommandRegistry.prototype.iconLabel = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.iconLabel.call(undefined, args) : ''; + }; + /** + * Get the short form caption for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The caption for the command, or an empty string if the + * command is not registered. + */ + CommandRegistry.prototype.caption = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.caption.call(undefined, args) : ''; + }; + /** + * Get the usage help text for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The usage text for the command, or an empty string if + * the command is not registered. + */ + CommandRegistry.prototype.usage = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.usage.call(undefined, args) : ''; + }; + /** + * Get the extra class name for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The class name for the command, or an empty string if + * the command is not registered. + */ + CommandRegistry.prototype.className = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.className.call(undefined, args) : ''; + }; + /** + * Get the dataset for a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns The dataset for the command, or an empty dataset if + * the command is not registered. + */ + CommandRegistry.prototype.dataset = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.dataset.call(undefined, args) : {}; + }; + /** + * Test whether a specific command is enabled. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns A boolean indicating whether the command is enabled, + * or `false` if the command is not registered. + */ + CommandRegistry.prototype.isEnabled = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.isEnabled.call(undefined, args) : false; + }; + /** + * Test whether a specific command is toggled. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns A boolean indicating whether the command is toggled, + * or `false` if the command is not registered. + */ + CommandRegistry.prototype.isToggled = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.isToggled.call(undefined, args) : false; + }; + /** + * Test whether a specific command is visible. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns A boolean indicating whether the command is visible, + * or `false` if the command is not registered. + */ + CommandRegistry.prototype.isVisible = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + var cmd = this._commands[id]; + return cmd ? cmd.isVisible.call(undefined, args) : false; + }; + /** + * Execute a specific command. + * + * @param id - The id of the command of interest. + * + * @param args - The arguments for the command. + * + * @returns A promise which resolves with the result of the command. + * + * #### Notes + * The promise will reject if the command throws an exception, + * or if the command is not registered. + */ + CommandRegistry.prototype.execute = function (id, args) { + if (args === void 0) { args = JSONExt.emptyObject; } + // Reject if the command is not registered. + var cmd = this._commands[id]; + if (!cmd) { + return Promise.reject(new Error("Command '" + id + "' not registered.")); + } + // Execute the command and reject if an exception is thrown. + var value; + try { + value = cmd.execute.call(undefined, args); + } + catch (err) { + value = Promise.reject(err); + } + // Create the return promise which resolves the result. + var result = Promise.resolve(value); + // Emit the command executed signal. + this._commandExecuted.emit({ id: id, args: args, result: result }); + // Return the result promise to the caller. + return result; + }; + /** + * Add a key binding to the registry. + * + * @param options - The options for creating the key binding. + * + * @returns A disposable which removes the added key binding. + * + * #### Notes + * If multiple key bindings are registered for the same sequence, the + * binding with the highest selector specificity is executed first. A + * tie is broken by using the most recently added key binding. + * + * Ambiguous key bindings are resolved with a timeout. As an example, + * suppose two key bindings are registered: one with the key sequence + * `['Ctrl D']`, and another with `['Ctrl D', 'Ctrl W']`. If the user + * presses `Ctrl D`, the first binding cannot be immediately executed + * since the user may intend to complete the chord with `Ctrl W`. For + * such cases, a timer is used to allow the chord to be completed. If + * the chord is not completed before the timeout, the first binding + * is executed. + */ + CommandRegistry.prototype.addKeyBinding = function (options) { + var _this = this; + // Create the binding for the given options. + var binding = Private$6.createKeyBinding(options); + // Add the key binding to the bindings array. + this._keyBindings.push(binding); + // Emit the `bindingChanged` signal. + this._keyBindingChanged.emit({ binding: binding, type: 'added' }); + // Return a disposable which will remove the binding. + return new DisposableDelegate(function () { + // Remove the binding from the array. + ArrayExt.removeFirstOf(_this._keyBindings, binding); + // Emit the `bindingChanged` signal. + _this._keyBindingChanged.emit({ binding: binding, type: 'removed' }); + }); + }; + /** + * Process a `'keydown'` event and invoke a matching key binding. + * + * @param event - The event object for a `'keydown'` event. + * + * #### Notes + * This should be called in response to a `'keydown'` event in order + * to invoke the command for the best matching key binding. + * + * The registry **does not** install its own listener for `'keydown'` + * events. This allows the application full control over the nodes + * and phase for which the registry processes `'keydown'` events. + * + * When the keydown event is processed, if the event target or any of its + * ancestor nodes has a `data-lm-suppress-shortcuts` attribute, its keydown + * events will not invoke commands. + */ + CommandRegistry.prototype.processKeydownEvent = function (event) { + // Bail immediately if playing back keystrokes. + if (this._replaying) { + return; + } + // Get the normalized keystroke for the event. + var keystroke = CommandRegistry.keystrokeForKeydownEvent(event); + // If the keystroke is not valid for the keyboard layout, replay + // any suppressed events and clear the pending state. + if (!keystroke) { + this._replayKeydownEvents(); + this._clearPendingState(); + return; + } + // Add the keystroke to the current key sequence. + this._keystrokes.push(keystroke); + // Find the exact and partial matches for the key sequence. + var _a = Private$6.matchKeyBinding(this._keyBindings, this._keystrokes, event), exact = _a.exact, partial = _a.partial; + // If there is no exact match and no partial match, replay + // any suppressed events and clear the pending state. + if (!exact && !partial) { + this._replayKeydownEvents(); + this._clearPendingState(); + return; + } + // Stop propagation of the event. If there is only a partial match, + // the event will be replayed if a final exact match never occurs. + event.preventDefault(); + event.stopPropagation(); + // If there is an exact match but no partial match, the exact match + // can be dispatched immediately. The pending state is cleared so + // the next key press starts from the default state. + if (exact && !partial) { + this._executeKeyBinding(exact); + this._clearPendingState(); + return; + } + // If there is both an exact match and a partial match, the exact + // match is stored for future dispatch in case the timer expires + // before a more specific match is triggered. + if (exact) { + this._exactKeyMatch = exact; + } + // Store the event for possible playback in the future. + this._keydownEvents.push(event); + // (Re)start the timer to dispatch the most recent exact match + // in case the partial match fails to result in an exact match. + this._startTimer(); + }; + /** + * Start or restart the pending timeout. + */ + CommandRegistry.prototype._startTimer = function () { + var _this = this; + this._clearTimer(); + this._timerID = window.setTimeout(function () { + _this._onPendingTimeout(); + }, Private$6.CHORD_TIMEOUT); + }; + /** + * Clear the pending timeout. + */ + CommandRegistry.prototype._clearTimer = function () { + if (this._timerID !== 0) { + clearTimeout(this._timerID); + this._timerID = 0; + } + }; + /** + * Replay the keydown events which were suppressed. + */ + CommandRegistry.prototype._replayKeydownEvents = function () { + if (this._keydownEvents.length === 0) { + return; + } + this._replaying = true; + this._keydownEvents.forEach(Private$6.replayKeyEvent); + this._replaying = false; + }; + /** + * Execute the command for the given key binding. + * + * If the command is missing or disabled, a warning will be logged. + */ + CommandRegistry.prototype._executeKeyBinding = function (binding) { + var command = binding.command, args = binding.args; + if (!this.hasCommand(command) || !this.isEnabled(command, args)) { + var word = this.hasCommand(command) ? 'enabled' : 'registered'; + var keys = binding.keys.join(', '); + var msg1 = "Cannot execute key binding '" + keys + "':"; + var msg2 = "command '" + command + "' is not " + word + "."; + console.warn(msg1 + " " + msg2); + return; + } + this.execute(command, args); + }; + /** + * Clear the internal pending state. + */ + CommandRegistry.prototype._clearPendingState = function () { + this._clearTimer(); + this._exactKeyMatch = null; + this._keystrokes.length = 0; + this._keydownEvents.length = 0; + }; + /** + * Handle the partial match timeout. + */ + CommandRegistry.prototype._onPendingTimeout = function () { + this._timerID = 0; + if (this._exactKeyMatch) { + this._executeKeyBinding(this._exactKeyMatch); + } + else { + this._replayKeydownEvents(); + } + this._clearPendingState(); + }; + return CommandRegistry; + }()); + /** + * The namespace for the `CommandRegistry` class statics. + */ + (function (CommandRegistry) { + /** + * Parse a keystroke into its constituent components. + * + * @param keystroke - The keystroke of interest. + * + * @returns The parsed components of the keystroke. + * + * #### Notes + * The keystroke should be of the form: + * `[ [ [ ]]]` + * + * The supported modifiers are: `Accel`, `Alt`, `Cmd`, `Ctrl`, and + * `Shift`. The `Accel` modifier is translated to `Cmd` on Mac and + * `Ctrl` on all other platforms. + * + * The parsing is tolerant and will not throw exceptions. Notably: + * - Duplicate modifiers are ignored. + * - Extra primary keys are ignored. + * - The order of modifiers and primary key is irrelevant. + * - The keystroke parts should be separated by whitespace. + * - The keystroke is case sensitive. + */ + function parseKeystroke(keystroke) { + var key = ''; + var alt = false; + var cmd = false; + var ctrl = false; + var shift = false; + for (var _i = 0, _a = keystroke.split(/\s+/); _i < _a.length; _i++) { + var token = _a[_i]; + if (token === 'Accel') { + if (Platform.IS_MAC) { + cmd = true; + } + else { + ctrl = true; + } + } + else if (token === 'Alt') { + alt = true; + } + else if (token === 'Cmd') { + cmd = true; + } + else if (token === 'Ctrl') { + ctrl = true; + } + else if (token === 'Shift') { + shift = true; + } + else if (token.length > 0) { + key = token; + } + } + return { cmd: cmd, ctrl: ctrl, alt: alt, shift: shift, key: key }; + } + CommandRegistry.parseKeystroke = parseKeystroke; + /** + * Normalize a keystroke into a canonical representation. + * + * @param keystroke - The keystroke of interest. + * + * @returns The normalized representation of the keystroke. + * + * #### Notes + * This normalizes the keystroke by removing duplicate modifiers and + * extra primary keys, and assembling the parts in a canonical order. + * + * The `Cmd` modifier is ignored on non-Mac platforms. + */ + function normalizeKeystroke(keystroke) { + var mods = ''; + var parts = parseKeystroke(keystroke); + if (parts.ctrl) { + mods += 'Ctrl '; + } + if (parts.alt) { + mods += 'Alt '; + } + if (parts.shift) { + mods += 'Shift '; + } + if (parts.cmd && Platform.IS_MAC) { + mods += 'Cmd '; + } + return mods + parts.key; + } + CommandRegistry.normalizeKeystroke = normalizeKeystroke; + /** + * Get the platform-specific normalized keys for an options object. + * + * @param options - The options for the key binding. + * + * @returns Array of combined, normalized keys. + */ + function normalizeKeys(options) { + var keys; + if (Platform.IS_WIN) { + keys = options.winKeys || options.keys; + } + else if (Platform.IS_MAC) { + keys = options.macKeys || options.keys; + } + else { + keys = options.linuxKeys || options.keys; + } + return keys.map(normalizeKeystroke); + } + CommandRegistry.normalizeKeys = normalizeKeys; + /** + * Format a keystroke for display on the local system. + */ + function formatKeystroke(keystroke) { + var mods = ''; + var parts = parseKeystroke(keystroke); + if (Platform.IS_MAC) { + if (parts.ctrl) { + mods += '\u2303 '; + } + if (parts.alt) { + mods += '\u2325 '; + } + if (parts.shift) { + mods += '\u21E7 '; + } + if (parts.cmd) { + mods += '\u2318 '; + } + } + else { + if (parts.ctrl) { + mods += 'Ctrl+'; + } + if (parts.alt) { + mods += 'Alt+'; + } + if (parts.shift) { + mods += 'Shift+'; + } + } + return mods + parts.key; + } + CommandRegistry.formatKeystroke = formatKeystroke; + /** + * Create a normalized keystroke for a `'keydown'` event. + * + * @param event - The event object for a `'keydown'` event. + * + * @returns A normalized keystroke, or an empty string if the event + * does not represent a valid keystroke for the given layout. + */ + function keystrokeForKeydownEvent(event) { + var key = getKeyboardLayout().keyForKeydownEvent(event); + if (!key) { + return ''; + } + var mods = ''; + if (event.ctrlKey) { + mods += 'Ctrl '; + } + if (event.altKey) { + mods += 'Alt '; + } + if (event.shiftKey) { + mods += 'Shift '; + } + if (event.metaKey && Platform.IS_MAC) { + mods += 'Cmd '; + } + return mods + key; + } + CommandRegistry.keystrokeForKeydownEvent = keystrokeForKeydownEvent; + })(CommandRegistry || (CommandRegistry = {})); + /** + * The namespace for the module implementation details. + */ + var Private$6; + (function (Private) { + /** + * The timeout in ms for triggering a key binding chord. + */ + Private.CHORD_TIMEOUT = 1000; + /** + * Create a normalized command from an options object. + */ + function createCommand(options) { + var icon; + var iconClass; + /* */ + if (!(options.icon) || typeof options.icon === 'string') { + // alias icon to iconClass + iconClass = asFunc(options.iconClass || options.icon, emptyStringFunc); + icon = iconClass; + } + else { + /* / */ + iconClass = asFunc(options.iconClass, emptyStringFunc); + icon = asFunc(options.icon, undefinedFunc); + /* */ + } + /* */ + return { + execute: options.execute, + label: asFunc(options.label, emptyStringFunc), + mnemonic: asFunc(options.mnemonic, negativeOneFunc), + icon: icon, + iconClass: iconClass, + iconLabel: asFunc(options.iconLabel, emptyStringFunc), + caption: asFunc(options.caption, emptyStringFunc), + usage: asFunc(options.usage, emptyStringFunc), + className: asFunc(options.className, emptyStringFunc), + dataset: asFunc(options.dataset, emptyDatasetFunc), + isEnabled: options.isEnabled || trueFunc, + isToggled: options.isToggled || falseFunc, + isVisible: options.isVisible || trueFunc + }; + } + Private.createCommand = createCommand; + /** + * Create a key binding object from key binding options. + */ + function createKeyBinding(options) { + return { + keys: CommandRegistry.normalizeKeys(options), + selector: validateSelector(options), + command: options.command, + args: options.args || JSONExt.emptyObject + }; + } + Private.createKeyBinding = createKeyBinding; + /** + * Find the key bindings which match a key sequence. + * + * This returns a match result which contains the best exact matching + * binding, and a flag which indicates if there are partial matches. + */ + function matchKeyBinding(bindings, keys, event) { + // The current best exact match. + var exact = null; + // Whether a partial match has been found. + var partial = false; + // The match distance for the exact match. + var distance = Infinity; + // The specificity for the exact match. + var specificity = 0; + // Iterate over the bindings and search for the best match. + for (var i = 0, n = bindings.length; i < n; ++i) { + // Lookup the current binding. + var binding = bindings[i]; + // Check whether the key binding sequence is a match. + var sqm = matchSequence(binding.keys, keys); + // If there is no match, the binding is ignored. + if (sqm === 0 /* None */) { + continue; + } + // If it is a partial match and no other partial match has been + // found, ensure the selector matches and set the partial flag. + if (sqm === 2 /* Partial */) { + if (!partial && targetDistance(binding.selector, event) !== -1) { + partial = true; + } + continue; + } + // Ignore the match if the selector doesn't match, or if the + // matched node is farther away than the current best match. + var td = targetDistance(binding.selector, event); + if (td === -1 || td > distance) { + continue; + } + // Get the specificity for the selector. + var sp = Selector.calculateSpecificity(binding.selector); + // Update the best match if this match is stronger. + if (!exact || td < distance || sp >= specificity) { + exact = binding; + distance = td; + specificity = sp; + } + } + // Return the match result. + return { exact: exact, partial: partial }; + } + Private.matchKeyBinding = matchKeyBinding; + /** + * Replay a keyboard event. + * + * This synthetically dispatches a clone of the keyboard event. + */ + function replayKeyEvent(event) { + event.target.dispatchEvent(cloneKeyboardEvent(event)); + } + Private.replayKeyEvent = replayKeyEvent; + /** + * A singleton empty string function. + */ + var emptyStringFunc = function () { return ''; }; + /** + * A singleton `-1` number function + */ + var negativeOneFunc = function () { return -1; }; + /** + * A singleton true boolean function. + */ + var trueFunc = function () { return true; }; + /** + * A singleton false boolean function. + */ + var falseFunc = function () { return false; }; + /** + * A singleton empty dataset function. + */ + var emptyDatasetFunc = function () { return ({}); }; + /** + * A singleton undefined function + */ + var undefinedFunc = function () { return undefined; }; + /** + * Cast a value or command func to a command func. + */ + function asFunc(value, dfault) { + if (value === undefined) { + return dfault; + } + if (typeof value === 'function') { + return value; + } + return function () { return value; }; + } + /** + * Validate the selector for an options object. + * + * This returns the validated selector, or throws if the selector is + * invalid or contains commas. + */ + function validateSelector(options) { + if (options.selector.indexOf(',') !== -1) { + throw new Error("Selector cannot contain commas: " + options.selector); + } + if (!Selector.isValid(options.selector)) { + throw new Error("Invalid selector: " + options.selector); + } + return options.selector; + } + /** + * Test whether a key binding sequence matches a key sequence. + * + * Returns a `SequenceMatch` value indicating the type of match. + */ + function matchSequence(bindKeys, userKeys) { + if (bindKeys.length < userKeys.length) { + return 0 /* None */; + } + for (var i = 0, n = userKeys.length; i < n; ++i) { + if (bindKeys[i] !== userKeys[i]) { + return 0 /* None */; + } + } + if (bindKeys.length > userKeys.length) { + return 2 /* Partial */; + } + return 1 /* Exact */; + } + /** + * Find the distance from the target node to the first matching node. + * + * This traverses the event path from `target` to `currentTarget` and + * computes the distance from `target` to the first node which matches + * the CSS selector. If no match is found, `-1` is returned. + */ + function targetDistance(selector, event) { + var targ = event.target; + var curr = event.currentTarget; + for (var dist = 0; targ !== null; targ = targ.parentElement, ++dist) { + if (targ.hasAttribute('data-lm-suppress-shortcuts')) { + return -1; + } + /* */ + if (targ.hasAttribute('data-p-suppress-shortcuts')) { + return -1; + } + /* */ + if (Selector.matches(targ, selector)) { + return dist; + } + if (targ === curr) { + return -1; + } + } + return -1; + } + /** + * Clone a keyboard event. + */ + function cloneKeyboardEvent(event) { + // A custom event is required because Chrome nulls out the + // `keyCode` field in user-generated `KeyboardEvent` types. + var clone = document.createEvent('Event'); + var bubbles = event.bubbles || true; + var cancelable = event.cancelable || true; + clone.initEvent(event.type || 'keydown', bubbles, cancelable); + clone.key = event.key || ''; + clone.keyCode = event.keyCode || 0; + clone.which = event.keyCode || 0; + clone.ctrlKey = event.ctrlKey || false; + clone.altKey = event.altKey || false; + clone.shiftKey = event.shiftKey || false; + clone.metaKey = event.metaKey || false; + clone.view = event.view || window; + return clone; + } + })(Private$6 || (Private$6 = {})); + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics$2 = function(d, b) { + extendStatics$2 = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics$2(d, b); + }; + + function __extends$4(d, b) { + extendStatics$2(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + /** + * A virtual node which represents plain text content. + * + * #### Notes + * User code will not typically create a `VirtualText` node directly. + * Instead, the `h()` function will be used to create an element tree. + */ + var VirtualText = /** @class */ (function () { + /** + * Construct a new virtual text node. + * + * @param content - The text content for the node. + */ + function VirtualText(content) { + /** + * The type of the node. + * + * This value can be used as a type guard for discriminating the + * `VirtualNode` union type. + */ + this.type = 'text'; + this.content = content; + } + return VirtualText; + }()); + /** + * A virtual node which represents an HTML element. + * + * #### Notes + * User code will not typically create a `VirtualElement` node directly. + * Instead, the `h()` function will be used to create an element tree. + */ + var VirtualElement = /** @class */ (function () { + /** + * Construct a new virtual element node. + * + * @param tag - The element tag name. + * + * @param attrs - The element attributes. + * + * @param children - The element children. + * + * @param renderer - An optional custom renderer for the element. + */ + function VirtualElement(tag, attrs, children, renderer) { + /** + * The type of the node. + * + * This value can be used as a type guard for discriminating the + * `VirtualNode` union type. + */ + this.type = 'element'; + this.tag = tag; + this.attrs = attrs; + this.children = children; + this.renderer = renderer; + } + return VirtualElement; + }()); + /** + * DEPRECATED - use VirtualElement with a defined renderer param instead. + * This class is provided as a backwards compatibility shim + * + * A "pass thru" virtual node whose children are managed by a render and an + * unrender callback. The intent of this flavor of virtual node is to make + * it easy to blend other kinds of virtualdom (eg React) into Phosphor's + * virtualdom. + * + * #### Notes + * User code will not typically create a `VirtualElementPass` node directly. + * Instead, the `hpass()` function will be used to create an element tree. + */ + var VirtualElementPass = /** @class */ (function (_super) { + __extends$4(VirtualElementPass, _super); + /** + * DEPRECATED - use VirtualElement with a defined renderer param instead + * + * Construct a new virtual element pass thru node. + * + * @param tag - the tag of the parent element of this node. Once the parent + * element is rendered, it will be passed as an argument to + * renderer.render + * + * @param attrs - attributes that will assigned to the + * parent element + * + * @param renderer - an object with render and unrender + * functions, each of which should take a single argument of type + * HTMLElement and return nothing. If null, the parent element + * will be rendered barren without any children. + */ + function VirtualElementPass(tag, attrs, renderer) { + return _super.call(this, tag, attrs, [], renderer || undefined) || this; + } + return VirtualElementPass; + }(VirtualElement)); + function h(tag) { + var attrs = {}; + var renderer; + var children = []; + for (var i = 1, n = arguments.length; i < n; ++i) { + var arg = arguments[i]; + if (typeof arg === 'string') { + children.push(new VirtualText(arg)); + } + else if (arg instanceof VirtualText) { + children.push(arg); + } + else if (arg instanceof VirtualElement) { + children.push(arg); + } + else if (arg instanceof Array) { + extend(children, arg); + } + else if ((i === 1 || i === 2) && arg && typeof arg === 'object') { + if ("render" in arg) { + renderer = arg; + } + else { + attrs = arg; + } + } + } + return new VirtualElement(tag, attrs, children, renderer); + function extend(array, values) { + for (var _i = 0, values_1 = values; _i < values_1.length; _i++) { + var child = values_1[_i]; + if (typeof child === 'string') { + array.push(new VirtualText(child)); + } + else if (child instanceof VirtualText) { + array.push(child); + } + else if (child instanceof VirtualElement) { + array.push(child); + } + } + } + } + /** + * The namespace for the `h` function statics. + */ + (function (h) { + h.a = h.bind(undefined, 'a'); + h.abbr = h.bind(undefined, 'abbr'); + h.address = h.bind(undefined, 'address'); + h.area = h.bind(undefined, 'area'); + h.article = h.bind(undefined, 'article'); + h.aside = h.bind(undefined, 'aside'); + h.audio = h.bind(undefined, 'audio'); + h.b = h.bind(undefined, 'b'); + h.bdi = h.bind(undefined, 'bdi'); + h.bdo = h.bind(undefined, 'bdo'); + h.blockquote = h.bind(undefined, 'blockquote'); + h.br = h.bind(undefined, 'br'); + h.button = h.bind(undefined, 'button'); + h.canvas = h.bind(undefined, 'canvas'); + h.caption = h.bind(undefined, 'caption'); + h.cite = h.bind(undefined, 'cite'); + h.code = h.bind(undefined, 'code'); + h.col = h.bind(undefined, 'col'); + h.colgroup = h.bind(undefined, 'colgroup'); + h.data = h.bind(undefined, 'data'); + h.datalist = h.bind(undefined, 'datalist'); + h.dd = h.bind(undefined, 'dd'); + h.del = h.bind(undefined, 'del'); + h.dfn = h.bind(undefined, 'dfn'); + h.div = h.bind(undefined, 'div'); + h.dl = h.bind(undefined, 'dl'); + h.dt = h.bind(undefined, 'dt'); + h.em = h.bind(undefined, 'em'); + h.embed = h.bind(undefined, 'embed'); + h.fieldset = h.bind(undefined, 'fieldset'); + h.figcaption = h.bind(undefined, 'figcaption'); + h.figure = h.bind(undefined, 'figure'); + h.footer = h.bind(undefined, 'footer'); + h.form = h.bind(undefined, 'form'); + h.h1 = h.bind(undefined, 'h1'); + h.h2 = h.bind(undefined, 'h2'); + h.h3 = h.bind(undefined, 'h3'); + h.h4 = h.bind(undefined, 'h4'); + h.h5 = h.bind(undefined, 'h5'); + h.h6 = h.bind(undefined, 'h6'); + h.header = h.bind(undefined, 'header'); + h.hr = h.bind(undefined, 'hr'); + h.i = h.bind(undefined, 'i'); + h.iframe = h.bind(undefined, 'iframe'); + h.img = h.bind(undefined, 'img'); + h.input = h.bind(undefined, 'input'); + h.ins = h.bind(undefined, 'ins'); + h.kbd = h.bind(undefined, 'kbd'); + h.label = h.bind(undefined, 'label'); + h.legend = h.bind(undefined, 'legend'); + h.li = h.bind(undefined, 'li'); + h.main = h.bind(undefined, 'main'); + h.map = h.bind(undefined, 'map'); + h.mark = h.bind(undefined, 'mark'); + h.meter = h.bind(undefined, 'meter'); + h.nav = h.bind(undefined, 'nav'); + h.noscript = h.bind(undefined, 'noscript'); + h.object = h.bind(undefined, 'object'); + h.ol = h.bind(undefined, 'ol'); + h.optgroup = h.bind(undefined, 'optgroup'); + h.option = h.bind(undefined, 'option'); + h.output = h.bind(undefined, 'output'); + h.p = h.bind(undefined, 'p'); + h.param = h.bind(undefined, 'param'); + h.pre = h.bind(undefined, 'pre'); + h.progress = h.bind(undefined, 'progress'); + h.q = h.bind(undefined, 'q'); + h.rp = h.bind(undefined, 'rp'); + h.rt = h.bind(undefined, 'rt'); + h.ruby = h.bind(undefined, 'ruby'); + h.s = h.bind(undefined, 's'); + h.samp = h.bind(undefined, 'samp'); + h.section = h.bind(undefined, 'section'); + h.select = h.bind(undefined, 'select'); + h.small = h.bind(undefined, 'small'); + h.source = h.bind(undefined, 'source'); + h.span = h.bind(undefined, 'span'); + h.strong = h.bind(undefined, 'strong'); + h.sub = h.bind(undefined, 'sub'); + h.summary = h.bind(undefined, 'summary'); + h.sup = h.bind(undefined, 'sup'); + h.table = h.bind(undefined, 'table'); + h.tbody = h.bind(undefined, 'tbody'); + h.td = h.bind(undefined, 'td'); + h.textarea = h.bind(undefined, 'textarea'); + h.tfoot = h.bind(undefined, 'tfoot'); + h.th = h.bind(undefined, 'th'); + h.thead = h.bind(undefined, 'thead'); + h.time = h.bind(undefined, 'time'); + h.title = h.bind(undefined, 'title'); + h.tr = h.bind(undefined, 'tr'); + h.track = h.bind(undefined, 'track'); + h.u = h.bind(undefined, 'u'); + h.ul = h.bind(undefined, 'ul'); + h.var_ = h.bind(undefined, 'var'); + h.video = h.bind(undefined, 'video'); + h.wbr = h.bind(undefined, 'wbr'); + })(h || (h = {})); + /** + * The namespace for the virtual DOM rendering functions. + */ + var VirtualDOM; + (function (VirtualDOM) { + function realize(node) { + return Private$7.createDOMNode(node); + } + VirtualDOM.realize = realize; + /** + * Render virtual DOM content into a host element. + * + * @param content - The virtual DOM content to render. + * + * @param host - The host element for the rendered content. + * + * #### Notes + * This renders the delta from the previous rendering. It assumes that + * the content of the host element is not manipulated by external code. + * + * Providing `null` content will clear the rendering. + * + * Externally modifying the provided content or the host element will + * result in undefined rendering behavior. + */ + function render(content, host) { + var oldContent = Private$7.hostMap.get(host) || []; + var newContent = Private$7.asContentArray(content); + Private$7.hostMap.set(host, newContent); + Private$7.updateContent(host, oldContent, newContent); + } + VirtualDOM.render = render; + })(VirtualDOM || (VirtualDOM = {})); + /** + * The namespace for the module implementation details. + */ + var Private$7; + (function (Private) { + /** + * A weak mapping of host element to virtual DOM content. + */ + Private.hostMap = new WeakMap(); + /** + * Cast a content value to a content array. + */ + function asContentArray(value) { + if (!value) { + return []; + } + if (value instanceof Array) { + return value; + } + return [value]; + } + Private.asContentArray = asContentArray; + function createDOMNode(node) { + var host = arguments[1] || null; + var before = arguments[2] || null; + if (host) { + host.insertBefore(createDOMNode(node), before); + } + else { + // Create a text node for a virtual text node. + if (node.type === 'text') { + return document.createTextNode(node.content); + } + // Create the HTML element with the specified tag. + host = document.createElement(node.tag); + // Add the attributes for the new element. + addAttrs(host, node.attrs); + if (node.renderer) { + node.renderer.render(host, { attrs: node.attrs, children: node.children }); + return host; + } + // Recursively populate the element with child content. + for (var i = 0, n = node.children.length; i < n; ++i) { + createDOMNode(node.children[i], host); + } + } + return host; + } + Private.createDOMNode = createDOMNode; + /** + * Update a host element with the delta of the virtual content. + * + * This is the core "diff" algorithm. There is no explicit "patch" + * phase. The host is patched at each step as the diff progresses. + */ + function updateContent(host, oldContent, newContent) { + // Bail early if the content is identical. + if (oldContent === newContent) { + return; + } + // Collect the old keyed elems into a mapping. + var oldKeyed = collectKeys(host, oldContent); + // Create a copy of the old content which can be modified in-place. + var oldCopy = oldContent.slice(); + // Update the host with the new content. The diff always proceeds + // forward and never modifies a previously visited index. The old + // copy array is modified in-place to reflect the changes made to + // the host children. This causes the stale nodes to be pushed to + // the end of the host node and removed at the end of the loop. + var currElem = host.firstChild; + var newCount = newContent.length; + for (var i = 0; i < newCount; ++i) { + // If the old content is exhausted, create a new node. + if (i >= oldCopy.length) { + createDOMNode(newContent[i], host); + continue; + } + // Lookup the old and new virtual nodes. + var oldVNode = oldCopy[i]; + var newVNode = newContent[i]; + // If both elements are identical, there is nothing to do. + if (oldVNode === newVNode) { + currElem = currElem.nextSibling; + continue; + } + // Handle the simplest case of in-place text update first. + if (oldVNode.type === 'text' && newVNode.type === 'text') { + currElem.textContent = newVNode.content; + currElem = currElem.nextSibling; + continue; + } + // If the old or new node is a text node, the other node is now + // known to be an element node, so create and insert a new node. + if (oldVNode.type === 'text' || newVNode.type === 'text') { + ArrayExt.insert(oldCopy, i, newVNode); + createDOMNode(newVNode, host, currElem); + continue; + } + // If the old XOR new node has a custom renderer, + // create and insert a new node. + if (!(oldVNode.renderer) != !(newVNode.renderer)) { + ArrayExt.insert(oldCopy, i, newVNode); + createDOMNode(newVNode, host, currElem); + continue; + } + // At this point, both nodes are known to be element nodes. + // If the new elem is keyed, move an old keyed elem to the proper + // location before proceeding with the diff. The search can start + // at the current index, since the unmatched old keyed elems are + // pushed forward in the old copy array. + var newKey = newVNode.attrs.key; + if (newKey && newKey in oldKeyed) { + var pair = oldKeyed[newKey]; + if (pair.vNode !== oldVNode) { + ArrayExt.move(oldCopy, oldCopy.indexOf(pair.vNode, i + 1), i); + host.insertBefore(pair.element, currElem); + oldVNode = pair.vNode; + currElem = pair.element; + } + } + // If both elements are identical, there is nothing to do. + if (oldVNode === newVNode) { + currElem = currElem.nextSibling; + continue; + } + // If the old elem is keyed and does not match the new elem key, + // create a new node. This is necessary since the old keyed elem + // may be matched at a later point in the diff. + var oldKey = oldVNode.attrs.key; + if (oldKey && oldKey !== newKey) { + ArrayExt.insert(oldCopy, i, newVNode); + createDOMNode(newVNode, host, currElem); + continue; + } + // If the tags are different, create a new node. + if (oldVNode.tag !== newVNode.tag) { + ArrayExt.insert(oldCopy, i, newVNode); + createDOMNode(newVNode, host, currElem); + continue; + } + // At this point, the element can be updated in-place. + // Update the element attributes. + updateAttrs(currElem, oldVNode.attrs, newVNode.attrs); + // Update the element content. + if (newVNode.renderer) { + newVNode.renderer.render(currElem, { attrs: newVNode.attrs, children: newVNode.children }); + } + else { + updateContent(currElem, oldVNode.children, newVNode.children); + } + // Step to the next sibling element. + currElem = currElem.nextSibling; + } + // Cleanup stale DOM + removeContent(host, oldCopy, newCount, true); + } + Private.updateContent = updateContent; + /** + * Handle cleanup of stale vdom and its associated DOM. The host node is + * traversed recursively (in depth-first order), and any explicit cleanup + * required by a child node is carried out when it is visited (eg if a node + * has a custom renderer, the renderer.unrender function will be called). + * Once the subtree beneath each child of host has been completely visited, + * that child will be removed via a call to host.removeChild. + */ + function removeContent(host, oldContent, newCount, _sentinel) { + // Dispose of the old nodes pushed to the end of the host. + for (var i = oldContent.length - 1; i >= newCount; --i) { + var oldNode = oldContent[i]; + var child = (_sentinel ? host.lastChild : host.childNodes[i]); + // recursively clean up host children + if (oldNode.type === 'text') ; + else if (oldNode.renderer && oldNode.renderer.unrender) { + oldNode.renderer.unrender(child, { attrs: oldNode.attrs, children: oldNode.children }); + } + else { + removeContent(child, oldNode.children, 0, false); + } + if (_sentinel) { + host.removeChild(child); + } + } + } + /** + * A set of special-cased attribute names. + */ + var specialAttrs = { + 'key': true, + 'className': true, + 'htmlFor': true, + 'dataset': true, + 'style': true, + }; + /** + * Add element attributes to a newly created HTML element. + */ + function addAttrs(element, attrs) { + // Add the inline event listeners and node attributes. + for (var name_1 in attrs) { + if (name_1 in specialAttrs) { + continue; + } + if (name_1.substr(0, 2) === 'on') { + element[name_1] = attrs[name_1]; + } + else { + element.setAttribute(name_1, attrs[name_1]); + } + } + // Add the element `class` attribute. + if (attrs.className !== undefined) { + element.setAttribute('class', attrs.className); + } + // Add the element `for` attribute. + if (attrs.htmlFor !== undefined) { + element.setAttribute('for', attrs.htmlFor); + } + // Add the dataset values. + if (attrs.dataset) { + addDataset(element, attrs.dataset); + } + // Add the inline styles. + if (attrs.style) { + addStyle(element, attrs.style); + } + } + /** + * Update the element attributes of an HTML element. + */ + function updateAttrs(element, oldAttrs, newAttrs) { + // Do nothing if the attrs are the same object. + if (oldAttrs === newAttrs) { + return; + } + // Setup the strongly typed loop variable. + var name; + // Remove attributes and listeners which no longer exist. + for (name in oldAttrs) { + if (name in specialAttrs || name in newAttrs) { + continue; + } + if (name.substr(0, 2) === 'on') { + element[name] = null; + } + else { + element.removeAttribute(name); + } + } + // Add and update new and existing attributes and listeners. + for (name in newAttrs) { + if (name in specialAttrs || oldAttrs[name] === newAttrs[name]) { + continue; + } + if (name.substr(0, 2) === 'on') { + element[name] = newAttrs[name]; + } + else { + element.setAttribute(name, newAttrs[name]); + } + } + // Update the element `class` attribute. + if (oldAttrs.className !== newAttrs.className) { + if (newAttrs.className !== undefined) { + element.setAttribute('class', newAttrs.className); + } + else { + element.removeAttribute('class'); + } + } + // Add the element `for` attribute. + if (oldAttrs.htmlFor !== newAttrs.htmlFor) { + if (newAttrs.htmlFor !== undefined) { + element.setAttribute('for', newAttrs.htmlFor); + } + else { + element.removeAttribute('for'); + } + } + // Update the dataset values. + if (oldAttrs.dataset !== newAttrs.dataset) { + updateDataset(element, oldAttrs.dataset || {}, newAttrs.dataset || {}); + } + // Update the inline styles. + if (oldAttrs.style !== newAttrs.style) { + updateStyle(element, oldAttrs.style || {}, newAttrs.style || {}); + } + } + /** + * Add dataset values to a newly created HTML element. + */ + function addDataset(element, dataset) { + for (var name_2 in dataset) { + element.setAttribute("data-" + name_2, dataset[name_2]); + } + } + /** + * Update the dataset values of an HTML element. + */ + function updateDataset(element, oldDataset, newDataset) { + for (var name_3 in oldDataset) { + if (!(name_3 in newDataset)) { + element.removeAttribute("data-" + name_3); + } + } + for (var name_4 in newDataset) { + if (oldDataset[name_4] !== newDataset[name_4]) { + element.setAttribute("data-" + name_4, newDataset[name_4]); + } + } + } + /** + * Add inline style values to a newly created HTML element. + */ + function addStyle(element, style) { + var elemStyle = element.style; + var name; + for (name in style) { + elemStyle[name] = style[name]; + } + } + /** + * Update the inline style values of an HTML element. + */ + function updateStyle(element, oldStyle, newStyle) { + var elemStyle = element.style; + var name; + for (name in oldStyle) { + if (!(name in newStyle)) { + elemStyle[name] = ''; + } + } + for (name in newStyle) { + if (oldStyle[name] !== newStyle[name]) { + elemStyle[name] = newStyle[name]; + } + } + } + /** + * Collect a mapping of keyed elements for the host content. + */ + function collectKeys(host, content) { + var node = host.firstChild; + var keyMap = Object.create(null); + for (var _i = 0, content_1 = content; _i < content_1.length; _i++) { + var vNode = content_1[_i]; + if (vNode.type === 'element' && vNode.attrs.key) { + keyMap[vNode.attrs.key] = { vNode: vNode, element: node }; + } + node = node.nextSibling; + } + return keyMap; + } + })(Private$7 || (Private$7 = {})); + + /** + * An object which manages a drag-drop operation. + * + * A drag object dispatches four different events to drop targets: + * + * - `'lm-dragenter'` - Dispatched when the mouse enters the target + * element. This event must be canceled in order to receive any + * of the other events. + * + * - `'lm-dragover'` - Dispatched when the mouse moves over the drop + * target. It must cancel the event and set the `dropAction` to one + * of the supported actions in order to receive drop events. + * + * - `'lm-dragleave'` - Dispatched when the mouse leaves the target + * element. This includes moving the mouse into child elements. + * + * - `'lm-drop'`- Dispatched when the mouse is released over the target + * element when the target indicates an appropriate drop action. If + * the event is canceled, the indicated drop action is returned to + * the initiator through the resolved promise. + * + * A drag operation can be terminated at any time by pressing `Escape` + * or by disposing the drag object. + * + * A drag object has the ability to automatically scroll a scrollable + * element when the mouse is hovered near one of its edges. To enable + * this, add the `data-lm-dragscroll` attribute to any element which + * the drag object should consider for scrolling. + * + * #### Notes + * This class is designed to be used when dragging and dropping custom + * data *within* a single application. It is *not* a replacement for + * the native drag-drop API. Instead, it provides an API which allows + * drag operations to be initiated programmatically and enables the + * transfer of arbitrary non-string objects; features which are not + * possible with the native drag-drop API. + */ + var Drag = /** @class */ (function () { + /** + * Construct a new drag object. + * + * @param options - The options for initializing the drag. + */ + function Drag(options) { + var _this = this; + /** + * The scroll loop handler function. + */ + this._onScrollFrame = function () { + // Bail early if there is no scroll target. + if (!_this._scrollTarget) { + return; + } + // Unpack the scroll target. + var _a = _this._scrollTarget, element = _a.element, edge = _a.edge, distance = _a.distance; + // Calculate the scroll delta using nonlinear acceleration. + var d = Private$8.SCROLL_EDGE_SIZE - distance; + var f = Math.pow(d / Private$8.SCROLL_EDGE_SIZE, 2); + var s = Math.max(1, Math.round(f * Private$8.SCROLL_EDGE_SIZE)); + // Scroll the element in the specified direction. + switch (edge) { + case 'top': + element.scrollTop -= s; + break; + case 'left': + element.scrollLeft -= s; + break; + case 'right': + element.scrollLeft += s; + break; + case 'bottom': + element.scrollTop += s; + break; + } + // Request the next cycle of the scroll loop. + requestAnimationFrame(_this._onScrollFrame); + }; + this._disposed = false; + this._dropAction = 'none'; + this._override = null; + this._currentTarget = null; + this._currentElement = null; + this._promise = null; + this._scrollTarget = null; + this._resolve = null; + this.mimeData = options.mimeData; + this.dragImage = options.dragImage || null; + this.proposedAction = options.proposedAction || 'copy'; + this.supportedActions = options.supportedActions || 'all'; + this.source = options.source || null; + } + /** + * Dispose of the resources held by the drag object. + * + * #### Notes + * This will cancel the drag operation if it is active. + */ + Drag.prototype.dispose = function () { + // Do nothing if the drag object is already disposed. + if (this._disposed) { + return; + } + this._disposed = true; + // If there is a current target, dispatch a drag leave event. + if (this._currentTarget) { + var event_1 = Private$8.createMouseEvent('mouseup', -1, -1); + Private$8.dispatchDragLeave(this, this._currentTarget, null, event_1); + } + // Finalize the drag object with `'none'`. + this._finalize('none'); + }; + Object.defineProperty(Drag.prototype, "isDisposed", { + /** + * Test whether the drag object is disposed. + */ + get: function () { + return this._disposed; + }, + enumerable: true, + configurable: true + }); + /** + * Start the drag operation at the specified client position. + * + * @param clientX - The client X position for the drag start. + * + * @param clientY - The client Y position for the drag start. + * + * @returns A promise which resolves to the result of the drag. + * + * #### Notes + * If the drag has already been started, the promise created by the + * first call to `start` is returned. + * + * If the drag operation has ended, or if the drag object has been + * disposed, the returned promise will resolve to `'none'`. + * + * The drag object will be automatically disposed when drag operation + * completes. This means `Drag` objects are for single-use only. + * + * This method assumes the left mouse button is already held down. + */ + Drag.prototype.start = function (clientX, clientY) { + var _this = this; + // If the drag object is already disposed, resolve to `None`. + if (this._disposed) { + return Promise.resolve('none'); + } + // If the drag has already been started, return the promise. + if (this._promise) { + return this._promise; + } + // Install the document listeners for the drag object. + this._addListeners(); + // Attach the drag image at the specified client position. + this._attachDragImage(clientX, clientY); + // Create the promise which will be resolved on completion. + this._promise = new Promise(function (resolve, reject) { + _this._resolve = resolve; + }); + // Trigger a fake move event to kick off the drag operation. + var event = Private$8.createMouseEvent('mousemove', clientX, clientY); + document.dispatchEvent(event); + // Return the pending promise for the drag operation. + return this._promise; + }; + /** + * Handle the DOM events for the drag operation. + * + * @param event - The DOM event sent to the drag object. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the document. It should not be + * called directly by user code. + */ + Drag.prototype.handleEvent = function (event) { + switch (event.type) { + case 'mousemove': + this._evtMouseMove(event); + break; + case 'mouseup': + this._evtMouseUp(event); + break; + case 'keydown': + this._evtKeyDown(event); + break; + default: + // Stop all other events during drag-drop. + event.preventDefault(); + event.stopPropagation(); + break; + } + }; + /** + * Handle the `'mousemove'` event for the drag object. + */ + Drag.prototype._evtMouseMove = function (event) { + // Stop all input events during drag-drop. + event.preventDefault(); + event.stopPropagation(); + // Update the current target node and dispatch enter/leave events. + this._updateCurrentTarget(event); + // Update the drag scroll element. + this._updateDragScroll(event); + // Move the drag image to the specified client position. This is + // performed *after* dispatching to prevent unnecessary reflows. + this._moveDragImage(event.clientX, event.clientY); + }; + /** + * Handle the `'mouseup'` event for the drag object. + */ + Drag.prototype._evtMouseUp = function (event) { + // Stop all input events during drag-drop. + event.preventDefault(); + event.stopPropagation(); + // Do nothing if the left button is not released. + if (event.button !== 0) { + return; + } + // Update the current target node and dispatch enter/leave events. + // This prevents a subtle issue where the DOM mutates under the + // cursor after the last move event but before the drop event. + this._updateCurrentTarget(event); + // If there is no current target, finalize with `'none'`. + if (!this._currentTarget) { + this._finalize('none'); + return; + } + // If the last drop action was `'none'`, dispatch a leave event + // to the current target and finalize the drag with `'none'`. + if (this._dropAction === 'none') { + Private$8.dispatchDragLeave(this, this._currentTarget, null, event); + this._finalize('none'); + return; + } + // Dispatch the drop event at the current target and finalize + // with the resulting drop action. + var action = Private$8.dispatchDrop(this, this._currentTarget, event); + this._finalize(action); + }; + /** + * Handle the `'keydown'` event for the drag object. + */ + Drag.prototype._evtKeyDown = function (event) { + // Stop all input events during drag-drop. + event.preventDefault(); + event.stopPropagation(); + // Cancel the drag if `Escape` is pressed. + if (event.keyCode === 27) { + this.dispose(); + } + }; + /** + * Add the document event listeners for the drag object. + */ + Drag.prototype._addListeners = function () { + document.addEventListener('mousedown', this, true); + document.addEventListener('mousemove', this, true); + document.addEventListener('mouseup', this, true); + document.addEventListener('mouseenter', this, true); + document.addEventListener('mouseleave', this, true); + document.addEventListener('mouseover', this, true); + document.addEventListener('mouseout', this, true); + document.addEventListener('keydown', this, true); + document.addEventListener('keyup', this, true); + document.addEventListener('keypress', this, true); + document.addEventListener('contextmenu', this, true); + }; + /** + * Remove the document event listeners for the drag object. + */ + Drag.prototype._removeListeners = function () { + document.removeEventListener('mousedown', this, true); + document.removeEventListener('mousemove', this, true); + document.removeEventListener('mouseup', this, true); + document.removeEventListener('mouseenter', this, true); + document.removeEventListener('mouseleave', this, true); + document.removeEventListener('mouseover', this, true); + document.removeEventListener('mouseout', this, true); + document.removeEventListener('keydown', this, true); + document.removeEventListener('keyup', this, true); + document.removeEventListener('keypress', this, true); + document.removeEventListener('contextmenu', this, true); + }; + /** + * Update the drag scroll element under the mouse. + */ + Drag.prototype._updateDragScroll = function (event) { + // Find the scroll target under the mouse. + var target = Private$8.findScrollTarget(event); + // Bail if there is nothing to scroll. + if (!this._scrollTarget && !target) { + return; + } + // Start the scroll loop if needed. + if (!this._scrollTarget) { + setTimeout(this._onScrollFrame, 500); + } + // Update the scroll target. + this._scrollTarget = target; + }; + /** + * Update the current target node using the given mouse event. + */ + Drag.prototype._updateCurrentTarget = function (event) { + // Fetch common local state. + var prevTarget = this._currentTarget; + var currTarget = this._currentTarget; + var prevElem = this._currentElement; + // Find the current indicated element at the given position. + var currElem = document.elementFromPoint(event.clientX, event.clientY); + // Update the current element reference. + this._currentElement = currElem; + // If the indicated element changes from the previous iteration, + // and is different from the current target, dispatch the exit + // event to the target. + if (currElem !== prevElem && currElem !== currTarget) { + Private$8.dispatchDragExit(this, currTarget, currElem, event); + } + // If the indicated element changes from the previous iteration, + // and is different from the current target, dispatch the enter + // event and compute the new target element. + if (currElem !== prevElem && currElem !== currTarget) { + currTarget = Private$8.dispatchDragEnter(this, currElem, currTarget, event); + } + // If the current target element has changed, update the current + // target reference and dispatch the leave event to the old target. + if (currTarget !== prevTarget) { + this._currentTarget = currTarget; + Private$8.dispatchDragLeave(this, prevTarget, currTarget, event); + } + // Dispatch the drag over event and update the drop action. + var action = Private$8.dispatchDragOver(this, currTarget, event); + this._setDropAction(action); + }; + /** + * Attach the drag image element at the specified location. + * + * This is a no-op if there is no drag image element. + */ + Drag.prototype._attachDragImage = function (clientX, clientY) { + if (!this.dragImage) { + return; + } + this.dragImage.classList.add('lm-mod-drag-image'); + /* */ + this.dragImage.classList.add('p-mod-drag-image'); + /* */ + var style = this.dragImage.style; + style.pointerEvents = 'none'; + style.position = 'fixed'; + style.top = clientY + "px"; + style.left = clientX + "px"; + document.body.appendChild(this.dragImage); + }; + /** + * Move the drag image element to the specified location. + * + * This is a no-op if there is no drag image element. + */ + Drag.prototype._moveDragImage = function (clientX, clientY) { + if (!this.dragImage) { + return; + } + var style = this.dragImage.style; + style.top = clientY + "px"; + style.left = clientX + "px"; + }; + /** + * Detach the drag image element from the DOM. + * + * This is a no-op if there is no drag image element. + */ + Drag.prototype._detachDragImage = function () { + if (!this.dragImage) { + return; + } + var parent = this.dragImage.parentNode; + if (!parent) { + return; + } + parent.removeChild(this.dragImage); + }; + /** + * Set the internal drop action state and update the drag cursor. + */ + Drag.prototype._setDropAction = function (action) { + action = Private$8.validateAction(action, this.supportedActions); + if (this._override && this._dropAction === action) { + return; + } + switch (action) { + case 'none': + this._dropAction = action; + this._override = Drag.overrideCursor('no-drop'); + break; + case 'copy': + this._dropAction = action; + this._override = Drag.overrideCursor('copy'); + break; + case 'link': + this._dropAction = action; + this._override = Drag.overrideCursor('alias'); + break; + case 'move': + this._dropAction = action; + this._override = Drag.overrideCursor('move'); + break; + } + }; + /** + * Finalize the drag operation and resolve the drag promise. + */ + Drag.prototype._finalize = function (action) { + // Store the resolve function as a temp variable. + var resolve = this._resolve; + // Remove the document event listeners. + this._removeListeners(); + // Detach the drag image. + this._detachDragImage(); + // Dispose of the cursor override. + if (this._override) { + this._override.dispose(); + this._override = null; + } + // Clear the mime data. + this.mimeData.clear(); + // Clear the rest of the internal drag state. + this._disposed = true; + this._dropAction = 'none'; + this._currentTarget = null; + this._currentElement = null; + this._scrollTarget = null; + this._promise = null; + this._resolve = null; + // Finally, resolve the promise to the given drop action. + if (resolve) { + resolve(action); + } + }; + return Drag; + }()); + /** + * The namespace for the `Drag` class statics. + */ + (function (Drag) { + /** + * Override the cursor icon for the entire document. + * + * @param cursor - The string representing the cursor style. + * + * @returns A disposable which will clear the override when disposed. + * + * #### Notes + * The most recent call to `overrideCursor` takes precedence. + * Disposing an old override has no effect on the current override. + * + * This utility function is used by the `Drag` class to override the + * mouse cursor during a drag-drop operation, but it can also be used + * by other classes to fix the cursor icon during normal mouse drags. + * + * #### Example + * ```typescript + * import { Drag } from '@lumino/dragdrop'; + * + * // Force the cursor to be 'wait' for the entire document. + * let override = Drag.overrideCursor('wait'); + * + * // Clear the override by disposing the return value. + * override.dispose(); + * ``` + */ + function overrideCursor(cursor) { + var id = ++overrideCursorID; + document.body.style.cursor = cursor; + document.body.classList.add('lm-mod-override-cursor'); + /* */ + document.body.classList.add('p-mod-override-cursor'); + /* */ + return new DisposableDelegate(function () { + if (id === overrideCursorID) { + document.body.style.cursor = ''; + document.body.classList.remove('lm-mod-override-cursor'); + /* */ + document.body.classList.remove('p-mod-override-cursor'); + /* */ + } + }); + } + Drag.overrideCursor = overrideCursor; + /** + * The internal id for the active cursor override. + */ + var overrideCursorID = 0; + })(Drag || (Drag = {})); + /** + * The namespace for the module implementation details. + */ + var Private$8; + (function (Private) { + /** + * The size of a drag scroll edge, in pixels. + */ + Private.SCROLL_EDGE_SIZE = 20; + /** + * Validate the given action is one of the supported actions. + * + * Returns the given action or `'none'` if the action is unsupported. + */ + function validateAction(action, supported) { + return (actionTable[action] & supportedTable[supported]) ? action : 'none'; + } + Private.validateAction = validateAction; + /** + * Create a left mouse event at the given position. + * + * @param type - The event type for the mouse event. + * + * @param clientX - The client X position. + * + * @param clientY - The client Y position. + * + * @returns A newly created and initialized mouse event. + */ + function createMouseEvent(type, clientX, clientY) { + var event = document.createEvent('MouseEvent'); + event.initMouseEvent(type, true, true, window, 0, 0, 0, clientX, clientY, false, false, false, false, 0, null); + return event; + } + Private.createMouseEvent = createMouseEvent; + /** + * Find the drag scroll target under the mouse, if any. + */ + function findScrollTarget(event) { + // Look up the client mouse position. + var x = event.clientX; + var y = event.clientY; + // Get the element under the mouse. + var element = document.elementFromPoint(x, y); + // Search for a scrollable target based on the mouse position. + // The null assert in third clause of for-loop is required due to: + // https://github.com/Microsoft/TypeScript/issues/14143 + for (; element; element = element.parentElement) { + // Ignore elements which are not marked as scrollable. + var scrollable = element.hasAttribute('data-lm-dragscroll'); + /* */ + scrollable = scrollable || element.hasAttribute('data-p-dragscroll'); + /* */ + if (!scrollable) { + continue; + } + // Set up the coordinate offsets for the element. + var offsetX = 0; + var offsetY = 0; + if (element === document.body) { + offsetX = window.pageXOffset; + offsetY = window.pageYOffset; + } + // Get the element bounds in viewport coordinates. + var r = element.getBoundingClientRect(); + var top_1 = r.top + offsetY; + var left = r.left + offsetX; + var right = left + r.width; + var bottom = top_1 + r.height; + // Skip the element if it's not under the mouse. + if (x < left || x >= right || y < top_1 || y >= bottom) { + continue; + } + // Compute the distance to each edge. + var dl = x - left + 1; + var dt = y - top_1 + 1; + var dr = right - x; + var db = bottom - y; + // Find the smallest of the edge distances. + var distance = Math.min(dl, dt, dr, db); + // Skip the element if the mouse is not within a scroll edge. + if (distance > Private.SCROLL_EDGE_SIZE) { + continue; + } + // Set up the edge result variable. + var edge = void 0; + // Find the edge for the computed distance. + switch (distance) { + case db: + edge = 'bottom'; + break; + case dt: + edge = 'top'; + break; + case dr: + edge = 'right'; + break; + case dl: + edge = 'left'; + break; + default: + throw 'unreachable'; + } + // Compute how much the element can scroll in width and height. + var dsw = element.scrollWidth - element.clientWidth; + var dsh = element.scrollHeight - element.clientHeight; + // Determine if the element should be scrolled for the edge. + var shouldScroll = void 0; + switch (edge) { + case 'top': + shouldScroll = dsh > 0 && element.scrollTop > 0; + break; + case 'left': + shouldScroll = dsw > 0 && element.scrollLeft > 0; + break; + case 'right': + shouldScroll = dsw > 0 && element.scrollLeft < dsw; + break; + case 'bottom': + shouldScroll = dsh > 0 && element.scrollTop < dsh; + break; + default: + throw 'unreachable'; + } + // Skip the element if it should not be scrolled. + if (!shouldScroll) { + continue; + } + // Return the drag scroll target. + return { element: element, edge: edge, distance: distance }; + } + // No drag scroll target was found. + return null; + } + Private.findScrollTarget = findScrollTarget; + /** + * Dispatch a drag enter event to the indicated element. + * + * @param drag - The drag object associated with the action. + * + * @param currElem - The currently indicated element, or `null`. This + * is the "immediate user selection" from the whatwg spec. + * + * @param currTarget - The current drag target element, or `null`. This + * is the "current target element" from the whatwg spec. + * + * @param event - The mouse event related to the action. + * + * @returns The element to use as the current drag target. This is the + * "current target element" from the whatwg spec, and may be `null`. + * + * #### Notes + * This largely implements the drag enter portion of the whatwg spec: + * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model + */ + function dispatchDragEnter(drag, currElem, currTarget, event) { + // If the current element is null, return null as the new target. + if (!currElem) { + return null; + } + // Dispatch a drag enter event to the current element. + var dragEvent = createDragEvent('lm-dragenter', drag, event, currTarget); + var canceled = !currElem.dispatchEvent(dragEvent); + // If the event was canceled, use the current element as the new target. + if (canceled) { + return currElem; + } + /* */ + dragEvent = createDragEvent('p-dragenter', drag, event, currTarget); + canceled = !currElem.dispatchEvent(dragEvent); + if (canceled) { + return currElem; + } + /* */ + // If the current element is the document body, keep the original target. + if (currElem === document.body) { + return currTarget; + } + // Dispatch a drag enter event on the document body. + dragEvent = createDragEvent('lm-dragenter', drag, event, currTarget); + document.body.dispatchEvent(dragEvent); + /* */ + dragEvent = createDragEvent('p-dragenter', drag, event, currTarget); + document.body.dispatchEvent(dragEvent); + /* */ + // Ignore the event cancellation, and use the body as the new target. + return document.body; + } + Private.dispatchDragEnter = dispatchDragEnter; + /** + * Dispatch a drag exit event to the indicated element. + * + * @param drag - The drag object associated with the action. + * + * @param prevTarget - The previous target element, or `null`. This + * is the previous "current target element" from the whatwg spec. + * + * @param currTarget - The current drag target element, or `null`. This + * is the "current target element" from the whatwg spec. + * + * @param event - The mouse event related to the action. + * + * #### Notes + * This largely implements the drag exit portion of the whatwg spec: + * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model + */ + function dispatchDragExit(drag, prevTarget, currTarget, event) { + // If the previous target is null, do nothing. + if (!prevTarget) { + return; + } + // Dispatch the drag exit event to the previous target. + var dragEvent = createDragEvent('lm-dragexit', drag, event, currTarget); + prevTarget.dispatchEvent(dragEvent); + /* */ + dragEvent = createDragEvent('p-dragexit', drag, event, currTarget); + prevTarget.dispatchEvent(dragEvent); + /* */ + } + Private.dispatchDragExit = dispatchDragExit; + /** + * Dispatch a drag leave event to the indicated element. + * + * @param drag - The drag object associated with the action. + * + * @param prevTarget - The previous target element, or `null`. This + * is the previous "current target element" from the whatwg spec. + * + * @param currTarget - The current drag target element, or `null`. This + * is the "current target element" from the whatwg spec. + * + * @param event - The mouse event related to the action. + * + * #### Notes + * This largely implements the drag leave portion of the whatwg spec: + * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model + */ + function dispatchDragLeave(drag, prevTarget, currTarget, event) { + // If the previous target is null, do nothing. + if (!prevTarget) { + return; + } + // Dispatch the drag leave event to the previous target. + var dragEvent = createDragEvent('lm-dragleave', drag, event, currTarget); + prevTarget.dispatchEvent(dragEvent); + /* */ + dragEvent = createDragEvent('p-dragleave', drag, event, currTarget); + prevTarget.dispatchEvent(dragEvent); + /* */ + } + Private.dispatchDragLeave = dispatchDragLeave; + /** + * Dispatch a drag over event to the indicated element. + * + * @param drag - The drag object associated with the action. + * + * @param currTarget - The current drag target element, or `null`. This + * is the "current target element" from the whatwg spec. + * + * @param event - The mouse event related to the action. + * + * @returns The `DropAction` result of the drag over event. + * + * #### Notes + * This largely implements the drag over portion of the whatwg spec: + * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model + */ + function dispatchDragOver(drag, currTarget, event) { + // If there is no current target, the drop action is none. + if (!currTarget) { + return 'none'; + } + // Dispatch the drag over event to the current target. + var dragEvent = createDragEvent('lm-dragover', drag, event, null); + var canceled = !currTarget.dispatchEvent(dragEvent); + // If the event was canceled, return the drop action result. + if (canceled) { + return dragEvent.dropAction; + } + /* */ + dragEvent = createDragEvent('p-dragover', drag, event, null); + canceled = !currTarget.dispatchEvent(dragEvent); + if (canceled) { + return dragEvent.dropAction; + } + /* */ + // Otherwise, the effective drop action is none. + return 'none'; + } + Private.dispatchDragOver = dispatchDragOver; + /** + * Dispatch a drop event to the indicated element. + * + * @param drag - The drag object associated with the action. + * + * @param currTarget - The current drag target element, or `null`. This + * is the "current target element" from the whatwg spec. + * + * @param event - The mouse event related to the action. + * + * @returns The `DropAction` result of the drop event. + * + * #### Notes + * This largely implements the drag over portion of the whatwg spec: + * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model + */ + function dispatchDrop(drag, currTarget, event) { + // If there is no current target, the drop action is none. + if (!currTarget) { + return 'none'; + } + // Dispatch the drop event to the current target. + var dragEvent = createDragEvent('lm-drop', drag, event, null); + var canceled = !currTarget.dispatchEvent(dragEvent); + // If the event was canceled, return the drop action result. + if (canceled) { + return dragEvent.dropAction; + } + /* */ + dragEvent = createDragEvent('p-drop', drag, event, null); + canceled = !currTarget.dispatchEvent(dragEvent); + if (canceled) { + return dragEvent.dropAction; + } + /* */ + // Otherwise, the effective drop action is none. + return 'none'; + } + Private.dispatchDrop = dispatchDrop; + /** + * A lookup table from drop action to bit value. + */ + var actionTable = { + 'none': 0x0, + 'copy': 0x1, + 'link': 0x2, + 'move': 0x4 + }; + /** + * A lookup table from supported action to drop action bit mask. + */ + var supportedTable = { + 'none': actionTable['none'], + 'copy': actionTable['copy'], + 'link': actionTable['link'], + 'move': actionTable['move'], + 'copy-link': actionTable['copy'] | actionTable['link'], + 'copy-move': actionTable['copy'] | actionTable['move'], + 'link-move': actionTable['link'] | actionTable['move'], + 'all': actionTable['copy'] | actionTable['link'] | actionTable['move'] + }; + /** + * Create a new initialized `IDragEvent` from the given data. + * + * @param type - The event type for the drag event. + * + * @param drag - The drag object to use for seeding the drag data. + * + * @param event - The mouse event to use for seeding the mouse data. + * + * @param related - The related target for the event, or `null`. + * + * @returns A new object which implements `IDragEvent`. + */ + function createDragEvent(type, drag, event, related) { + // Create a new mouse event to use as the drag event. Currently, + // JS engines do now allow user-defined Event subclasses. + var dragEvent = document.createEvent('MouseEvent'); + // Initialize the mouse event data. + dragEvent.initMouseEvent(type, true, true, window, 0, event.screenX, event.screenY, event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, event.button, related); + // Forcefully add the custom drag event properties. + dragEvent.dropAction = 'none'; + dragEvent.mimeData = drag.mimeData; + dragEvent.proposedAction = drag.proposedAction; + dragEvent.supportedActions = drag.supportedActions; + dragEvent.source = drag.source; + // Return the fully initialized drag event. + return dragEvent; + } + })(Private$8 || (Private$8 = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /*----------------------------------------------------------------------------- + | Copyright (c) 2014-2017, PhosphorJS Contributors + | + | Distributed under the terms of the BSD 3-Clause License. + | + | The full license is in the file LICENSE, distributed with this software. + |----------------------------------------------------------------------------*/ + /** + * A sizer object for use with the box engine layout functions. + * + * #### Notes + * A box sizer holds the geometry information for an object along an + * arbitrary layout orientation. + * + * For best performance, this class should be treated as a raw data + * struct. It should not typically be subclassed. + */ + var BoxSizer = /** @class */ (function () { + function BoxSizer() { + /** + * The preferred size for the sizer. + * + * #### Notes + * The sizer will be given this initial size subject to its size + * bounds. The sizer will not deviate from this size unless such + * deviation is required to fit into the available layout space. + * + * There is no limit to this value, but it will be clamped to the + * bounds defined by [[minSize]] and [[maxSize]]. + * + * The default value is `0`. + */ + this.sizeHint = 0; + /** + * The minimum size of the sizer. + * + * #### Notes + * The sizer will never be sized less than this value, even if + * it means the sizer will overflow the available layout space. + * + * It is assumed that this value lies in the range `[0, Infinity)` + * and that it is `<=` to [[maxSize]]. Failure to adhere to this + * constraint will yield undefined results. + * + * The default value is `0`. + */ + this.minSize = 0; + /** + * The maximum size of the sizer. + * + * #### Notes + * The sizer will never be sized greater than this value, even if + * it means the sizer will underflow the available layout space. + * + * It is assumed that this value lies in the range `[0, Infinity]` + * and that it is `>=` to [[minSize]]. Failure to adhere to this + * constraint will yield undefined results. + * + * The default value is `Infinity`. + */ + this.maxSize = Infinity; + /** + * The stretch factor for the sizer. + * + * #### Notes + * This controls how much the sizer stretches relative to its sibling + * sizers when layout space is distributed. A stretch factor of zero + * is special and will cause the sizer to only be resized after all + * other sizers with a stretch factor greater than zero have been + * resized to their limits. + * + * It is assumed that this value is an integer that lies in the range + * `[0, Infinity)`. Failure to adhere to this constraint will yield + * undefined results. + * + * The default value is `1`. + */ + this.stretch = 1; + /** + * The computed size of the sizer. + * + * #### Notes + * This value is the output of a call to [[boxCalc]]. It represents + * the computed size for the object along the layout orientation, + * and will always lie in the range `[minSize, maxSize]`. + * + * This value is output only. + * + * Changing this value will have no effect. + */ + this.size = 0; + /** + * An internal storage property for the layout algorithm. + * + * #### Notes + * This value is used as temporary storage by the layout algorithm. + * + * Changing this value will have no effect. + */ + this.done = false; + } + return BoxSizer; + }()); + /** + * The namespace for the box engine layout functions. + */ + var BoxEngine; + (function (BoxEngine) { + /** + * Calculate the optimal layout sizes for a sequence of box sizers. + * + * This distributes the available layout space among the box sizers + * according to the following algorithm: + * + * 1. Initialize the sizers's size to its size hint and compute the + * sums for each of size hint, min size, and max size. + * + * 2. If the total size hint equals the available space, return. + * + * 3. If the available space is less than the total min size, set all + * sizers to their min size and return. + * + * 4. If the available space is greater than the total max size, set + * all sizers to their max size and return. + * + * 5. If the layout space is less than the total size hint, distribute + * the negative delta as follows: + * + * a. Shrink each sizer with a stretch factor greater than zero by + * an amount proportional to the negative space and the sum of + * stretch factors. If the sizer reaches its min size, remove + * it and its stretch factor from the computation. + * + * b. If after adjusting all stretch sizers there remains negative + * space, distribute the space equally among the sizers with a + * stretch factor of zero. If a sizer reaches its min size, + * remove it from the computation. + * + * 6. If the layout space is greater than the total size hint, + * distribute the positive delta as follows: + * + * a. Expand each sizer with a stretch factor greater than zero by + * an amount proportional to the postive space and the sum of + * stretch factors. If the sizer reaches its max size, remove + * it and its stretch factor from the computation. + * + * b. If after adjusting all stretch sizers there remains positive + * space, distribute the space equally among the sizers with a + * stretch factor of zero. If a sizer reaches its max size, + * remove it from the computation. + * + * 7. return + * + * @param sizers - The sizers for a particular layout line. + * + * @param space - The available layout space for the sizers. + * + * @returns The delta between the provided available space and the + * actual consumed space. This value will be zero if the sizers + * can be adjusted to fit, negative if the available space is too + * small, and positive if the available space is too large. + * + * #### Notes + * The [[size]] of each sizer is updated with the computed size. + * + * This function can be called at any time to recompute the layout for + * an existing sequence of sizers. The previously computed results will + * have no effect on the new output. It is therefore not necessary to + * create new sizer objects on each resize event. + */ + function calc(sizers, space) { + // Bail early if there is nothing to do. + var count = sizers.length; + if (count === 0) { + return space; + } + // Setup the size and stretch counters. + var totalMin = 0; + var totalMax = 0; + var totalSize = 0; + var totalStretch = 0; + var stretchCount = 0; + // Setup the sizers and compute the totals. + for (var i = 0; i < count; ++i) { + var sizer = sizers[i]; + var min = sizer.minSize; + var max = sizer.maxSize; + var hint = sizer.sizeHint; + sizer.done = false; + sizer.size = Math.max(min, Math.min(hint, max)); + totalSize += sizer.size; + totalMin += min; + totalMax += max; + if (sizer.stretch > 0) { + totalStretch += sizer.stretch; + stretchCount++; + } + } + // If the space is equal to the total size, return early. + if (space === totalSize) { + return 0; + } + // If the space is less than the total min, minimize each sizer. + if (space <= totalMin) { + for (var i = 0; i < count; ++i) { + var sizer = sizers[i]; + sizer.size = sizer.minSize; + } + return space - totalMin; + } + // If the space is greater than the total max, maximize each sizer. + if (space >= totalMax) { + for (var i = 0; i < count; ++i) { + var sizer = sizers[i]; + sizer.size = sizer.maxSize; + } + return space - totalMax; + } + // The loops below perform sub-pixel precision sizing. A near zero + // value is used for compares instead of zero to ensure that the + // loop terminates when the subdivided space is reasonably small. + var nearZero = 0.01; + // A counter which is decremented each time a sizer is resized to + // its limit. This ensures the loops terminate even if there is + // space remaining to distribute. + var notDoneCount = count; + // Distribute negative delta space. + if (space < totalSize) { + // Shrink each stretchable sizer by an amount proportional to its + // stretch factor. If a sizer reaches its min size it's marked as + // done. The loop progresses in phases where each sizer is given + // a chance to consume its fair share for the pass, regardless of + // whether a sizer before it reached its limit. This continues + // until the stretchable sizers or the free space is exhausted. + var freeSpace = totalSize - space; + while (stretchCount > 0 && freeSpace > nearZero) { + var distSpace = freeSpace; + var distStretch = totalStretch; + for (var i = 0; i < count; ++i) { + var sizer = sizers[i]; + if (sizer.done || sizer.stretch === 0) { + continue; + } + var amt = sizer.stretch * distSpace / distStretch; + if (sizer.size - amt <= sizer.minSize) { + freeSpace -= sizer.size - sizer.minSize; + totalStretch -= sizer.stretch; + sizer.size = sizer.minSize; + sizer.done = true; + notDoneCount--; + stretchCount--; + } + else { + freeSpace -= amt; + sizer.size -= amt; + } + } + } + // Distribute any remaining space evenly among the non-stretchable + // sizers. This progresses in phases in the same manner as above. + while (notDoneCount > 0 && freeSpace > nearZero) { + var amt = freeSpace / notDoneCount; + for (var i = 0; i < count; ++i) { + var sizer = sizers[i]; + if (sizer.done) { + continue; + } + if (sizer.size - amt <= sizer.minSize) { + freeSpace -= sizer.size - sizer.minSize; + sizer.size = sizer.minSize; + sizer.done = true; + notDoneCount--; + } + else { + freeSpace -= amt; + sizer.size -= amt; + } + } + } + } + // Distribute positive delta space. + else { + // Expand each stretchable sizer by an amount proportional to its + // stretch factor. If a sizer reaches its max size it's marked as + // done. The loop progresses in phases where each sizer is given + // a chance to consume its fair share for the pass, regardless of + // whether a sizer before it reached its limit. This continues + // until the stretchable sizers or the free space is exhausted. + var freeSpace = space - totalSize; + while (stretchCount > 0 && freeSpace > nearZero) { + var distSpace = freeSpace; + var distStretch = totalStretch; + for (var i = 0; i < count; ++i) { + var sizer = sizers[i]; + if (sizer.done || sizer.stretch === 0) { + continue; + } + var amt = sizer.stretch * distSpace / distStretch; + if (sizer.size + amt >= sizer.maxSize) { + freeSpace -= sizer.maxSize - sizer.size; + totalStretch -= sizer.stretch; + sizer.size = sizer.maxSize; + sizer.done = true; + notDoneCount--; + stretchCount--; + } + else { + freeSpace -= amt; + sizer.size += amt; + } + } + } + // Distribute any remaining space evenly among the non-stretchable + // sizers. This progresses in phases in the same manner as above. + while (notDoneCount > 0 && freeSpace > nearZero) { + var amt = freeSpace / notDoneCount; + for (var i = 0; i < count; ++i) { + var sizer = sizers[i]; + if (sizer.done) { + continue; + } + if (sizer.size + amt >= sizer.maxSize) { + freeSpace -= sizer.maxSize - sizer.size; + sizer.size = sizer.maxSize; + sizer.done = true; + notDoneCount--; + } + else { + freeSpace -= amt; + sizer.size += amt; + } + } + } + } + // Indicate that the consumed space equals the available space. + return 0; + } + BoxEngine.calc = calc; + /** + * Adjust a sizer by a delta and update its neighbors accordingly. + * + * @param sizers - The sizers which should be adjusted. + * + * @param index - The index of the sizer to grow. + * + * @param delta - The amount to adjust the sizer, positive or negative. + * + * #### Notes + * This will adjust the indicated sizer by the specified amount, along + * with the sizes of the appropriate neighbors, subject to the limits + * specified by each of the sizers. + * + * This is useful when implementing box layouts where the boundaries + * between the sizers are interactively adjustable by the user. + */ + function adjust(sizers, index, delta) { + // Bail early when there is nothing to do. + if (sizers.length === 0 || delta === 0) { + return; + } + // Dispatch to the proper implementation. + if (delta > 0) { + growSizer(sizers, index, delta); + } + else { + shrinkSizer(sizers, index, -delta); + } + } + BoxEngine.adjust = adjust; + /** + * Grow a sizer by a positive delta and adjust neighbors. + */ + function growSizer(sizers, index, delta) { + // Compute how much the items to the left can expand. + var growLimit = 0; + for (var i = 0; i <= index; ++i) { + var sizer = sizers[i]; + growLimit += sizer.maxSize - sizer.size; + } + // Compute how much the items to the right can shrink. + var shrinkLimit = 0; + for (var i = index + 1, n = sizers.length; i < n; ++i) { + var sizer = sizers[i]; + shrinkLimit += sizer.size - sizer.minSize; + } + // Clamp the delta adjustment to the limits. + delta = Math.min(delta, growLimit, shrinkLimit); + // Grow the sizers to the left by the delta. + var grow = delta; + for (var i = index; i >= 0 && grow > 0; --i) { + var sizer = sizers[i]; + var limit = sizer.maxSize - sizer.size; + if (limit >= grow) { + sizer.sizeHint = sizer.size + grow; + grow = 0; + } + else { + sizer.sizeHint = sizer.size + limit; + grow -= limit; + } + } + // Shrink the sizers to the right by the delta. + var shrink = delta; + for (var i = index + 1, n = sizers.length; i < n && shrink > 0; ++i) { + var sizer = sizers[i]; + var limit = sizer.size - sizer.minSize; + if (limit >= shrink) { + sizer.sizeHint = sizer.size - shrink; + shrink = 0; + } + else { + sizer.sizeHint = sizer.size - limit; + shrink -= limit; + } + } + } + /** + * Shrink a sizer by a positive delta and adjust neighbors. + */ + function shrinkSizer(sizers, index, delta) { + // Compute how much the items to the right can expand. + var growLimit = 0; + for (var i = index + 1, n = sizers.length; i < n; ++i) { + var sizer = sizers[i]; + growLimit += sizer.maxSize - sizer.size; + } + // Compute how much the items to the left can shrink. + var shrinkLimit = 0; + for (var i = 0; i <= index; ++i) { + var sizer = sizers[i]; + shrinkLimit += sizer.size - sizer.minSize; + } + // Clamp the delta adjustment to the limits. + delta = Math.min(delta, growLimit, shrinkLimit); + // Grow the sizers to the right by the delta. + var grow = delta; + for (var i = index + 1, n = sizers.length; i < n && grow > 0; ++i) { + var sizer = sizers[i]; + var limit = sizer.maxSize - sizer.size; + if (limit >= grow) { + sizer.sizeHint = sizer.size + grow; + grow = 0; + } + else { + sizer.sizeHint = sizer.size + limit; + grow -= limit; + } + } + // Shrink the sizers to the left by the delta. + var shrink = delta; + for (var i = index; i >= 0 && shrink > 0; --i) { + var sizer = sizers[i]; + var limit = sizer.size - sizer.minSize; + if (limit >= shrink) { + sizer.sizeHint = sizer.size - shrink; + shrink = 0; + } + else { + sizer.sizeHint = sizer.size - limit; + shrink -= limit; + } + } + } + })(BoxEngine || (BoxEngine = {})); + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics$3 = function(d, b) { + extendStatics$3 = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics$3(d, b); + }; + + function __extends$5(d, b) { + extendStatics$3(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign$3 = function() { + __assign$3 = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign$3.apply(this, arguments); + }; + + // Copyright (c) Jupyter Development Team. + /** + * An object which holds data related to an object's title. + * + * #### Notes + * A title object is intended to hold the data necessary to display a + * header for a particular object. A common example is the `TabPanel`, + * which uses the widget title to populate the tab for a child widget. + */ + var Title = /** @class */ (function () { + /** + * Construct a new title. + * + * @param options - The options for initializing the title. + */ + function Title(options) { + this._label = ''; + this._caption = ''; + this._mnemonic = -1; + this._iconClass = ''; + this._iconLabel = ''; + this._className = ''; + this._closable = false; + this._changed = new Signal(this); + this.owner = options.owner; + if (options.label !== undefined) { + this._label = options.label; + } + if (options.mnemonic !== undefined) { + this._mnemonic = options.mnemonic; + } + if (options.icon !== undefined) { + /* */ + if (typeof options.icon === "string") { + // when ._icon is null, the .icon getter will alias .iconClass + this._icon = null; + this._iconClass = options.icon; + } + else { + /* */ + this._icon = options.icon; + /* */ + } + /* */ + } + /* */ + else { + // if unset, default to aliasing .iconClass + this._icon = null; + } + /* */ + if (options.iconClass !== undefined) { + this._iconClass = options.iconClass; + } + if (options.iconLabel !== undefined) { + this._iconLabel = options.iconLabel; + } + if (options.iconRenderer !== undefined) { + this._icon = options.iconRenderer; + } + if (options.caption !== undefined) { + this._caption = options.caption; + } + if (options.className !== undefined) { + this._className = options.className; + } + if (options.closable !== undefined) { + this._closable = options.closable; + } + this._dataset = options.dataset || {}; + } + Object.defineProperty(Title.prototype, "changed", { + /** + * A signal emitted when the state of the title changes. + */ + get: function () { + return this._changed; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "label", { + /** + * Get the label for the title. + * + * #### Notes + * The default value is an empty string. + */ + get: function () { + return this._label; + }, + /** + * Set the label for the title. + */ + set: function (value) { + if (this._label === value) { + return; + } + this._label = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "mnemonic", { + /** + * Get the mnemonic index for the title. + * + * #### Notes + * The default value is `-1`. + */ + get: function () { + return this._mnemonic; + }, + /** + * Set the mnemonic index for the title. + */ + set: function (value) { + if (this._mnemonic === value) { + return; + } + this._mnemonic = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "icon", { + /** + * Get the icon renderer for the title. + * + * #### Notes + * The default value is undefined. + * + * DEPRECATED: if set to a string value, the .icon field will function as + * an alias for the .iconClass field, for backwards compatibility + */ + get: function () { + /* */ + if (this._icon === null) { + // only alias .iconClass if ._icon has been explicitly nulled + return this.iconClass; + } + /* */ + return this._icon; + }, + /** + * Set the icon renderer for the title. + * + * #### Notes + * A renderer is an object that supplies a render and unrender function. + * + * DEPRECATED: if set to a string value, the .icon field will function as + * an alias for the .iconClass field, for backwards compatibility + */ + set: function (value /* */) { + /* */ + if (typeof value === "string") { + // when ._icon is null, the .icon getter will alias .iconClass + this._icon = null; + this.iconClass = value; + } + else { + /* */ + if (this._icon === value) { + return; + } + this._icon = value; + this._changed.emit(undefined); + /* */ + } + /* */ + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "iconClass", { + /** + * Get the icon class name for the title. + * + * #### Notes + * The default value is an empty string. + */ + get: function () { + return this._iconClass; + }, + /** + * Set the icon class name for the title. + * + * #### Notes + * Multiple class names can be separated with whitespace. + */ + set: function (value) { + if (this._iconClass === value) { + return; + } + this._iconClass = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "iconLabel", { + /** + * Get the icon label for the title. + * + * #### Notes + * The default value is an empty string. + */ + get: function () { + return this._iconLabel; + }, + /** + * Set the icon label for the title. + * + * #### Notes + * Multiple class names can be separated with whitespace. + */ + set: function (value) { + if (this._iconLabel === value) { + return; + } + this._iconLabel = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "iconRenderer", { + /** + * @deprecated Use `icon` instead. + */ + get: function () { + return this._icon || undefined; + }, + /** + * @deprecated Use `icon` instead. + */ + set: function (value) { + this.icon = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "caption", { + /** + * Get the caption for the title. + * + * #### Notes + * The default value is an empty string. + */ + get: function () { + return this._caption; + }, + /** + * Set the caption for the title. + */ + set: function (value) { + if (this._caption === value) { + return; + } + this._caption = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "className", { + /** + * Get the extra class name for the title. + * + * #### Notes + * The default value is an empty string. + */ + get: function () { + return this._className; + }, + /** + * Set the extra class name for the title. + * + * #### Notes + * Multiple class names can be separated with whitespace. + */ + set: function (value) { + if (this._className === value) { + return; + } + this._className = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "closable", { + /** + * Get the closable state for the title. + * + * #### Notes + * The default value is `false`. + */ + get: function () { + return this._closable; + }, + /** + * Set the closable state for the title. + * + * #### Notes + * This controls the presence of a close icon when applicable. + */ + set: function (value) { + if (this._closable === value) { + return; + } + this._closable = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Title.prototype, "dataset", { + /** + * Get the dataset for the title. + * + * #### Notes + * The default value is an empty dataset. + */ + get: function () { + return this._dataset; + }, + /** + * Set the dataset for the title. + * + * #### Notes + * This controls the data attributes when applicable. + */ + set: function (value) { + if (this._dataset === value) { + return; + } + this._dataset = value; + this._changed.emit(undefined); + }, + enumerable: true, + configurable: true + }); + return Title; + }()); + + /** + * The base class of the lumino widget hierarchy. + * + * #### Notes + * This class will typically be subclassed in order to create a useful + * widget. However, it can be used directly to host externally created + * content. + */ + var Widget = /** @class */ (function () { + /** + * Construct a new widget. + * + * @param options - The options for initializing the widget. + */ + function Widget(options) { + if (options === void 0) { options = {}; } + this._flags = 0; + this._layout = null; + this._parent = null; + this._disposed = new Signal(this); + this.node = Private$9.createNode(options); + this.addClass('lm-Widget'); + /* */ + this.addClass('p-Widget'); + /* */ + } + /** + * Dispose of the widget and its descendant widgets. + * + * #### Notes + * It is unsafe to use the widget after it has been disposed. + * + * All calls made to this method after the first are a no-op. + */ + Widget.prototype.dispose = function () { + // Do nothing if the widget is already disposed. + if (this.isDisposed) { + return; + } + // Set the disposed flag and emit the disposed signal. + this.setFlag(Widget.Flag.IsDisposed); + this._disposed.emit(undefined); + // Remove or detach the widget if necessary. + if (this.parent) { + this.parent = null; + } + else if (this.isAttached) { + Widget.detach(this); + } + // Dispose of the widget layout. + if (this._layout) { + this._layout.dispose(); + this._layout = null; + } + // Clear the extra data associated with the widget. + Signal.clearData(this); + MessageLoop.clearData(this); + AttachedProperty.clearData(this); + }; + Object.defineProperty(Widget.prototype, "disposed", { + /** + * A signal emitted when the widget is disposed. + */ + get: function () { + return this._disposed; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "isDisposed", { + /** + * Test whether the widget has been disposed. + */ + get: function () { + return this.testFlag(Widget.Flag.IsDisposed); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "isAttached", { + /** + * Test whether the widget's node is attached to the DOM. + */ + get: function () { + return this.testFlag(Widget.Flag.IsAttached); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "isHidden", { + /** + * Test whether the widget is explicitly hidden. + */ + get: function () { + return this.testFlag(Widget.Flag.IsHidden); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "isVisible", { + /** + * Test whether the widget is visible. + * + * #### Notes + * A widget is visible when it is attached to the DOM, is not + * explicitly hidden, and has no explicitly hidden ancestors. + */ + get: function () { + return this.testFlag(Widget.Flag.IsVisible); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "title", { + /** + * The title object for the widget. + * + * #### Notes + * The title object is used by some container widgets when displaying + * the widget alongside some title, such as a tab panel or side bar. + * + * Since not all widgets will use the title, it is created on demand. + * + * The `owner` property of the title is set to this widget. + */ + get: function () { + return Private$9.titleProperty.get(this); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "id", { + /** + * Get the id of the widget's DOM node. + */ + get: function () { + return this.node.id; + }, + /** + * Set the id of the widget's DOM node. + */ + set: function (value) { + this.node.id = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "dataset", { + /** + * The dataset for the widget's DOM node. + */ + get: function () { + return this.node.dataset; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "parent", { + /** + * Get the parent of the widget. + */ + get: function () { + return this._parent; + }, + /** + * Set the parent of the widget. + * + * #### Notes + * Children are typically added to a widget by using a layout, which + * means user code will not normally set the parent widget directly. + * + * The widget will be automatically removed from its old parent. + * + * This is a no-op if there is no effective parent change. + */ + set: function (value) { + if (this._parent === value) { + return; + } + if (value && this.contains(value)) { + throw new Error('Invalid parent widget.'); + } + if (this._parent && !this._parent.isDisposed) { + var msg = new Widget.ChildMessage('child-removed', this); + MessageLoop.sendMessage(this._parent, msg); + } + this._parent = value; + if (this._parent && !this._parent.isDisposed) { + var msg = new Widget.ChildMessage('child-added', this); + MessageLoop.sendMessage(this._parent, msg); + } + if (!this.isDisposed) { + MessageLoop.sendMessage(this, Widget.Msg.ParentChanged); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Widget.prototype, "layout", { + /** + * Get the layout for the widget. + */ + get: function () { + return this._layout; + }, + /** + * Set the layout for the widget. + * + * #### Notes + * The layout is single-use only. It cannot be changed after the + * first assignment. + * + * The layout is disposed automatically when the widget is disposed. + */ + set: function (value) { + if (this._layout === value) { + return; + } + if (this.testFlag(Widget.Flag.DisallowLayout)) { + throw new Error('Cannot set widget layout.'); + } + if (this._layout) { + throw new Error('Cannot change widget layout.'); + } + if (value.parent) { + throw new Error('Cannot change layout parent.'); + } + this._layout = value; + value.parent = this; + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator over the widget's children. + * + * @returns A new iterator over the children of the widget. + * + * #### Notes + * The widget must have a populated layout in order to have children. + * + * If a layout is not installed, the returned iterator will be empty. + */ + Widget.prototype.children = function () { + return this._layout ? this._layout.iter() : empty(); + }; + /** + * Test whether a widget is a descendant of this widget. + * + * @param widget - The descendant widget of interest. + * + * @returns `true` if the widget is a descendant, `false` otherwise. + */ + Widget.prototype.contains = function (widget) { + for (var value = widget; value; value = value._parent) { + if (value === this) { + return true; + } + } + return false; + }; + /** + * Test whether the widget's DOM node has the given class name. + * + * @param name - The class name of interest. + * + * @returns `true` if the node has the class, `false` otherwise. + */ + Widget.prototype.hasClass = function (name) { + return this.node.classList.contains(name); + }; + /** + * Add a class name to the widget's DOM node. + * + * @param name - The class name to add to the node. + * + * #### Notes + * If the class name is already added to the node, this is a no-op. + * + * The class name must not contain whitespace. + */ + Widget.prototype.addClass = function (name) { + this.node.classList.add(name); + }; + /** + * Remove a class name from the widget's DOM node. + * + * @param name - The class name to remove from the node. + * + * #### Notes + * If the class name is not yet added to the node, this is a no-op. + * + * The class name must not contain whitespace. + */ + Widget.prototype.removeClass = function (name) { + this.node.classList.remove(name); + }; + /** + * Toggle a class name on the widget's DOM node. + * + * @param name - The class name to toggle on the node. + * + * @param force - Whether to force add the class (`true`) or force + * remove the class (`false`). If not provided, the presence of + * the class will be toggled from its current state. + * + * @returns `true` if the class is now present, `false` otherwise. + * + * #### Notes + * The class name must not contain whitespace. + */ + Widget.prototype.toggleClass = function (name, force) { + if (force === true) { + this.node.classList.add(name); + return true; + } + if (force === false) { + this.node.classList.remove(name); + return false; + } + return this.node.classList.toggle(name); + }; + /** + * Post an `'update-request'` message to the widget. + * + * #### Notes + * This is a simple convenience method for posting the message. + */ + Widget.prototype.update = function () { + MessageLoop.postMessage(this, Widget.Msg.UpdateRequest); + }; + /** + * Post a `'fit-request'` message to the widget. + * + * #### Notes + * This is a simple convenience method for posting the message. + */ + Widget.prototype.fit = function () { + MessageLoop.postMessage(this, Widget.Msg.FitRequest); + }; + /** + * Post an `'activate-request'` message to the widget. + * + * #### Notes + * This is a simple convenience method for posting the message. + */ + Widget.prototype.activate = function () { + MessageLoop.postMessage(this, Widget.Msg.ActivateRequest); + }; + /** + * Send a `'close-request'` message to the widget. + * + * #### Notes + * This is a simple convenience method for sending the message. + */ + Widget.prototype.close = function () { + MessageLoop.sendMessage(this, Widget.Msg.CloseRequest); + }; + /** + * Show the widget and make it visible to its parent widget. + * + * #### Notes + * This causes the [[isHidden]] property to be `false`. + * + * If the widget is not explicitly hidden, this is a no-op. + */ + Widget.prototype.show = function () { + if (!this.testFlag(Widget.Flag.IsHidden)) { + return; + } + if (this.isAttached && (!this.parent || this.parent.isVisible)) { + MessageLoop.sendMessage(this, Widget.Msg.BeforeShow); + } + this.clearFlag(Widget.Flag.IsHidden); + this.removeClass('lm-mod-hidden'); + /* */ + this.removeClass('p-mod-hidden'); + /* */ + if (this.isAttached && (!this.parent || this.parent.isVisible)) { + MessageLoop.sendMessage(this, Widget.Msg.AfterShow); + } + if (this.parent) { + var msg = new Widget.ChildMessage('child-shown', this); + MessageLoop.sendMessage(this.parent, msg); + } + }; + /** + * Hide the widget and make it hidden to its parent widget. + * + * #### Notes + * This causes the [[isHidden]] property to be `true`. + * + * If the widget is explicitly hidden, this is a no-op. + */ + Widget.prototype.hide = function () { + if (this.testFlag(Widget.Flag.IsHidden)) { + return; + } + if (this.isAttached && (!this.parent || this.parent.isVisible)) { + MessageLoop.sendMessage(this, Widget.Msg.BeforeHide); + } + this.setFlag(Widget.Flag.IsHidden); + this.addClass('lm-mod-hidden'); + /* */ + this.addClass('p-mod-hidden'); + /* */ + if (this.isAttached && (!this.parent || this.parent.isVisible)) { + MessageLoop.sendMessage(this, Widget.Msg.AfterHide); + } + if (this.parent) { + var msg = new Widget.ChildMessage('child-hidden', this); + MessageLoop.sendMessage(this.parent, msg); + } + }; + /** + * Show or hide the widget according to a boolean value. + * + * @param hidden - `true` to hide the widget, or `false` to show it. + * + * #### Notes + * This is a convenience method for `hide()` and `show()`. + */ + Widget.prototype.setHidden = function (hidden) { + if (hidden) { + this.hide(); + } + else { + this.show(); + } + }; + /** + * Test whether the given widget flag is set. + * + * #### Notes + * This will not typically be called directly by user code. + */ + Widget.prototype.testFlag = function (flag) { + return (this._flags & flag) !== 0; + }; + /** + * Set the given widget flag. + * + * #### Notes + * This will not typically be called directly by user code. + */ + Widget.prototype.setFlag = function (flag) { + this._flags |= flag; + }; + /** + * Clear the given widget flag. + * + * #### Notes + * This will not typically be called directly by user code. + */ + Widget.prototype.clearFlag = function (flag) { + this._flags &= ~flag; + }; + /** + * Process a message sent to the widget. + * + * @param msg - The message sent to the widget. + * + * #### Notes + * Subclasses may reimplement this method as needed. + */ + Widget.prototype.processMessage = function (msg) { + switch (msg.type) { + case 'resize': + this.notifyLayout(msg); + this.onResize(msg); + break; + case 'update-request': + this.notifyLayout(msg); + this.onUpdateRequest(msg); + break; + case 'fit-request': + this.notifyLayout(msg); + this.onFitRequest(msg); + break; + case 'before-show': + this.notifyLayout(msg); + this.onBeforeShow(msg); + break; + case 'after-show': + this.setFlag(Widget.Flag.IsVisible); + this.notifyLayout(msg); + this.onAfterShow(msg); + break; + case 'before-hide': + this.notifyLayout(msg); + this.onBeforeHide(msg); + break; + case 'after-hide': + this.clearFlag(Widget.Flag.IsVisible); + this.notifyLayout(msg); + this.onAfterHide(msg); + break; + case 'before-attach': + this.notifyLayout(msg); + this.onBeforeAttach(msg); + break; + case 'after-attach': + if (!this.isHidden && (!this.parent || this.parent.isVisible)) { + this.setFlag(Widget.Flag.IsVisible); + } + this.setFlag(Widget.Flag.IsAttached); + this.notifyLayout(msg); + this.onAfterAttach(msg); + break; + case 'before-detach': + this.notifyLayout(msg); + this.onBeforeDetach(msg); + break; + case 'after-detach': + this.clearFlag(Widget.Flag.IsVisible); + this.clearFlag(Widget.Flag.IsAttached); + this.notifyLayout(msg); + this.onAfterDetach(msg); + break; + case 'activate-request': + this.notifyLayout(msg); + this.onActivateRequest(msg); + break; + case 'close-request': + this.notifyLayout(msg); + this.onCloseRequest(msg); + break; + case 'child-added': + this.notifyLayout(msg); + this.onChildAdded(msg); + break; + case 'child-removed': + this.notifyLayout(msg); + this.onChildRemoved(msg); + break; + default: + this.notifyLayout(msg); + break; + } + }; + /** + * Invoke the message processing routine of the widget's layout. + * + * @param msg - The message to dispatch to the layout. + * + * #### Notes + * This is a no-op if the widget does not have a layout. + * + * This will not typically be called directly by user code. + */ + Widget.prototype.notifyLayout = function (msg) { + if (this._layout) { + this._layout.processParentMessage(msg); + } + }; + /** + * A message handler invoked on a `'close-request'` message. + * + * #### Notes + * The default implementation unparents or detaches the widget. + */ + Widget.prototype.onCloseRequest = function (msg) { + if (this.parent) { + this.parent = null; + } + else if (this.isAttached) { + Widget.detach(this); + } + }; + /** + * A message handler invoked on a `'resize'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onResize = function (msg) { }; + /** + * A message handler invoked on an `'update-request'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onUpdateRequest = function (msg) { }; + /** + * A message handler invoked on a `'fit-request'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onFitRequest = function (msg) { }; + /** + * A message handler invoked on an `'activate-request'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onActivateRequest = function (msg) { }; + /** + * A message handler invoked on a `'before-show'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onBeforeShow = function (msg) { }; + /** + * A message handler invoked on an `'after-show'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onAfterShow = function (msg) { }; + /** + * A message handler invoked on a `'before-hide'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onBeforeHide = function (msg) { }; + /** + * A message handler invoked on an `'after-hide'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onAfterHide = function (msg) { }; + /** + * A message handler invoked on a `'before-attach'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onBeforeAttach = function (msg) { }; + /** + * A message handler invoked on an `'after-attach'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onAfterAttach = function (msg) { }; + /** + * A message handler invoked on a `'before-detach'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onBeforeDetach = function (msg) { }; + /** + * A message handler invoked on an `'after-detach'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onAfterDetach = function (msg) { }; + /** + * A message handler invoked on a `'child-added'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onChildAdded = function (msg) { }; + /** + * A message handler invoked on a `'child-removed'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Widget.prototype.onChildRemoved = function (msg) { }; + return Widget; + }()); + /** + * The namespace for the `Widget` class statics. + */ + (function (Widget) { + /** + * An enum of widget bit flags. + */ + var Flag; + (function (Flag) { + /** + * The widget has been disposed. + */ + Flag[Flag["IsDisposed"] = 1] = "IsDisposed"; + /** + * The widget is attached to the DOM. + */ + Flag[Flag["IsAttached"] = 2] = "IsAttached"; + /** + * The widget is hidden. + */ + Flag[Flag["IsHidden"] = 4] = "IsHidden"; + /** + * The widget is visible. + */ + Flag[Flag["IsVisible"] = 8] = "IsVisible"; + /** + * A layout cannot be set on the widget. + */ + Flag[Flag["DisallowLayout"] = 16] = "DisallowLayout"; + })(Flag = Widget.Flag || (Widget.Flag = {})); + /** + * A collection of stateless messages related to widgets. + */ + var Msg; + (function (Msg) { + /** + * A singleton `'before-show'` message. + * + * #### Notes + * This message is sent to a widget before it becomes visible. + * + * This message is **not** sent when the widget is being attached. + */ + Msg.BeforeShow = new Message('before-show'); + /** + * A singleton `'after-show'` message. + * + * #### Notes + * This message is sent to a widget after it becomes visible. + * + * This message is **not** sent when the widget is being attached. + */ + Msg.AfterShow = new Message('after-show'); + /** + * A singleton `'before-hide'` message. + * + * #### Notes + * This message is sent to a widget before it becomes not-visible. + * + * This message is **not** sent when the widget is being detached. + */ + Msg.BeforeHide = new Message('before-hide'); + /** + * A singleton `'after-hide'` message. + * + * #### Notes + * This message is sent to a widget after it becomes not-visible. + * + * This message is **not** sent when the widget is being detached. + */ + Msg.AfterHide = new Message('after-hide'); + /** + * A singleton `'before-attach'` message. + * + * #### Notes + * This message is sent to a widget before it is attached. + */ + Msg.BeforeAttach = new Message('before-attach'); + /** + * A singleton `'after-attach'` message. + * + * #### Notes + * This message is sent to a widget after it is attached. + */ + Msg.AfterAttach = new Message('after-attach'); + /** + * A singleton `'before-detach'` message. + * + * #### Notes + * This message is sent to a widget before it is detached. + */ + Msg.BeforeDetach = new Message('before-detach'); + /** + * A singleton `'after-detach'` message. + * + * #### Notes + * This message is sent to a widget after it is detached. + */ + Msg.AfterDetach = new Message('after-detach'); + /** + * A singleton `'parent-changed'` message. + * + * #### Notes + * This message is sent to a widget when its parent has changed. + */ + Msg.ParentChanged = new Message('parent-changed'); + /** + * A singleton conflatable `'update-request'` message. + * + * #### Notes + * This message can be dispatched to supporting widgets in order to + * update their content based on the current widget state. Not all + * widgets will respond to messages of this type. + * + * For widgets with a layout, this message will inform the layout to + * update the position and size of its child widgets. + */ + Msg.UpdateRequest = new ConflatableMessage('update-request'); + /** + * A singleton conflatable `'fit-request'` message. + * + * #### Notes + * For widgets with a layout, this message will inform the layout to + * recalculate its size constraints to fit the space requirements of + * its child widgets, and to update their position and size. Not all + * layouts will respond to messages of this type. + */ + Msg.FitRequest = new ConflatableMessage('fit-request'); + /** + * A singleton conflatable `'activate-request'` message. + * + * #### Notes + * This message should be dispatched to a widget when it should + * perform the actions necessary to activate the widget, which + * may include focusing its node or descendant node. + */ + Msg.ActivateRequest = new ConflatableMessage('activate-request'); + /** + * A singleton conflatable `'close-request'` message. + * + * #### Notes + * This message should be dispatched to a widget when it should close + * and remove itself from the widget hierarchy. + */ + Msg.CloseRequest = new ConflatableMessage('close-request'); + })(Msg = Widget.Msg || (Widget.Msg = {})); + /** + * A message class for child related messages. + */ + var ChildMessage = /** @class */ (function (_super) { + __extends$5(ChildMessage, _super); + /** + * Construct a new child message. + * + * @param type - The message type. + * + * @param child - The child widget for the message. + */ + function ChildMessage(type, child) { + var _this = _super.call(this, type) || this; + _this.child = child; + return _this; + } + return ChildMessage; + }(Message)); + Widget.ChildMessage = ChildMessage; + /** + * A message class for `'resize'` messages. + */ + var ResizeMessage = /** @class */ (function (_super) { + __extends$5(ResizeMessage, _super); + /** + * Construct a new resize message. + * + * @param width - The **offset width** of the widget, or `-1` if + * the width is not known. + * + * @param height - The **offset height** of the widget, or `-1` if + * the height is not known. + */ + function ResizeMessage(width, height) { + var _this = _super.call(this, 'resize') || this; + _this.width = width; + _this.height = height; + return _this; + } + return ResizeMessage; + }(Message)); + Widget.ResizeMessage = ResizeMessage; + /** + * The namespace for the `ResizeMessage` class statics. + */ + (function (ResizeMessage) { + /** + * A singleton `'resize'` message with an unknown size. + */ + ResizeMessage.UnknownSize = new ResizeMessage(-1, -1); + })(ResizeMessage = Widget.ResizeMessage || (Widget.ResizeMessage = {})); + /** + * Attach a widget to a host DOM node. + * + * @param widget - The widget of interest. + * + * @param host - The DOM node to use as the widget's host. + * + * @param ref - The child of `host` to use as the reference element. + * If this is provided, the widget will be inserted before this + * node in the host. The default is `null`, which will cause the + * widget to be added as the last child of the host. + * + * #### Notes + * This will throw an error if the widget is not a root widget, if + * the widget is already attached, or if the host is not attached + * to the DOM. + */ + function attach(widget, host, ref) { + if (ref === void 0) { ref = null; } + if (widget.parent) { + throw new Error('Cannot attach a child widget.'); + } + if (widget.isAttached || document.body.contains(widget.node)) { + throw new Error('Widget is already attached.'); + } + if (!document.body.contains(host)) { + throw new Error('Host is not attached.'); + } + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + host.insertBefore(widget.node, ref); + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + Widget.attach = attach; + /** + * Detach the widget from its host DOM node. + * + * @param widget - The widget of interest. + * + * #### Notes + * This will throw an error if the widget is not a root widget, + * or if the widget is not attached to the DOM. + */ + function detach(widget) { + if (widget.parent) { + throw new Error('Cannot detach a child widget.'); + } + if (!widget.isAttached || !document.body.contains(widget.node)) { + throw new Error('Widget is not attached.'); + } + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + widget.node.parentNode.removeChild(widget.node); + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + Widget.detach = detach; + })(Widget || (Widget = {})); + /** + * The namespace for the module implementation details. + */ + var Private$9; + (function (Private) { + /** + * An attached property for the widget title object. + */ + Private.titleProperty = new AttachedProperty({ + name: 'title', + create: function (owner) { return new Title({ owner: owner }); }, + }); + /** + * Create a DOM node for the given widget options. + */ + function createNode(options) { + return options.node || document.createElement('div'); + } + Private.createNode = createNode; + })(Private$9 || (Private$9 = {})); + + // Copyright (c) Jupyter Development Team. + /** + * An abstract base class for creating lumino layouts. + * + * #### Notes + * A layout is used to add widgets to a parent and to arrange those + * widgets within the parent's DOM node. + * + * This class implements the base functionality which is required of + * nearly all layouts. It must be subclassed in order to be useful. + * + * Notably, this class does not define a uniform interface for adding + * widgets to the layout. A subclass should define that API in a way + * which is meaningful for its intended use. + */ + var Layout = /** @class */ (function () { + /** + * Construct a new layout. + * + * @param options - The options for initializing the layout. + */ + function Layout(options) { + if (options === void 0) { options = {}; } + this._disposed = false; + this._parent = null; + this._fitPolicy = options.fitPolicy || 'set-min-size'; + } + /** + * Dispose of the resources held by the layout. + * + * #### Notes + * This should be reimplemented to clear and dispose of the widgets. + * + * All reimplementations should call the superclass method. + * + * This method is called automatically when the parent is disposed. + */ + Layout.prototype.dispose = function () { + this._parent = null; + this._disposed = true; + Signal.clearData(this); + AttachedProperty.clearData(this); + }; + Object.defineProperty(Layout.prototype, "isDisposed", { + /** + * Test whether the layout is disposed. + */ + get: function () { + return this._disposed; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Layout.prototype, "parent", { + /** + * Get the parent widget of the layout. + */ + get: function () { + return this._parent; + }, + /** + * Set the parent widget of the layout. + * + * #### Notes + * This is set automatically when installing the layout on the parent + * widget. The parent widget should not be set directly by user code. + */ + set: function (value) { + if (this._parent === value) { + return; + } + if (this._parent) { + throw new Error('Cannot change parent widget.'); + } + if (value.layout !== this) { + throw new Error('Invalid parent widget.'); + } + this._parent = value; + this.init(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Layout.prototype, "fitPolicy", { + /** + * Get the fit policy for the layout. + * + * #### Notes + * The fit policy controls the computed size constraints which are + * applied to the parent widget by the layout. + * + * Some layout implementations may ignore the fit policy. + */ + get: function () { + return this._fitPolicy; + }, + /** + * Set the fit policy for the layout. + * + * #### Notes + * The fit policy controls the computed size constraints which are + * applied to the parent widget by the layout. + * + * Some layout implementations may ignore the fit policy. + * + * Changing the fit policy will clear the current size constraint + * for the parent widget and then re-fit the parent. + */ + set: function (value) { + // Bail if the policy does not change + if (this._fitPolicy === value) { + return; + } + // Update the internal policy. + this._fitPolicy = value; + // Clear the size constraints and schedule a fit of the parent. + if (this._parent) { + var style = this._parent.node.style; + style.minWidth = ''; + style.minHeight = ''; + style.maxWidth = ''; + style.maxHeight = ''; + this._parent.fit(); + } + }, + enumerable: true, + configurable: true + }); + /** + * Process a message sent to the parent widget. + * + * @param msg - The message sent to the parent widget. + * + * #### Notes + * This method is called by the parent widget to process a message. + * + * Subclasses may reimplement this method as needed. + */ + Layout.prototype.processParentMessage = function (msg) { + switch (msg.type) { + case 'resize': + this.onResize(msg); + break; + case 'update-request': + this.onUpdateRequest(msg); + break; + case 'fit-request': + this.onFitRequest(msg); + break; + case 'before-show': + this.onBeforeShow(msg); + break; + case 'after-show': + this.onAfterShow(msg); + break; + case 'before-hide': + this.onBeforeHide(msg); + break; + case 'after-hide': + this.onAfterHide(msg); + break; + case 'before-attach': + this.onBeforeAttach(msg); + break; + case 'after-attach': + this.onAfterAttach(msg); + break; + case 'before-detach': + this.onBeforeDetach(msg); + break; + case 'after-detach': + this.onAfterDetach(msg); + break; + case 'child-removed': + this.onChildRemoved(msg); + break; + case 'child-shown': + this.onChildShown(msg); + break; + case 'child-hidden': + this.onChildHidden(msg); + break; + } + }; + /** + * Perform layout initialization which requires the parent widget. + * + * #### Notes + * This method is invoked immediately after the layout is installed + * on the parent widget. + * + * The default implementation reparents all of the widgets to the + * layout parent widget. + * + * Subclasses should reimplement this method and attach the child + * widget nodes to the parent widget's node. + */ + Layout.prototype.init = function () { + var _this = this; + each$1(this, function (widget) { + widget.parent = _this.parent; + }); + }; + /** + * A message handler invoked on a `'resize'` message. + * + * #### Notes + * The layout should ensure that its widgets are resized according + * to the specified layout space, and that they are sent a `'resize'` + * message if appropriate. + * + * The default implementation of this method sends an `UnknownSize` + * resize message to all widgets. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onResize = function (msg) { + each$1(this, function (widget) { + MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize); + }); + }; + /** + * A message handler invoked on an `'update-request'` message. + * + * #### Notes + * The layout should ensure that its widgets are resized according + * to the available layout space, and that they are sent a `'resize'` + * message if appropriate. + * + * The default implementation of this method sends an `UnknownSize` + * resize message to all widgets. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onUpdateRequest = function (msg) { + each$1(this, function (widget) { + MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize); + }); + }; + /** + * A message handler invoked on a `'before-attach'` message. + * + * #### Notes + * The default implementation of this method forwards the message + * to all widgets. It assumes all widget nodes are attached to the + * parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onBeforeAttach = function (msg) { + each$1(this, function (widget) { + MessageLoop.sendMessage(widget, msg); + }); + }; + /** + * A message handler invoked on an `'after-attach'` message. + * + * #### Notes + * The default implementation of this method forwards the message + * to all widgets. It assumes all widget nodes are attached to the + * parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onAfterAttach = function (msg) { + each$1(this, function (widget) { + MessageLoop.sendMessage(widget, msg); + }); + }; + /** + * A message handler invoked on a `'before-detach'` message. + * + * #### Notes + * The default implementation of this method forwards the message + * to all widgets. It assumes all widget nodes are attached to the + * parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onBeforeDetach = function (msg) { + each$1(this, function (widget) { + MessageLoop.sendMessage(widget, msg); + }); + }; + /** + * A message handler invoked on an `'after-detach'` message. + * + * #### Notes + * The default implementation of this method forwards the message + * to all widgets. It assumes all widget nodes are attached to the + * parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onAfterDetach = function (msg) { + each$1(this, function (widget) { + MessageLoop.sendMessage(widget, msg); + }); + }; + /** + * A message handler invoked on a `'before-show'` message. + * + * #### Notes + * The default implementation of this method forwards the message to + * all non-hidden widgets. It assumes all widget nodes are attached + * to the parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onBeforeShow = function (msg) { + each$1(this, function (widget) { + if (!widget.isHidden) { + MessageLoop.sendMessage(widget, msg); + } + }); + }; + /** + * A message handler invoked on an `'after-show'` message. + * + * #### Notes + * The default implementation of this method forwards the message to + * all non-hidden widgets. It assumes all widget nodes are attached + * to the parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onAfterShow = function (msg) { + each$1(this, function (widget) { + if (!widget.isHidden) { + MessageLoop.sendMessage(widget, msg); + } + }); + }; + /** + * A message handler invoked on a `'before-hide'` message. + * + * #### Notes + * The default implementation of this method forwards the message to + * all non-hidden widgets. It assumes all widget nodes are attached + * to the parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onBeforeHide = function (msg) { + each$1(this, function (widget) { + if (!widget.isHidden) { + MessageLoop.sendMessage(widget, msg); + } + }); + }; + /** + * A message handler invoked on an `'after-hide'` message. + * + * #### Notes + * The default implementation of this method forwards the message to + * all non-hidden widgets. It assumes all widget nodes are attached + * to the parent widget node. + * + * This may be reimplemented by subclasses as needed. + */ + Layout.prototype.onAfterHide = function (msg) { + each$1(this, function (widget) { + if (!widget.isHidden) { + MessageLoop.sendMessage(widget, msg); + } + }); + }; + /** + * A message handler invoked on a `'child-removed'` message. + * + * #### Notes + * This will remove the child widget from the layout. + * + * Subclasses should **not** typically reimplement this method. + */ + Layout.prototype.onChildRemoved = function (msg) { + this.removeWidget(msg.child); + }; + /** + * A message handler invoked on a `'fit-request'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Layout.prototype.onFitRequest = function (msg) { }; + /** + * A message handler invoked on a `'child-shown'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Layout.prototype.onChildShown = function (msg) { }; + /** + * A message handler invoked on a `'child-hidden'` message. + * + * #### Notes + * The default implementation of this handler is a no-op. + */ + Layout.prototype.onChildHidden = function (msg) { }; + return Layout; + }()); + /** + * The namespace for the `Layout` class statics. + */ + (function (Layout) { + /** + * Get the horizontal alignment for a widget. + * + * @param widget - The widget of interest. + * + * @returns The horizontal alignment for the widget. + * + * #### Notes + * If the layout width allocated to a widget is larger than its max + * width, the horizontal alignment controls how the widget is placed + * within the extra horizontal space. + * + * If the allocated width is less than the widget's max width, the + * horizontal alignment has no effect. + * + * Some layout implementations may ignore horizontal alignment. + */ + function getHorizontalAlignment(widget) { + return Private$1$2.horizontalAlignmentProperty.get(widget); + } + Layout.getHorizontalAlignment = getHorizontalAlignment; + /** + * Set the horizontal alignment for a widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the horizontal alignment. + * + * #### Notes + * If the layout width allocated to a widget is larger than its max + * width, the horizontal alignment controls how the widget is placed + * within the extra horizontal space. + * + * If the allocated width is less than the widget's max width, the + * horizontal alignment has no effect. + * + * Some layout implementations may ignore horizontal alignment. + * + * Changing the horizontal alignment will post an `update-request` + * message to widget's parent, provided the parent has a layout + * installed. + */ + function setHorizontalAlignment(widget, value) { + Private$1$2.horizontalAlignmentProperty.set(widget, value); + } + Layout.setHorizontalAlignment = setHorizontalAlignment; + /** + * Get the vertical alignment for a widget. + * + * @param widget - The widget of interest. + * + * @returns The vertical alignment for the widget. + * + * #### Notes + * If the layout height allocated to a widget is larger than its max + * height, the vertical alignment controls how the widget is placed + * within the extra vertical space. + * + * If the allocated height is less than the widget's max height, the + * vertical alignment has no effect. + * + * Some layout implementations may ignore vertical alignment. + */ + function getVerticalAlignment(widget) { + return Private$1$2.verticalAlignmentProperty.get(widget); + } + Layout.getVerticalAlignment = getVerticalAlignment; + /** + * Set the vertical alignment for a widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the vertical alignment. + * + * #### Notes + * If the layout height allocated to a widget is larger than its max + * height, the vertical alignment controls how the widget is placed + * within the extra vertical space. + * + * If the allocated height is less than the widget's max height, the + * vertical alignment has no effect. + * + * Some layout implementations may ignore vertical alignment. + * + * Changing the horizontal alignment will post an `update-request` + * message to widget's parent, provided the parent has a layout + * installed. + */ + function setVerticalAlignment(widget, value) { + Private$1$2.verticalAlignmentProperty.set(widget, value); + } + Layout.setVerticalAlignment = setVerticalAlignment; + })(Layout || (Layout = {})); + /** + * An object which assists in the absolute layout of widgets. + * + * #### Notes + * This class is useful when implementing a layout which arranges its + * widgets using absolute positioning. + * + * This class is used by nearly all of the built-in lumino layouts. + */ + var LayoutItem = /** @class */ (function () { + /** + * Construct a new layout item. + * + * @param widget - The widget to be managed by the item. + * + * #### Notes + * The widget will be set to absolute positioning. + */ + function LayoutItem(widget) { + this._top = NaN; + this._left = NaN; + this._width = NaN; + this._height = NaN; + this._minWidth = 0; + this._minHeight = 0; + this._maxWidth = Infinity; + this._maxHeight = Infinity; + this._disposed = false; + this.widget = widget; + this.widget.node.style.position = 'absolute'; + } + /** + * Dispose of the the layout item. + * + * #### Notes + * This will reset the positioning of the widget. + */ + LayoutItem.prototype.dispose = function () { + // Do nothing if the item is already disposed. + if (this._disposed) { + return; + } + // Mark the item as disposed. + this._disposed = true; + // Reset the widget style. + var style = this.widget.node.style; + style.position = ''; + style.top = ''; + style.left = ''; + style.width = ''; + style.height = ''; + }; + Object.defineProperty(LayoutItem.prototype, "minWidth", { + /** + * The computed minimum width of the widget. + * + * #### Notes + * This value can be updated by calling the `fit` method. + */ + get: function () { + return this._minWidth; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayoutItem.prototype, "minHeight", { + /** + * The computed minimum height of the widget. + * + * #### Notes + * This value can be updated by calling the `fit` method. + */ + get: function () { + return this._minHeight; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayoutItem.prototype, "maxWidth", { + /** + * The computed maximum width of the widget. + * + * #### Notes + * This value can be updated by calling the `fit` method. + */ + get: function () { + return this._maxWidth; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayoutItem.prototype, "maxHeight", { + /** + * The computed maximum height of the widget. + * + * #### Notes + * This value can be updated by calling the `fit` method. + */ + get: function () { + return this._maxHeight; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayoutItem.prototype, "isDisposed", { + /** + * Whether the layout item is disposed. + */ + get: function () { + return this._disposed; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayoutItem.prototype, "isHidden", { + /** + * Whether the managed widget is hidden. + */ + get: function () { + return this.widget.isHidden; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayoutItem.prototype, "isVisible", { + /** + * Whether the managed widget is visible. + */ + get: function () { + return this.widget.isVisible; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LayoutItem.prototype, "isAttached", { + /** + * Whether the managed widget is attached. + */ + get: function () { + return this.widget.isAttached; + }, + enumerable: true, + configurable: true + }); + /** + * Update the computed size limits of the managed widget. + */ + LayoutItem.prototype.fit = function () { + var limits = ElementExt.sizeLimits(this.widget.node); + this._minWidth = limits.minWidth; + this._minHeight = limits.minHeight; + this._maxWidth = limits.maxWidth; + this._maxHeight = limits.maxHeight; + }; + /** + * Update the position and size of the managed widget. + * + * @param left - The left edge position of the layout box. + * + * @param top - The top edge position of the layout box. + * + * @param width - The width of the layout box. + * + * @param height - The height of the layout box. + */ + LayoutItem.prototype.update = function (left, top, width, height) { + // Clamp the size to the computed size limits. + var clampW = Math.max(this._minWidth, Math.min(width, this._maxWidth)); + var clampH = Math.max(this._minHeight, Math.min(height, this._maxHeight)); + // Adjust the left edge for the horizontal alignment, if needed. + if (clampW < width) { + switch (Layout.getHorizontalAlignment(this.widget)) { + case 'left': + break; + case 'center': + left += (width - clampW) / 2; + break; + case 'right': + left += width - clampW; + break; + default: + throw 'unreachable'; + } + } + // Adjust the top edge for the vertical alignment, if needed. + if (clampH < height) { + switch (Layout.getVerticalAlignment(this.widget)) { + case 'top': + break; + case 'center': + top += (height - clampH) / 2; + break; + case 'bottom': + top += height - clampH; + break; + default: + throw 'unreachable'; + } + } + // Set up the resize variables. + var resized = false; + var style = this.widget.node.style; + // Update the top edge of the widget if needed. + if (this._top !== top) { + this._top = top; + style.top = top + "px"; + } + // Update the left edge of the widget if needed. + if (this._left !== left) { + this._left = left; + style.left = left + "px"; + } + // Update the width of the widget if needed. + if (this._width !== clampW) { + resized = true; + this._width = clampW; + style.width = clampW + "px"; + } + // Update the height of the widget if needed. + if (this._height !== clampH) { + resized = true; + this._height = clampH; + style.height = clampH + "px"; + } + // Send a resize message to the widget if needed. + if (resized) { + var msg = new Widget.ResizeMessage(clampW, clampH); + MessageLoop.sendMessage(this.widget, msg); + } + }; + return LayoutItem; + }()); + /** + * The namespace for the module implementation details. + */ + var Private$1$2; + (function (Private) { + /** + * The attached property for a widget horizontal alignment. + */ + Private.horizontalAlignmentProperty = new AttachedProperty({ + name: 'horizontalAlignment', + create: function () { return 'center'; }, + changed: onAlignmentChanged + }); + /** + * The attached property for a widget vertical alignment. + */ + Private.verticalAlignmentProperty = new AttachedProperty({ + name: 'verticalAlignment', + create: function () { return 'top'; }, + changed: onAlignmentChanged + }); + /** + * The change handler for the attached alignment properties. + */ + function onAlignmentChanged(child) { + if (child.parent && child.parent.layout) { + child.parent.update(); + } + } + })(Private$1$2 || (Private$1$2 = {})); + + /** + * A concrete layout implementation suitable for many use cases. + * + * #### Notes + * This class is suitable as a base class for implementing a variety of + * layouts, but can also be used directly with standard CSS to layout a + * collection of widgets. + */ + var PanelLayout = /** @class */ (function (_super) { + __extends$5(PanelLayout, _super); + function PanelLayout() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._widgets = []; + return _this; + } + /** + * Dispose of the resources held by the layout. + * + * #### Notes + * This will clear and dispose all widgets in the layout. + * + * All reimplementations should call the superclass method. + * + * This method is called automatically when the parent is disposed. + */ + PanelLayout.prototype.dispose = function () { + while (this._widgets.length > 0) { + this._widgets.pop().dispose(); + } + _super.prototype.dispose.call(this); + }; + Object.defineProperty(PanelLayout.prototype, "widgets", { + /** + * A read-only array of the widgets in the layout. + */ + get: function () { + return this._widgets; + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator over the widgets in the layout. + * + * @returns A new iterator over the widgets in the layout. + */ + PanelLayout.prototype.iter = function () { + return iter(this._widgets); + }; + /** + * Add a widget to the end of the layout. + * + * @param widget - The widget to add to the layout. + * + * #### Notes + * If the widget is already contained in the layout, it will be moved. + */ + PanelLayout.prototype.addWidget = function (widget) { + this.insertWidget(this._widgets.length, widget); + }; + /** + * Insert a widget into the layout at the specified index. + * + * @param index - The index at which to insert the widget. + * + * @param widget - The widget to insert into the layout. + * + * #### Notes + * The index will be clamped to the bounds of the widgets. + * + * If the widget is already added to the layout, it will be moved. + * + * #### Undefined Behavior + * An `index` which is non-integral. + */ + PanelLayout.prototype.insertWidget = function (index, widget) { + // Remove the widget from its current parent. This is a no-op + // if the widget's parent is already the layout parent widget. + widget.parent = this.parent; + // Look up the current index of the widget. + var i = this._widgets.indexOf(widget); + // Clamp the insert index to the array bounds. + var j = Math.max(0, Math.min(index, this._widgets.length)); + // If the widget is not in the array, insert it. + if (i === -1) { + // Insert the widget into the array. + ArrayExt.insert(this._widgets, j, widget); + // If the layout is parented, attach the widget to the DOM. + if (this.parent) { + this.attachWidget(j, widget); + } + // There is nothing more to do. + return; + } + // Otherwise, the widget exists in the array and should be moved. + // Adjust the index if the location is at the end of the array. + if (j === this._widgets.length) { + j--; + } + // Bail if there is no effective move. + if (i === j) { + return; + } + // Move the widget to the new location. + ArrayExt.move(this._widgets, i, j); + // If the layout is parented, move the widget in the DOM. + if (this.parent) { + this.moveWidget(i, j, widget); + } + }; + /** + * Remove a widget from the layout. + * + * @param widget - The widget to remove from the layout. + * + * #### Notes + * A widget is automatically removed from the layout when its `parent` + * is set to `null`. This method should only be invoked directly when + * removing a widget from a layout which has yet to be installed on a + * parent widget. + * + * This method does *not* modify the widget's `parent`. + */ + PanelLayout.prototype.removeWidget = function (widget) { + this.removeWidgetAt(this._widgets.indexOf(widget)); + }; + /** + * Remove the widget at a given index from the layout. + * + * @param index - The index of the widget to remove. + * + * #### Notes + * A widget is automatically removed from the layout when its `parent` + * is set to `null`. This method should only be invoked directly when + * removing a widget from a layout which has yet to be installed on a + * parent widget. + * + * This method does *not* modify the widget's `parent`. + * + * #### Undefined Behavior + * An `index` which is non-integral. + */ + PanelLayout.prototype.removeWidgetAt = function (index) { + // Remove the widget from the array. + var widget = ArrayExt.removeAt(this._widgets, index); + // If the layout is parented, detach the widget from the DOM. + if (widget && this.parent) { + this.detachWidget(index, widget); + } + }; + /** + * Perform layout initialization which requires the parent widget. + */ + PanelLayout.prototype.init = function () { + var _this = this; + _super.prototype.init.call(this); + each$1(this, function (widget, index) { + _this.attachWidget(index, widget); + }); + }; + /** + * Attach a widget to the parent's DOM node. + * + * @param index - The current index of the widget in the layout. + * + * @param widget - The widget to attach to the parent. + * + * #### Notes + * This method is called automatically by the panel layout at the + * appropriate time. It should not be called directly by user code. + * + * The default implementation adds the widgets's node to the parent's + * node at the proper location, and sends the appropriate attach + * messages to the widget if the parent is attached to the DOM. + * + * Subclasses may reimplement this method to control how the widget's + * node is added to the parent's node. + */ + PanelLayout.prototype.attachWidget = function (index, widget) { + // Look up the next sibling reference node. + var ref = this.parent.node.children[index]; + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Insert the widget's node before the sibling. + this.parent.node.insertBefore(widget.node, ref); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + }; + /** + * Move a widget in the parent's DOM node. + * + * @param fromIndex - The previous index of the widget in the layout. + * + * @param toIndex - The current index of the widget in the layout. + * + * @param widget - The widget to move in the parent. + * + * #### Notes + * This method is called automatically by the panel layout at the + * appropriate time. It should not be called directly by user code. + * + * The default implementation moves the widget's node to the proper + * location in the parent's node and sends the appropriate attach and + * detach messages to the widget if the parent is attached to the DOM. + * + * Subclasses may reimplement this method to control how the widget's + * node is moved in the parent's node. + */ + PanelLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) { + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget's node from the parent. + this.parent.node.removeChild(widget.node); + // Send an `'after-detach'` and message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + // Look up the next sibling reference node. + var ref = this.parent.node.children[toIndex]; + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Insert the widget's node before the sibling. + this.parent.node.insertBefore(widget.node, ref); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + }; + /** + * Detach a widget from the parent's DOM node. + * + * @param index - The previous index of the widget in the layout. + * + * @param widget - The widget to detach from the parent. + * + * #### Notes + * This method is called automatically by the panel layout at the + * appropriate time. It should not be called directly by user code. + * + * The default implementation removes the widget's node from the + * parent's node, and sends the appropriate detach messages to the + * widget if the parent is attached to the DOM. + * + * Subclasses may reimplement this method to control how the widget's + * node is removed from the parent's node. + */ + PanelLayout.prototype.detachWidget = function (index, widget) { + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget's node from the parent. + this.parent.node.removeChild(widget.node); + // Send an `'after-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + }; + return PanelLayout; + }(Layout)); + + /** + * A layout which arranges its widgets in a single row or column. + */ + var BoxLayout = /** @class */ (function (_super) { + __extends$5(BoxLayout, _super); + /** + * Construct a new box layout. + * + * @param options - The options for initializing the layout. + */ + function BoxLayout(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this) || this; + _this._fixed = 0; + _this._spacing = 4; + _this._dirty = false; + _this._sizers = []; + _this._items = []; + _this._box = null; + _this._alignment = 'start'; + _this._direction = 'top-to-bottom'; + if (options.direction !== undefined) { + _this._direction = options.direction; + } + if (options.alignment !== undefined) { + _this._alignment = options.alignment; + } + if (options.spacing !== undefined) { + _this._spacing = Private$2$1.clampSpacing(options.spacing); + } + return _this; + } + /** + * Dispose of the resources held by the layout. + */ + BoxLayout.prototype.dispose = function () { + // Dispose of the layout items. + each$1(this._items, function (item) { item.dispose(); }); + // Clear the layout state. + this._box = null; + this._items.length = 0; + this._sizers.length = 0; + // Dispose of the rest of the layout. + _super.prototype.dispose.call(this); + }; + Object.defineProperty(BoxLayout.prototype, "direction", { + /** + * Get the layout direction for the box layout. + */ + get: function () { + return this._direction; + }, + /** + * Set the layout direction for the box layout. + */ + set: function (value) { + if (this._direction === value) { + return; + } + this._direction = value; + if (!this.parent) { + return; + } + this.parent.dataset['direction'] = value; + this.parent.fit(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BoxLayout.prototype, "alignment", { + /** + * Get the content alignment for the box layout. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire box layout. + */ + get: function () { + return this._alignment; + }, + /** + * Set the content alignment for the box layout. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire box layout. + */ + set: function (value) { + if (this._alignment === value) { + return; + } + this._alignment = value; + if (!this.parent) { + return; + } + this.parent.dataset['alignment'] = value; + this.parent.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BoxLayout.prototype, "spacing", { + /** + * Get the inter-element spacing for the box layout. + */ + get: function () { + return this._spacing; + }, + /** + * Set the inter-element spacing for the box layout. + */ + set: function (value) { + value = Private$2$1.clampSpacing(value); + if (this._spacing === value) { + return; + } + this._spacing = value; + if (!this.parent) { + return; + } + this.parent.fit(); + }, + enumerable: true, + configurable: true + }); + /** + * Perform layout initialization which requires the parent widget. + */ + BoxLayout.prototype.init = function () { + this.parent.dataset['direction'] = this.direction; + this.parent.dataset['alignment'] = this.alignment; + _super.prototype.init.call(this); + }; + /** + * Attach a widget to the parent's DOM node. + * + * @param index - The current index of the widget in the layout. + * + * @param widget - The widget to attach to the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + BoxLayout.prototype.attachWidget = function (index, widget) { + // Create and add a new layout item for the widget. + ArrayExt.insert(this._items, index, new LayoutItem(widget)); + // Create and add a new sizer for the widget. + ArrayExt.insert(this._sizers, index, new BoxSizer()); + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Add the widget's node to the parent. + this.parent.node.appendChild(widget.node); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * Move a widget in the parent's DOM node. + * + * @param fromIndex - The previous index of the widget in the layout. + * + * @param toIndex - The current index of the widget in the layout. + * + * @param widget - The widget to move in the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + BoxLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) { + // Move the layout item for the widget. + ArrayExt.move(this._items, fromIndex, toIndex); + // Move the sizer for the widget. + ArrayExt.move(this._sizers, fromIndex, toIndex); + // Post an update request for the parent widget. + this.parent.update(); + }; + /** + * Detach a widget from the parent's DOM node. + * + * @param index - The previous index of the widget in the layout. + * + * @param widget - The widget to detach from the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + BoxLayout.prototype.detachWidget = function (index, widget) { + // Remove the layout item for the widget. + var item = ArrayExt.removeAt(this._items, index); + // Remove the sizer for the widget. + ArrayExt.removeAt(this._sizers, index); + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget's node from the parent. + this.parent.node.removeChild(widget.node); + // Send an `'after-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + // Dispose of the layout item. + item.dispose(); + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * A message handler invoked on a `'before-show'` message. + */ + BoxLayout.prototype.onBeforeShow = function (msg) { + _super.prototype.onBeforeShow.call(this, msg); + this.parent.update(); + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + BoxLayout.prototype.onBeforeAttach = function (msg) { + _super.prototype.onBeforeAttach.call(this, msg); + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-shown'` message. + */ + BoxLayout.prototype.onChildShown = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-hidden'` message. + */ + BoxLayout.prototype.onChildHidden = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'resize'` message. + */ + BoxLayout.prototype.onResize = function (msg) { + if (this.parent.isVisible) { + this._update(msg.width, msg.height); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + BoxLayout.prototype.onUpdateRequest = function (msg) { + if (this.parent.isVisible) { + this._update(-1, -1); + } + }; + /** + * A message handler invoked on a `'fit-request'` message. + */ + BoxLayout.prototype.onFitRequest = function (msg) { + if (this.parent.isAttached) { + this._fit(); + } + }; + /** + * Fit the layout to the total size required by the widgets. + */ + BoxLayout.prototype._fit = function () { + // Compute the visible item count. + var nVisible = 0; + for (var i = 0, n = this._items.length; i < n; ++i) { + nVisible += +!this._items[i].isHidden; + } + // Update the fixed space for the visible items. + this._fixed = this._spacing * Math.max(0, nVisible - 1); + // Setup the computed minimum size. + var horz = Private$2$1.isHorizontal(this._direction); + var minW = horz ? this._fixed : 0; + var minH = horz ? 0 : this._fixed; + // Update the sizers and computed minimum size. + for (var i = 0, n = this._items.length; i < n; ++i) { + // Fetch the item and corresponding box sizer. + var item = this._items[i]; + var sizer = this._sizers[i]; + // If the item is hidden, it should consume zero size. + if (item.isHidden) { + sizer.minSize = 0; + sizer.maxSize = 0; + continue; + } + // Update the size limits for the item. + item.fit(); + // Update the size basis and stretch factor. + sizer.sizeHint = BoxLayout.getSizeBasis(item.widget); + sizer.stretch = BoxLayout.getStretch(item.widget); + // Update the sizer limits and computed min size. + if (horz) { + sizer.minSize = item.minWidth; + sizer.maxSize = item.maxWidth; + minW += item.minWidth; + minH = Math.max(minH, item.minHeight); + } + else { + sizer.minSize = item.minHeight; + sizer.maxSize = item.maxHeight; + minH += item.minHeight; + minW = Math.max(minW, item.minWidth); + } + } + // Update the box sizing and add it to the computed min size. + var box = this._box = ElementExt.boxSizing(this.parent.node); + minW += box.horizontalSum; + minH += box.verticalSum; + // Update the parent's min size constraints. + var style = this.parent.node.style; + style.minWidth = minW + "px"; + style.minHeight = minH + "px"; + // Set the dirty flag to ensure only a single update occurs. + this._dirty = true; + // Notify the ancestor that it should fit immediately. This may + // cause a resize of the parent, fulfilling the required update. + if (this.parent.parent) { + MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest); + } + // If the dirty flag is still set, the parent was not resized. + // Trigger the required update on the parent widget immediately. + if (this._dirty) { + MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest); + } + }; + /** + * Update the layout position and size of the widgets. + * + * The parent offset dimensions should be `-1` if unknown. + */ + BoxLayout.prototype._update = function (offsetWidth, offsetHeight) { + // Clear the dirty flag to indicate the update occurred. + this._dirty = false; + // Compute the visible item count. + var nVisible = 0; + for (var i = 0, n = this._items.length; i < n; ++i) { + nVisible += +!this._items[i].isHidden; + } + // Bail early if there are no visible items to layout. + if (nVisible === 0) { + return; + } + // Measure the parent if the offset dimensions are unknown. + if (offsetWidth < 0) { + offsetWidth = this.parent.node.offsetWidth; + } + if (offsetHeight < 0) { + offsetHeight = this.parent.node.offsetHeight; + } + // Ensure the parent box sizing data is computed. + if (!this._box) { + this._box = ElementExt.boxSizing(this.parent.node); + } + // Compute the layout area adjusted for border and padding. + var top = this._box.paddingTop; + var left = this._box.paddingLeft; + var width = offsetWidth - this._box.horizontalSum; + var height = offsetHeight - this._box.verticalSum; + // Distribute the layout space and adjust the start position. + var delta; + switch (this._direction) { + case 'left-to-right': + delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed)); + break; + case 'top-to-bottom': + delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed)); + break; + case 'right-to-left': + delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed)); + left += width; + break; + case 'bottom-to-top': + delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed)); + top += height; + break; + default: + throw 'unreachable'; + } + // Setup the variables for justification and alignment offset. + var extra = 0; + var offset = 0; + // Account for alignment if there is extra layout space. + if (delta > 0) { + switch (this._alignment) { + case 'start': + break; + case 'center': + extra = 0; + offset = delta / 2; + break; + case 'end': + extra = 0; + offset = delta; + break; + case 'justify': + extra = delta / nVisible; + offset = 0; + break; + default: + throw 'unreachable'; + } + } + // Layout the items using the computed box sizes. + for (var i = 0, n = this._items.length; i < n; ++i) { + // Fetch the item. + var item = this._items[i]; + // Ignore hidden items. + if (item.isHidden) { + continue; + } + // Fetch the computed size for the widget. + var size = this._sizers[i].size; + // Update the widget geometry and advance the relevant edge. + switch (this._direction) { + case 'left-to-right': + item.update(left + offset, top, size + extra, height); + left += size + extra + this._spacing; + break; + case 'top-to-bottom': + item.update(left, top + offset, width, size + extra); + top += size + extra + this._spacing; + break; + case 'right-to-left': + item.update(left - offset - size - extra, top, size + extra, height); + left -= size + extra + this._spacing; + break; + case 'bottom-to-top': + item.update(left, top - offset - size - extra, width, size + extra); + top -= size + extra + this._spacing; + break; + default: + throw 'unreachable'; + } + } + }; + return BoxLayout; + }(PanelLayout)); + /** + * The namespace for the `BoxLayout` class statics. + */ + (function (BoxLayout) { + /** + * Get the box layout stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @returns The box layout stretch factor for the widget. + */ + function getStretch(widget) { + return Private$2$1.stretchProperty.get(widget); + } + BoxLayout.getStretch = getStretch; + /** + * Set the box layout stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the stretch factor. + */ + function setStretch(widget, value) { + Private$2$1.stretchProperty.set(widget, value); + } + BoxLayout.setStretch = setStretch; + /** + * Get the box layout size basis for the given widget. + * + * @param widget - The widget of interest. + * + * @returns The box layout size basis for the widget. + */ + function getSizeBasis(widget) { + return Private$2$1.sizeBasisProperty.get(widget); + } + BoxLayout.getSizeBasis = getSizeBasis; + /** + * Set the box layout size basis for the given widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the size basis. + */ + function setSizeBasis(widget, value) { + Private$2$1.sizeBasisProperty.set(widget, value); + } + BoxLayout.setSizeBasis = setSizeBasis; + })(BoxLayout || (BoxLayout = {})); + /** + * The namespace for the module implementation details. + */ + var Private$2$1; + (function (Private) { + /** + * The property descriptor for a widget stretch factor. + */ + Private.stretchProperty = new AttachedProperty({ + name: 'stretch', + create: function () { return 0; }, + coerce: function (owner, value) { return Math.max(0, Math.floor(value)); }, + changed: onChildSizingChanged + }); + /** + * The property descriptor for a widget size basis. + */ + Private.sizeBasisProperty = new AttachedProperty({ + name: 'sizeBasis', + create: function () { return 0; }, + coerce: function (owner, value) { return Math.max(0, Math.floor(value)); }, + changed: onChildSizingChanged + }); + /** + * Test whether a direction has horizontal orientation. + */ + function isHorizontal(dir) { + return dir === 'left-to-right' || dir === 'right-to-left'; + } + Private.isHorizontal = isHorizontal; + /** + * Clamp a spacing value to an integer >= 0. + */ + function clampSpacing(value) { + return Math.max(0, Math.floor(value)); + } + Private.clampSpacing = clampSpacing; + /** + * The change handler for the attached sizing properties. + */ + function onChildSizingChanged(child) { + if (child.parent && child.parent.layout instanceof BoxLayout) { + child.parent.fit(); + } + } + })(Private$2$1 || (Private$2$1 = {})); + + /** + * A simple and convenient panel widget class. + * + * #### Notes + * This class is suitable as a base class for implementing a variety of + * convenience panel widgets, but can also be used directly with CSS to + * arrange a collection of widgets. + * + * This class provides a convenience wrapper around a [[PanelLayout]]. + */ + var Panel = /** @class */ (function (_super) { + __extends$5(Panel, _super); + /** + * Construct a new panel. + * + * @param options - The options for initializing the panel. + */ + function Panel(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this) || this; + _this.addClass('lm-Panel'); + /* */ + _this.addClass('p-Panel'); + /* */ + _this.layout = Private$3$1.createLayout(options); + return _this; + } + Object.defineProperty(Panel.prototype, "widgets", { + /** + * A read-only array of the widgets in the panel. + */ + get: function () { + return this.layout.widgets; + }, + enumerable: true, + configurable: true + }); + /** + * Add a widget to the end of the panel. + * + * @param widget - The widget to add to the panel. + * + * #### Notes + * If the widget is already contained in the panel, it will be moved. + */ + Panel.prototype.addWidget = function (widget) { + this.layout.addWidget(widget); + }; + /** + * Insert a widget at the specified index. + * + * @param index - The index at which to insert the widget. + * + * @param widget - The widget to insert into to the panel. + * + * #### Notes + * If the widget is already contained in the panel, it will be moved. + */ + Panel.prototype.insertWidget = function (index, widget) { + this.layout.insertWidget(index, widget); + }; + return Panel; + }(Widget)); + /** + * The namespace for the module implementation details. + */ + var Private$3$1; + (function (Private) { + /** + * Create a panel layout for the given panel options. + */ + function createLayout(options) { + return options.layout || new PanelLayout(); + } + Private.createLayout = createLayout; + })(Private$3$1 || (Private$3$1 = {})); + + /** + * A panel which arranges its widgets in a single row or column. + * + * #### Notes + * This class provides a convenience wrapper around a [[BoxLayout]]. + */ + var BoxPanel = /** @class */ (function (_super) { + __extends$5(BoxPanel, _super); + /** + * Construct a new box panel. + * + * @param options - The options for initializing the box panel. + */ + function BoxPanel(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this, { layout: Private$4$1.createLayout(options) }) || this; + _this.addClass('lm-BoxPanel'); + /* */ + _this.addClass('p-BoxPanel'); + return _this; + /* */ + } + Object.defineProperty(BoxPanel.prototype, "direction", { + /** + * Get the layout direction for the box panel. + */ + get: function () { + return this.layout.direction; + }, + /** + * Set the layout direction for the box panel. + */ + set: function (value) { + this.layout.direction = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BoxPanel.prototype, "alignment", { + /** + * Get the content alignment for the box panel. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire box layout. + */ + get: function () { + return this.layout.alignment; + }, + /** + * Set the content alignment for the box panel. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire box layout. + */ + set: function (value) { + this.layout.alignment = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BoxPanel.prototype, "spacing", { + /** + * Get the inter-element spacing for the box panel. + */ + get: function () { + return this.layout.spacing; + }, + /** + * Set the inter-element spacing for the box panel. + */ + set: function (value) { + this.layout.spacing = value; + }, + enumerable: true, + configurable: true + }); + /** + * A message handler invoked on a `'child-added'` message. + */ + BoxPanel.prototype.onChildAdded = function (msg) { + msg.child.addClass('lm-BoxPanel-child'); + /* */ + msg.child.addClass('p-BoxPanel-child'); + /* */ + }; + /** + * A message handler invoked on a `'child-removed'` message. + */ + BoxPanel.prototype.onChildRemoved = function (msg) { + msg.child.removeClass('lm-BoxPanel-child'); + /* */ + msg.child.removeClass('p-BoxPanel-child'); + /* */ + }; + return BoxPanel; + }(Panel)); + /** + * The namespace for the `BoxPanel` class statics. + */ + (function (BoxPanel) { + /** + * Get the box panel stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @returns The box panel stretch factor for the widget. + */ + function getStretch(widget) { + return BoxLayout.getStretch(widget); + } + BoxPanel.getStretch = getStretch; + /** + * Set the box panel stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the stretch factor. + */ + function setStretch(widget, value) { + BoxLayout.setStretch(widget, value); + } + BoxPanel.setStretch = setStretch; + /** + * Get the box panel size basis for the given widget. + * + * @param widget - The widget of interest. + * + * @returns The box panel size basis for the widget. + */ + function getSizeBasis(widget) { + return BoxLayout.getSizeBasis(widget); + } + BoxPanel.getSizeBasis = getSizeBasis; + /** + * Set the box panel size basis for the given widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the size basis. + */ + function setSizeBasis(widget, value) { + BoxLayout.setSizeBasis(widget, value); + } + BoxPanel.setSizeBasis = setSizeBasis; + })(BoxPanel || (BoxPanel = {})); + /** + * The namespace for the module implementation details. + */ + var Private$4$1; + (function (Private) { + /** + * Create a box layout for the given panel options. + */ + function createLayout(options) { + return options.layout || new BoxLayout(options); + } + Private.createLayout = createLayout; + })(Private$4$1 || (Private$4$1 = {})); + + /** + * A widget which displays command items as a searchable palette. + */ + var CommandPalette = /** @class */ (function (_super) { + __extends$5(CommandPalette, _super); + /** + * Construct a new command palette. + * + * @param options - The options for initializing the palette. + */ + function CommandPalette(options) { + var _this = _super.call(this, { node: Private$5$1.createNode() }) || this; + _this._activeIndex = -1; + _this._items = []; + _this._results = null; + _this.addClass('lm-CommandPalette'); + /* */ + _this.addClass('p-CommandPalette'); + /* */ + _this.setFlag(Widget.Flag.DisallowLayout); + _this.commands = options.commands; + _this.renderer = options.renderer || CommandPalette.defaultRenderer; + _this.commands.commandChanged.connect(_this._onGenericChange, _this); + _this.commands.keyBindingChanged.connect(_this._onGenericChange, _this); + return _this; + } + /** + * Dispose of the resources held by the widget. + */ + CommandPalette.prototype.dispose = function () { + this._items.length = 0; + this._results = null; + _super.prototype.dispose.call(this); + }; + Object.defineProperty(CommandPalette.prototype, "searchNode", { + /** + * The command palette search node. + * + * #### Notes + * This is the node which contains the search-related elements. + */ + get: function () { + return this.node.getElementsByClassName('lm-CommandPalette-search')[0]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandPalette.prototype, "inputNode", { + /** + * The command palette input node. + * + * #### Notes + * This is the actual input node for the search area. + */ + get: function () { + return this.node.getElementsByClassName('lm-CommandPalette-input')[0]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandPalette.prototype, "contentNode", { + /** + * The command palette content node. + * + * #### Notes + * This is the node which holds the command item nodes. + * + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-CommandPalette-content')[0]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandPalette.prototype, "items", { + /** + * A read-only array of the command items in the palette. + */ + get: function () { + return this._items; + }, + enumerable: true, + configurable: true + }); + /** + * Add a command item to the command palette. + * + * @param options - The options for creating the command item. + * + * @returns The command item added to the palette. + */ + CommandPalette.prototype.addItem = function (options) { + // Create a new command item for the options. + var item = Private$5$1.createItem(this.commands, options); + // Add the item to the array. + this._items.push(item); + // Refresh the search results. + this.refresh(); + // Return the item added to the palette. + return item; + }; + /** + * Remove an item from the command palette. + * + * @param item - The item to remove from the palette. + * + * #### Notes + * This is a no-op if the item is not in the palette. + */ + CommandPalette.prototype.removeItem = function (item) { + this.removeItemAt(this._items.indexOf(item)); + }; + /** + * Remove the item at a given index from the command palette. + * + * @param index - The index of the item to remove. + * + * #### Notes + * This is a no-op if the index is out of range. + */ + CommandPalette.prototype.removeItemAt = function (index) { + // Remove the item from the array. + var item = ArrayExt.removeAt(this._items, index); + // Bail if the index is out of range. + if (!item) { + return; + } + // Refresh the search results. + this.refresh(); + }; + /** + * Remove all items from the command palette. + */ + CommandPalette.prototype.clearItems = function () { + // Bail if there is nothing to remove. + if (this._items.length === 0) { + return; + } + // Clear the array of items. + this._items.length = 0; + // Refresh the search results. + this.refresh(); + }; + /** + * Clear the search results and schedule an update. + * + * #### Notes + * This should be called whenever the search results of the palette + * should be updated. + * + * This is typically called automatically by the palette as needed, + * but can be called manually if the input text is programatically + * changed. + * + * The rendered results are updated asynchronously. + */ + CommandPalette.prototype.refresh = function () { + this._results = null; + if (this.inputNode.value !== '') { + var clear = this.node.getElementsByClassName('lm-close-icon')[0]; + clear.style.display = 'inherit'; + } + else { + var clear = this.node.getElementsByClassName('lm-close-icon')[0]; + clear.style.display = 'none'; + } + this.update(); + }; + /** + * Handle the DOM events for the command palette. + * + * @param event - The DOM event sent to the command palette. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the command palette's DOM node. + * It should not be called directly by user code. + */ + CommandPalette.prototype.handleEvent = function (event) { + switch (event.type) { + case 'click': + this._evtClick(event); + break; + case 'keydown': + this._evtKeyDown(event); + break; + case 'input': + this.refresh(); + break; + case 'focus': + case 'blur': + this._toggleFocused(); + break; + } + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + CommandPalette.prototype.onBeforeAttach = function (msg) { + this.node.addEventListener('click', this); + this.node.addEventListener('keydown', this); + this.node.addEventListener('input', this); + this.node.addEventListener('focus', this, true); + this.node.addEventListener('blur', this, true); + }; + /** + * A message handler invoked on an `'after-detach'` message. + */ + CommandPalette.prototype.onAfterDetach = function (msg) { + this.node.removeEventListener('click', this); + this.node.removeEventListener('keydown', this); + this.node.removeEventListener('input', this); + this.node.removeEventListener('focus', this, true); + this.node.removeEventListener('blur', this, true); + }; + /** + * A message handler invoked on an `'activate-request'` message. + */ + CommandPalette.prototype.onActivateRequest = function (msg) { + if (this.isAttached) { + var input = this.inputNode; + input.focus(); + input.select(); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + CommandPalette.prototype.onUpdateRequest = function (msg) { + // Fetch the current query text and content node. + var query = this.inputNode.value; + var contentNode = this.contentNode; + // Ensure the search results are generated. + var results = this._results; + if (!results) { + // Generate and store the new search results. + results = this._results = Private$5$1.search(this._items, query); + // Reset the active index. + this._activeIndex = (query ? ArrayExt.findFirstIndex(results, Private$5$1.canActivate) : -1); + } + // If there is no query and no results, clear the content. + if (!query && results.length === 0) { + VirtualDOM.render(null, contentNode); + return; + } + // If the is a query but no results, render the empty message. + if (query && results.length === 0) { + var content_1 = this.renderer.renderEmptyMessage({ query: query }); + VirtualDOM.render(content_1, contentNode); + return; + } + // Create the render content for the search results. + var renderer = this.renderer; + var activeIndex = this._activeIndex; + var content = new Array(results.length); + for (var i = 0, n = results.length; i < n; ++i) { + var result = results[i]; + if (result.type === 'header') { + var indices = result.indices; + var category = result.category; + content[i] = renderer.renderHeader({ category: category, indices: indices }); + } + else { + var item = result.item; + var indices = result.indices; + var active = i === activeIndex; + content[i] = renderer.renderItem({ item: item, indices: indices, active: active }); + } + } + // Render the search result content. + VirtualDOM.render(content, contentNode); + // Adjust the scroll position as needed. + if (activeIndex < 0 || activeIndex >= results.length) { + contentNode.scrollTop = 0; + } + else { + var element = contentNode.children[activeIndex]; + ElementExt.scrollIntoViewIfNeeded(contentNode, element); + } + }; + /** + * Handle the `'click'` event for the command palette. + */ + CommandPalette.prototype._evtClick = function (event) { + // Bail if the click is not the left button. + if (event.button !== 0) { + return; + } + // Clear input if the target is clear button + if (event.target.classList.contains("lm-close-icon")) { + this.inputNode.value = ''; + this.refresh(); + return; + } + // Find the index of the item which was clicked. + var index = ArrayExt.findFirstIndex(this.contentNode.children, function (node) { + return node.contains(event.target); + }); + // Bail if the click was not on an item. + if (index === -1) { + return; + } + // Kill the event when a content item is clicked. + event.preventDefault(); + event.stopPropagation(); + // Execute the item if possible. + this._execute(index); + }; + /** + * Handle the `'keydown'` event for the command palette. + */ + CommandPalette.prototype._evtKeyDown = function (event) { + if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) { + return; + } + switch (event.keyCode) { + case 13: // Enter + event.preventDefault(); + event.stopPropagation(); + this._execute(this._activeIndex); + break; + case 38: // Up Arrow + event.preventDefault(); + event.stopPropagation(); + this._activatePreviousItem(); + break; + case 40: // Down Arrow + event.preventDefault(); + event.stopPropagation(); + this._activateNextItem(); + break; + } + }; + /** + * Activate the next enabled command item. + */ + CommandPalette.prototype._activateNextItem = function () { + // Bail if there are no search results. + if (!this._results || this._results.length === 0) { + return; + } + // Find the next enabled item index. + var ai = this._activeIndex; + var n = this._results.length; + var start = ai < n - 1 ? ai + 1 : 0; + var stop = start === 0 ? n - 1 : start - 1; + this._activeIndex = ArrayExt.findFirstIndex(this._results, Private$5$1.canActivate, start, stop); + // Schedule an update of the items. + this.update(); + }; + /** + * Activate the previous enabled command item. + */ + CommandPalette.prototype._activatePreviousItem = function () { + // Bail if there are no search results. + if (!this._results || this._results.length === 0) { + return; + } + // Find the previous enabled item index. + var ai = this._activeIndex; + var n = this._results.length; + var start = ai <= 0 ? n - 1 : ai - 1; + var stop = start === n - 1 ? 0 : start + 1; + this._activeIndex = ArrayExt.findLastIndex(this._results, Private$5$1.canActivate, start, stop); + // Schedule an update of the items. + this.update(); + }; + /** + * Execute the command item at the given index, if possible. + */ + CommandPalette.prototype._execute = function (index) { + // Bail if there are no search results. + if (!this._results) { + return; + } + // Bail if the index is out of range. + var part = this._results[index]; + if (!part) { + return; + } + // Update the search text if the item is a header. + if (part.type === 'header') { + var input = this.inputNode; + input.value = part.category.toLowerCase() + " "; + input.focus(); + this.refresh(); + return; + } + // Bail if item is not enabled. + if (!part.item.isEnabled) { + return; + } + // Execute the item. + this.commands.execute(part.item.command, part.item.args); + // Clear the query text. + this.inputNode.value = ''; + // Refresh the search results. + this.refresh(); + }; + /** + * Toggle the focused modifier based on the input node focus state. + */ + CommandPalette.prototype._toggleFocused = function () { + var focused = document.activeElement === this.inputNode; + this.toggleClass('lm-mod-focused', focused); + /* */ + this.toggleClass('p-mod-focused', focused); + /* */ + }; + /** + * A signal handler for generic command changes. + */ + CommandPalette.prototype._onGenericChange = function () { + this.refresh(); + }; + return CommandPalette; + }(Widget)); + /** + * The namespace for the `CommandPalette` class statics. + */ + (function (CommandPalette) { + /** + * The default implementation of `IRenderer`. + */ + var Renderer = /** @class */ (function () { + function Renderer() { + } + /** + * Render the virtual element for a command palette header. + * + * @param data - The data to use for rendering the header. + * + * @returns A virtual element representing the header. + */ + Renderer.prototype.renderHeader = function (data) { + var content = this.formatHeader(data); + return h.li({ className: 'lm-CommandPalette-header' + /* */ + + ' p-CommandPalette-header' + /* */ + }, content); + }; + /** + * Render the virtual element for a command palette item. + * + * @param data - The data to use for rendering the item. + * + * @returns A virtual element representing the item. + */ + Renderer.prototype.renderItem = function (data) { + var className = this.createItemClass(data); + var dataset = this.createItemDataset(data); + return (h.li({ className: className, dataset: dataset }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data))); + }; + /** + * Render the empty results message for a command palette. + * + * @param data - The data to use for rendering the message. + * + * @returns A virtual element representing the message. + */ + Renderer.prototype.renderEmptyMessage = function (data) { + var content = this.formatEmptyMessage(data); + return h.li({ + className: 'lm-CommandPalette-emptyMessage' + /* */ + + ' p-CommandPalette-emptyMessage' + /* */ + }, content); + }; + /** + * Render the icon for a command palette item. + * + * @param data - The data to use for rendering the icon. + * + * @returns A virtual element representing the icon. + */ + Renderer.prototype.renderItemIcon = function (data) { + var className = this.createIconClass(data); + /* */ + if (typeof data.item.icon === 'string') { + return h.div({ className: className }, data.item.iconLabel); + } + /* */ + // if data.item.icon is undefined, it will be ignored + return h.div({ className: className }, data.item.icon, data.item.iconLabel); + }; + /** + * Render the content for a command palette item. + * + * @param data - The data to use for rendering the content. + * + * @returns A virtual element representing the content. + */ + Renderer.prototype.renderItemContent = function (data) { + return (h.div({ + className: 'lm-CommandPalette-itemContent' + /* */ + + ' p-CommandPalette-itemContent' + /* */ + }, this.renderItemLabel(data), this.renderItemCaption(data))); + }; + /** + * Render the label for a command palette item. + * + * @param data - The data to use for rendering the label. + * + * @returns A virtual element representing the label. + */ + Renderer.prototype.renderItemLabel = function (data) { + var content = this.formatItemLabel(data); + return h.div({ + className: 'lm-CommandPalette-itemLabel' + /* */ + + ' p-CommandPalette-itemLabel' + /* */ + }, content); + }; + /** + * Render the caption for a command palette item. + * + * @param data - The data to use for rendering the caption. + * + * @returns A virtual element representing the caption. + */ + Renderer.prototype.renderItemCaption = function (data) { + var content = this.formatItemCaption(data); + return h.div({ + className: 'lm-CommandPalette-itemCaption' + /* */ + + ' p-CommandPalette-itemCaption' + /* */ + }, content); + }; + /** + * Render the shortcut for a command palette item. + * + * @param data - The data to use for rendering the shortcut. + * + * @returns A virtual element representing the shortcut. + */ + Renderer.prototype.renderItemShortcut = function (data) { + var content = this.formatItemShortcut(data); + return h.div({ + className: 'lm-CommandPalette-itemShortcut' + /* */ + + ' p-CommandPalette-itemShortcut' + /* */ + }, content); + }; + /** + * Create the class name for the command palette item. + * + * @param data - The data to use for the class name. + * + * @returns The full class name for the command palette item. + */ + Renderer.prototype.createItemClass = function (data) { + // Set up the initial class name. + var name = 'lm-CommandPalette-item'; + /* */ + name += ' p-CommandPalette-item'; + /* */ + // Add the boolean state classes. + if (!data.item.isEnabled) { + name += ' lm-mod-disabled'; + /* */ + name += ' p-mod-disabled'; + /* */ + } + if (data.item.isToggled) { + name += ' lm-mod-toggled'; + /* */ + name += ' p-mod-toggled'; + /* */ + } + if (data.active) { + name += ' lm-mod-active'; + /* */ + name += ' p-mod-active'; + /* */ + } + // Add the extra class. + var extra = data.item.className; + if (extra) { + name += " " + extra; + } + // Return the complete class name. + return name; + }; + /** + * Create the dataset for the command palette item. + * + * @param data - The data to use for creating the dataset. + * + * @returns The dataset for the command palette item. + */ + Renderer.prototype.createItemDataset = function (data) { + return __assign$3(__assign$3({}, data.item.dataset), { command: data.item.command }); + }; + /** + * Create the class name for the command item icon. + * + * @param data - The data to use for the class name. + * + * @returns The full class name for the item icon. + */ + Renderer.prototype.createIconClass = function (data) { + var name = 'lm-CommandPalette-itemIcon'; + /* */ + name += ' p-CommandPalette-itemIcon'; + /* */ + var extra = data.item.iconClass; + return extra ? name + " " + extra : name; + }; + /** + * Create the render content for the header node. + * + * @param data - The data to use for the header content. + * + * @returns The content to add to the header node. + */ + Renderer.prototype.formatHeader = function (data) { + if (!data.indices || data.indices.length === 0) { + return data.category; + } + return StringExt.highlight(data.category, data.indices, h.mark); + }; + /** + * Create the render content for the empty message node. + * + * @param data - The data to use for the empty message content. + * + * @returns The content to add to the empty message node. + */ + Renderer.prototype.formatEmptyMessage = function (data) { + return "No commands found that match '" + data.query + "'"; + }; + /** + * Create the render content for the item shortcut node. + * + * @param data - The data to use for the shortcut content. + * + * @returns The content to add to the shortcut node. + */ + Renderer.prototype.formatItemShortcut = function (data) { + var kb = data.item.keyBinding; + return kb ? kb.keys.map(CommandRegistry.formatKeystroke).join(', ') : null; + }; + /** + * Create the render content for the item label node. + * + * @param data - The data to use for the label content. + * + * @returns The content to add to the label node. + */ + Renderer.prototype.formatItemLabel = function (data) { + if (!data.indices || data.indices.length === 0) { + return data.item.label; + } + return StringExt.highlight(data.item.label, data.indices, h.mark); + }; + /** + * Create the render content for the item caption node. + * + * @param data - The data to use for the caption content. + * + * @returns The content to add to the caption node. + */ + Renderer.prototype.formatItemCaption = function (data) { + return data.item.caption; + }; + return Renderer; + }()); + CommandPalette.Renderer = Renderer; + /** + * The default `Renderer` instance. + */ + CommandPalette.defaultRenderer = new Renderer(); + })(CommandPalette || (CommandPalette = {})); + /** + * The namespace for the module implementation details. + */ + var Private$5$1; + (function (Private) { + /** + * Create the DOM node for a command palette. + */ + function createNode() { + var node = document.createElement('div'); + var search = document.createElement('div'); + var wrapper = document.createElement('div'); + var input = document.createElement('input'); + var content = document.createElement('ul'); + var clear = document.createElement('button'); + search.className = 'lm-CommandPalette-search'; + wrapper.className = 'lm-CommandPalette-wrapper'; + input.className = 'lm-CommandPalette-input'; + clear.className = 'lm-close-icon'; + content.className = 'lm-CommandPalette-content'; + /* */ + search.classList.add('p-CommandPalette-search'); + wrapper.classList.add('p-CommandPalette-wrapper'); + input.classList.add('p-CommandPalette-input'); + content.classList.add('p-CommandPalette-content'); + /* */ + input.spellcheck = false; + wrapper.appendChild(input); + wrapper.appendChild(clear); + search.appendChild(wrapper); + node.appendChild(search); + node.appendChild(content); + return node; + } + Private.createNode = createNode; + /** + * Create a new command item from a command registry and options. + */ + function createItem(commands, options) { + return new CommandItem(commands, options); + } + Private.createItem = createItem; + /** + * Search an array of command items for fuzzy matches. + */ + function search(items, query) { + // Fuzzy match the items for the query. + var scores = matchItems(items, query); + // Sort the items based on their score. + scores.sort(scoreCmp); + // Create the results for the search. + return createResults(scores); + } + Private.search = search; + /** + * Test whether a result item can be activated. + */ + function canActivate(result) { + return result.type === 'item' && result.item.isEnabled; + } + Private.canActivate = canActivate; + /** + * Normalize a category for a command item. + */ + function normalizeCategory(category) { + return category.trim().replace(/\s+/g, ' '); + } + /** + * Normalize the query text for a fuzzy search. + */ + function normalizeQuery(text) { + return text.replace(/\s+/g, '').toLowerCase(); + } + /** + * Perform a fuzzy match on an array of command items. + */ + function matchItems(items, query) { + // Normalize the query text to lower case with no whitespace. + query = normalizeQuery(query); + // Create the array to hold the scores. + var scores = []; + // Iterate over the items and match against the query. + for (var i = 0, n = items.length; i < n; ++i) { + // Ignore items which are not visible. + var item = items[i]; + if (!item.isVisible) { + continue; + } + // If the query is empty, all items are matched by default. + if (!query) { + scores.push({ + matchType: 3 /* Default */, + categoryIndices: null, + labelIndices: null, + score: 0, item: item + }); + continue; + } + // Run the fuzzy search for the item and query. + var score = fuzzySearch(item, query); + // Ignore the item if it is not a match. + if (!score) { + continue; + } + // Penalize disabled items. + // TODO - push disabled items all the way down in sort cmp? + if (!item.isEnabled) { + score.score += 1000; + } + // Add the score to the results. + scores.push(score); + } + // Return the final array of scores. + return scores; + } + /** + * Perform a fuzzy search on a single command item. + */ + function fuzzySearch(item, query) { + // Create the source text to be searched. + var category = item.category.toLowerCase(); + var label = item.label.toLowerCase(); + var source = category + " " + label; + // Set up the match score and indices array. + var score = Infinity; + var indices = null; + // The regex for search word boundaries + var rgx = /\b\w/g; + // Search the source by word boundary. + while (true) { + // Find the next word boundary in the source. + var rgxMatch = rgx.exec(source); + // Break if there is no more source context. + if (!rgxMatch) { + break; + } + // Run the string match on the relevant substring. + var match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index); + // Break if there is no match. + if (!match) { + break; + } + // Update the match if the score is better. + if (match && match.score <= score) { + score = match.score; + indices = match.indices; + } + } + // Bail if there was no match. + if (!indices || score === Infinity) { + return null; + } + // Compute the pivot index between category and label text. + var pivot = category.length + 1; + // Find the slice index to separate matched indices. + var j = ArrayExt.lowerBound(indices, pivot, function (a, b) { return a - b; }); + // Extract the matched category and label indices. + var categoryIndices = indices.slice(0, j); + var labelIndices = indices.slice(j); + // Adjust the label indices for the pivot offset. + for (var i = 0, n = labelIndices.length; i < n; ++i) { + labelIndices[i] -= pivot; + } + // Handle a pure label match. + if (categoryIndices.length === 0) { + return { + matchType: 0 /* Label */, + categoryIndices: null, + labelIndices: labelIndices, + score: score, item: item + }; + } + // Handle a pure category match. + if (labelIndices.length === 0) { + return { + matchType: 1 /* Category */, + categoryIndices: categoryIndices, + labelIndices: null, + score: score, item: item + }; + } + // Handle a split match. + return { + matchType: 2 /* Split */, + categoryIndices: categoryIndices, + labelIndices: labelIndices, + score: score, item: item + }; + } + /** + * A sort comparison function for a match score. + */ + function scoreCmp(a, b) { + // First compare based on the match type + var m1 = a.matchType - b.matchType; + if (m1 !== 0) { + return m1; + } + // Otherwise, compare based on the match score. + var d1 = a.score - b.score; + if (d1 !== 0) { + return d1; + } + // Find the match index based on the match type. + var i1 = 0; + var i2 = 0; + switch (a.matchType) { + case 0 /* Label */: + i1 = a.labelIndices[0]; + i2 = b.labelIndices[0]; + break; + case 1 /* Category */: + case 2 /* Split */: + i1 = a.categoryIndices[0]; + i2 = b.categoryIndices[0]; + break; + } + // Compare based on the match index. + if (i1 !== i2) { + return i1 - i2; + } + // Otherwise, compare by category. + var d2 = a.item.category.localeCompare(b.item.category); + if (d2 !== 0) { + return d2; + } + // Otherwise, compare by rank. + var r1 = a.item.rank; + var r2 = b.item.rank; + if (r1 !== r2) { + return r1 < r2 ? -1 : 1; // Infinity safe + } + // Finally, compare by label. + return a.item.label.localeCompare(b.item.label); + } + /** + * Create the results from an array of sorted scores. + */ + function createResults(scores) { + // Set up an array to track which scores have been visited. + var visited = new Array(scores.length); + ArrayExt.fill(visited, false); + // Set up the search results array. + var results = []; + // Iterate over each score in the array. + for (var i = 0, n = scores.length; i < n; ++i) { + // Ignore a score which has already been processed. + if (visited[i]) { + continue; + } + // Extract the current item and indices. + var _a = scores[i], item = _a.item, categoryIndices = _a.categoryIndices; + // Extract the category for the current item. + var category = item.category; + // Add the header result for the category. + results.push({ type: 'header', category: category, indices: categoryIndices }); + // Find the rest of the scores with the same category. + for (var j = i; j < n; ++j) { + // Ignore a score which has already been processed. + if (visited[j]) { + continue; + } + // Extract the data for the current score. + var _b = scores[j], item_1 = _b.item, labelIndices = _b.labelIndices; + // Ignore an item with a different category. + if (item_1.category !== category) { + continue; + } + // Create the item result for the score. + results.push({ type: 'item', item: item_1, indices: labelIndices }); + // Mark the score as processed. + visited[j] = true; + } + } + // Return the final results. + return results; + } + /** + * A concrete implementation of `CommandPalette.IItem`. + */ + var CommandItem = /** @class */ (function () { + /** + * Construct a new command item. + */ + function CommandItem(commands, options) { + this._commands = commands; + this.category = normalizeCategory(options.category); + this.command = options.command; + this.args = options.args || JSONExt.emptyObject; + this.rank = options.rank !== undefined ? options.rank : Infinity; + } + Object.defineProperty(CommandItem.prototype, "label", { + /** + * The display label for the command item. + */ + get: function () { + return this._commands.label(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "icon", { + /** + * The icon renderer for the command item. + */ + get: function () { + return this._commands.icon(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "iconClass", { + /** + * The icon class for the command item. + */ + get: function () { + return this._commands.iconClass(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "iconLabel", { + /** + * The icon label for the command item. + */ + get: function () { + return this._commands.iconLabel(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "caption", { + /** + * The display caption for the command item. + */ + get: function () { + return this._commands.caption(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "className", { + /** + * The extra class name for the command item. + */ + get: function () { + return this._commands.className(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "dataset", { + /** + * The dataset for the command item. + */ + get: function () { + return this._commands.dataset(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "isEnabled", { + /** + * Whether the command item is enabled. + */ + get: function () { + return this._commands.isEnabled(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "isToggled", { + /** + * Whether the command item is toggled. + */ + get: function () { + return this._commands.isToggled(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "isVisible", { + /** + * Whether the command item is visible. + */ + get: function () { + return this._commands.isVisible(this.command, this.args); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CommandItem.prototype, "keyBinding", { + /** + * The key binding for the command item. + */ + get: function () { + var _a = this, command = _a.command, args = _a.args; + return ArrayExt.findLastValue(this._commands.keyBindings, function (kb) { + return kb.command === command && JSONExt.deepEqual(kb.args, args); + }) || null; + }, + enumerable: true, + configurable: true + }); + return CommandItem; + }()); + })(Private$5$1 || (Private$5$1 = {})); + + /** + * A widget which displays items as a canonical menu. + */ + var Menu = /** @class */ (function (_super) { + __extends$5(Menu, _super); + /** + * Construct a new menu. + * + * @param options - The options for initializing the menu. + */ + function Menu(options) { + var _this = _super.call(this, { node: Private$6$1.createNode() }) || this; + _this._childIndex = -1; + _this._activeIndex = -1; + _this._openTimerID = 0; + _this._closeTimerID = 0; + _this._items = []; + _this._childMenu = null; + _this._parentMenu = null; + _this._aboutToClose = new Signal(_this); + _this._menuRequested = new Signal(_this); + _this.addClass('lm-Menu'); + /* */ + _this.addClass('p-Menu'); + /* */ + _this.setFlag(Widget.Flag.DisallowLayout); + _this.commands = options.commands; + _this.renderer = options.renderer || Menu.defaultRenderer; + return _this; + } + /** + * Dispose of the resources held by the menu. + */ + Menu.prototype.dispose = function () { + this.close(); + this._items.length = 0; + _super.prototype.dispose.call(this); + }; + Object.defineProperty(Menu.prototype, "aboutToClose", { + /** + * A signal emitted just before the menu is closed. + * + * #### Notes + * This signal is emitted when the menu receives a `'close-request'` + * message, just before it removes itself from the DOM. + * + * This signal is not emitted if the menu is already detached from + * the DOM when it receives the `'close-request'` message. + */ + get: function () { + return this._aboutToClose; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "menuRequested", { + /** + * A signal emitted when a new menu is requested by the user. + * + * #### Notes + * This signal is emitted whenever the user presses the right or left + * arrow keys, and a submenu cannot be opened or closed in response. + * + * This signal is useful when implementing menu bars in order to open + * the next or previous menu in response to a user key press. + * + * This signal is only emitted for the root menu in a hierarchy. + */ + get: function () { + return this._menuRequested; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "parentMenu", { + /** + * The parent menu of the menu. + * + * #### Notes + * This is `null` unless the menu is an open submenu. + */ + get: function () { + return this._parentMenu; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "childMenu", { + /** + * The child menu of the menu. + * + * #### Notes + * This is `null` unless the menu has an open submenu. + */ + get: function () { + return this._childMenu; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "rootMenu", { + /** + * The root menu of the menu hierarchy. + */ + get: function () { + var menu = this; + while (menu._parentMenu) { + menu = menu._parentMenu; + } + return menu; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "leafMenu", { + /** + * The leaf menu of the menu hierarchy. + */ + get: function () { + var menu = this; + while (menu._childMenu) { + menu = menu._childMenu; + } + return menu; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "contentNode", { + /** + * The menu content node. + * + * #### Notes + * This is the node which holds the menu item nodes. + * + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-Menu-content')[0]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "activeItem", { + /** + * Get the currently active menu item. + */ + get: function () { + return this._items[this._activeIndex] || null; + }, + /** + * Set the currently active menu item. + * + * #### Notes + * If the item cannot be activated, the item will be set to `null`. + */ + set: function (value) { + this.activeIndex = value ? this._items.indexOf(value) : -1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "activeIndex", { + /** + * Get the index of the currently active menu item. + * + * #### Notes + * This will be `-1` if no menu item is active. + */ + get: function () { + return this._activeIndex; + }, + /** + * Set the index of the currently active menu item. + * + * #### Notes + * If the item cannot be activated, the index will be set to `-1`. + */ + set: function (value) { + // Adjust the value for an out of range index. + if (value < 0 || value >= this._items.length) { + value = -1; + } + // Ensure the item can be activated. + if (value !== -1 && !Private$6$1.canActivate(this._items[value])) { + value = -1; + } + // Bail if the index will not change. + if (this._activeIndex === value) { + return; + } + // Update the active index. + this._activeIndex = value; + // schedule an update of the items. + this.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Menu.prototype, "items", { + /** + * A read-only array of the menu items in the menu. + */ + get: function () { + return this._items; + }, + enumerable: true, + configurable: true + }); + /** + * Activate the next selectable item in the menu. + * + * #### Notes + * If no item is selectable, the index will be set to `-1`. + */ + Menu.prototype.activateNextItem = function () { + var n = this._items.length; + var ai = this._activeIndex; + var start = ai < n - 1 ? ai + 1 : 0; + var stop = start === 0 ? n - 1 : start - 1; + this.activeIndex = ArrayExt.findFirstIndex(this._items, Private$6$1.canActivate, start, stop); + }; + /** + * Activate the previous selectable item in the menu. + * + * #### Notes + * If no item is selectable, the index will be set to `-1`. + */ + Menu.prototype.activatePreviousItem = function () { + var n = this._items.length; + var ai = this._activeIndex; + var start = ai <= 0 ? n - 1 : ai - 1; + var stop = start === n - 1 ? 0 : start + 1; + this.activeIndex = ArrayExt.findLastIndex(this._items, Private$6$1.canActivate, start, stop); + }; + /** + * Trigger the active menu item. + * + * #### Notes + * If the active item is a submenu, it will be opened and the first + * item will be activated. + * + * If the active item is a command, the command will be executed. + * + * If the menu is not attached, this is a no-op. + * + * If there is no active item, this is a no-op. + */ + Menu.prototype.triggerActiveItem = function () { + // Bail if the menu is not attached. + if (!this.isAttached) { + return; + } + // Bail if there is no active item. + var item = this.activeItem; + if (!item) { + return; + } + // Cancel the pending timers. + this._cancelOpenTimer(); + this._cancelCloseTimer(); + // If the item is a submenu, open it. + if (item.type === 'submenu') { + this._openChildMenu(true); + return; + } + // Close the root menu before executing the command. + this.rootMenu.close(); + // Execute the command for the item. + var command = item.command, args = item.args; + if (this.commands.isEnabled(command, args)) { + this.commands.execute(command, args); + } + else { + console.log("Command '" + command + "' is disabled."); + } + }; + /** + * Add a menu item to the end of the menu. + * + * @param options - The options for creating the menu item. + * + * @returns The menu item added to the menu. + */ + Menu.prototype.addItem = function (options) { + return this.insertItem(this._items.length, options); + }; + /** + * Insert a menu item into the menu at the specified index. + * + * @param index - The index at which to insert the item. + * + * @param options - The options for creating the menu item. + * + * @returns The menu item added to the menu. + * + * #### Notes + * The index will be clamped to the bounds of the items. + */ + Menu.prototype.insertItem = function (index, options) { + // Close the menu if it's attached. + if (this.isAttached) { + this.close(); + } + // Reset the active index. + this.activeIndex = -1; + // Clamp the insert index to the array bounds. + var i = Math.max(0, Math.min(index, this._items.length)); + // Create the item for the options. + var item = Private$6$1.createItem(this, options); + // Insert the item into the array. + ArrayExt.insert(this._items, i, item); + // Schedule an update of the items. + this.update(); + // Return the item added to the menu. + return item; + }; + /** + * Remove an item from the menu. + * + * @param item - The item to remove from the menu. + * + * #### Notes + * This is a no-op if the item is not in the menu. + */ + Menu.prototype.removeItem = function (item) { + this.removeItemAt(this._items.indexOf(item)); + }; + /** + * Remove the item at a given index from the menu. + * + * @param index - The index of the item to remove. + * + * #### Notes + * This is a no-op if the index is out of range. + */ + Menu.prototype.removeItemAt = function (index) { + // Close the menu if it's attached. + if (this.isAttached) { + this.close(); + } + // Reset the active index. + this.activeIndex = -1; + // Remove the item from the array. + var item = ArrayExt.removeAt(this._items, index); + // Bail if the index is out of range. + if (!item) { + return; + } + // Schedule an update of the items. + this.update(); + }; + /** + * Remove all menu items from the menu. + */ + Menu.prototype.clearItems = function () { + // Close the menu if it's attached. + if (this.isAttached) { + this.close(); + } + // Reset the active index. + this.activeIndex = -1; + // Bail if there is nothing to remove. + if (this._items.length === 0) { + return; + } + // Clear the items. + this._items.length = 0; + // Schedule an update of the items. + this.update(); + }; + /** + * Open the menu at the specified location. + * + * @param x - The client X coordinate of the menu location. + * + * @param y - The client Y coordinate of the menu location. + * + * @param options - The additional options for opening the menu. + * + * #### Notes + * The menu will be opened at the given location unless it will not + * fully fit on the screen. If it will not fit, it will be adjusted + * to fit naturally on the screen. + * + * This is a no-op if the menu is already attached to the DOM. + */ + Menu.prototype.open = function (x, y, options) { + if (options === void 0) { options = {}; } + // Bail early if the menu is already attached. + if (this.isAttached) { + return; + } + // Extract the position options. + var forceX = options.forceX || false; + var forceY = options.forceY || false; + // Open the menu as a root menu. + Private$6$1.openRootMenu(this, x, y, forceX, forceY); + // Activate the menu to accept keyboard input. + this.activate(); + }; + /** + * Handle the DOM events for the menu. + * + * @param event - The DOM event sent to the menu. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the menu's DOM nodes. It should + * not be called directly by user code. + */ + Menu.prototype.handleEvent = function (event) { + switch (event.type) { + case 'keydown': + this._evtKeyDown(event); + break; + case 'mouseup': + this._evtMouseUp(event); + break; + case 'mousemove': + this._evtMouseMove(event); + break; + case 'mouseenter': + this._evtMouseEnter(event); + break; + case 'mouseleave': + this._evtMouseLeave(event); + break; + case 'mousedown': + this._evtMouseDown(event); + break; + case 'contextmenu': + event.preventDefault(); + event.stopPropagation(); + break; + } + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + Menu.prototype.onBeforeAttach = function (msg) { + this.node.addEventListener('keydown', this); + this.node.addEventListener('mouseup', this); + this.node.addEventListener('mousemove', this); + this.node.addEventListener('mouseenter', this); + this.node.addEventListener('mouseleave', this); + this.node.addEventListener('contextmenu', this); + document.addEventListener('mousedown', this, true); + }; + /** + * A message handler invoked on an `'after-detach'` message. + */ + Menu.prototype.onAfterDetach = function (msg) { + this.node.removeEventListener('keydown', this); + this.node.removeEventListener('mouseup', this); + this.node.removeEventListener('mousemove', this); + this.node.removeEventListener('mouseenter', this); + this.node.removeEventListener('mouseleave', this); + this.node.removeEventListener('contextmenu', this); + document.removeEventListener('mousedown', this, true); + }; + /** + * A message handler invoked on an `'activate-request'` message. + */ + Menu.prototype.onActivateRequest = function (msg) { + if (this.isAttached) { + this.node.focus(); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + Menu.prototype.onUpdateRequest = function (msg) { + var items = this._items; + var renderer = this.renderer; + var activeIndex = this._activeIndex; + var collapsedFlags = Private$6$1.computeCollapsed(items); + var content = new Array(items.length); + for (var i = 0, n = items.length; i < n; ++i) { + var item = items[i]; + var active = i === activeIndex; + var collapsed = collapsedFlags[i]; + content[i] = renderer.renderItem({ item: item, active: active, collapsed: collapsed }); + } + VirtualDOM.render(content, this.contentNode); + }; + /** + * A message handler invoked on a `'close-request'` message. + */ + Menu.prototype.onCloseRequest = function (msg) { + // Cancel the pending timers. + this._cancelOpenTimer(); + this._cancelCloseTimer(); + // Reset the active index. + this.activeIndex = -1; + // Close any open child menu. + var childMenu = this._childMenu; + if (childMenu) { + this._childIndex = -1; + this._childMenu = null; + childMenu._parentMenu = null; + childMenu.close(); + } + // Remove this menu from its parent and activate the parent. + var parentMenu = this._parentMenu; + if (parentMenu) { + this._parentMenu = null; + parentMenu._childIndex = -1; + parentMenu._childMenu = null; + parentMenu.activate(); + } + // Emit the `aboutToClose` signal if the menu is attached. + if (this.isAttached) { + this._aboutToClose.emit(undefined); + } + // Finish closing the menu. + _super.prototype.onCloseRequest.call(this, msg); + }; + /** + * Handle the `'keydown'` event for the menu. + * + * #### Notes + * This listener is attached to the menu node. + */ + Menu.prototype._evtKeyDown = function (event) { + // A menu handles all keydown events. + event.preventDefault(); + event.stopPropagation(); + // Fetch the key code for the event. + var kc = event.keyCode; + // Enter + if (kc === 13) { + this.triggerActiveItem(); + return; + } + // Escape + if (kc === 27) { + this.close(); + return; + } + // Left Arrow + if (kc === 37) { + if (this._parentMenu) { + this.close(); + } + else { + this._menuRequested.emit('previous'); + } + return; + } + // Up Arrow + if (kc === 38) { + this.activatePreviousItem(); + return; + } + // Right Arrow + if (kc === 39) { + var item = this.activeItem; + if (item && item.type === 'submenu') { + this.triggerActiveItem(); + } + else { + this.rootMenu._menuRequested.emit('next'); + } + return; + } + // Down Arrow + if (kc === 40) { + this.activateNextItem(); + return; + } + // Get the pressed key character. + var key = getKeyboardLayout().keyForKeydownEvent(event); + // Bail if the key is not valid. + if (!key) { + return; + } + // Search for the next best matching mnemonic item. + var start = this._activeIndex + 1; + var result = Private$6$1.findMnemonic(this._items, key, start); + // Handle the requested mnemonic based on the search results. + // If exactly one mnemonic is matched, that item is triggered. + // Otherwise, the next mnemonic is activated if available, + // followed by the auto mnemonic if available. + if (result.index !== -1 && !result.multiple) { + this.activeIndex = result.index; + this.triggerActiveItem(); + } + else if (result.index !== -1) { + this.activeIndex = result.index; + } + else if (result.auto !== -1) { + this.activeIndex = result.auto; + } + }; + /** + * Handle the `'mouseup'` event for the menu. + * + * #### Notes + * This listener is attached to the menu node. + */ + Menu.prototype._evtMouseUp = function (event) { + if (event.button !== 0) { + return; + } + event.preventDefault(); + event.stopPropagation(); + this.triggerActiveItem(); + }; + /** + * Handle the `'mousemove'` event for the menu. + * + * #### Notes + * This listener is attached to the menu node. + */ + Menu.prototype._evtMouseMove = function (event) { + // Hit test the item nodes for the item under the mouse. + var index = ArrayExt.findFirstIndex(this.contentNode.children, function (node) { + return ElementExt.hitTest(node, event.clientX, event.clientY); + }); + // Bail early if the mouse is already over the active index. + if (index === this._activeIndex) { + return; + } + // Update and coerce the active index. + this.activeIndex = index; + index = this.activeIndex; + // If the index is the current child index, cancel the timers. + if (index === this._childIndex) { + this._cancelOpenTimer(); + this._cancelCloseTimer(); + return; + } + // If a child menu is currently open, start the close timer. + if (this._childIndex !== -1) { + this._startCloseTimer(); + } + // Cancel the open timer to give a full delay for opening. + this._cancelOpenTimer(); + // Bail if the active item is not a valid submenu item. + var item = this.activeItem; + if (!item || item.type !== 'submenu' || !item.submenu) { + return; + } + // Start the open timer to open the active item submenu. + this._startOpenTimer(); + }; + /** + * Handle the `'mouseenter'` event for the menu. + * + * #### Notes + * This listener is attached to the menu node. + */ + Menu.prototype._evtMouseEnter = function (event) { + // Synchronize the active ancestor items. + for (var menu = this._parentMenu; menu; menu = menu._parentMenu) { + menu._cancelOpenTimer(); + menu._cancelCloseTimer(); + menu.activeIndex = menu._childIndex; + } + }; + /** + * Handle the `'mouseleave'` event for the menu. + * + * #### Notes + * This listener is attached to the menu node. + */ + Menu.prototype._evtMouseLeave = function (event) { + // Cancel any pending submenu opening. + this._cancelOpenTimer(); + // If there is no open child menu, just reset the active index. + if (!this._childMenu) { + this.activeIndex = -1; + return; + } + // If the mouse is over the child menu, cancel the close timer. + var clientX = event.clientX, clientY = event.clientY; + if (ElementExt.hitTest(this._childMenu.node, clientX, clientY)) { + this._cancelCloseTimer(); + return; + } + // Otherwise, reset the active index and start the close timer. + this.activeIndex = -1; + this._startCloseTimer(); + }; + /** + * Handle the `'mousedown'` event for the menu. + * + * #### Notes + * This listener is attached to the document node. + */ + Menu.prototype._evtMouseDown = function (event) { + // Bail if the menu is not a root menu. + if (this._parentMenu) { + return; + } + // The mouse button which is pressed is irrelevant. If the press + // is not on a menu, the entire hierarchy is closed and the event + // is allowed to propagate. This allows other code to act on the + // event, such as focusing the clicked element. + if (Private$6$1.hitTestMenus(this, event.clientX, event.clientY)) { + event.preventDefault(); + event.stopPropagation(); + } + else { + this.close(); + } + }; + /** + * Open the child menu at the active index immediately. + * + * If a different child menu is already open, it will be closed, + * even if the active item is not a valid submenu. + */ + Menu.prototype._openChildMenu = function (activateFirst) { + if (activateFirst === void 0) { activateFirst = false; } + // If the item is not a valid submenu, close the child menu. + var item = this.activeItem; + if (!item || item.type !== 'submenu' || !item.submenu) { + this._closeChildMenu(); + return; + } + // Do nothing if the child menu will not change. + var submenu = item.submenu; + if (submenu === this._childMenu) { + return; + } + // Ensure the current child menu is closed. + this._closeChildMenu(); + // Update the private child state. + this._childMenu = submenu; + this._childIndex = this._activeIndex; + // Set the parent menu reference for the child. + submenu._parentMenu = this; + // Ensure the menu is updated and lookup the item node. + MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest); + var itemNode = this.contentNode.children[this._activeIndex]; + // Open the submenu at the active node. + Private$6$1.openSubmenu(submenu, itemNode); + // Activate the first item if desired. + if (activateFirst) { + submenu.activeIndex = -1; + submenu.activateNextItem(); + } + // Activate the child menu. + submenu.activate(); + }; + /** + * Close the child menu immediately. + * + * This is a no-op if a child menu is not open. + */ + Menu.prototype._closeChildMenu = function () { + if (this._childMenu) { + this._childMenu.close(); + } + }; + /** + * Start the open timer, unless it is already pending. + */ + Menu.prototype._startOpenTimer = function () { + var _this = this; + if (this._openTimerID === 0) { + this._openTimerID = window.setTimeout(function () { + _this._openTimerID = 0; + _this._openChildMenu(); + }, Private$6$1.TIMER_DELAY); + } + }; + /** + * Start the close timer, unless it is already pending. + */ + Menu.prototype._startCloseTimer = function () { + var _this = this; + if (this._closeTimerID === 0) { + this._closeTimerID = window.setTimeout(function () { + _this._closeTimerID = 0; + _this._closeChildMenu(); + }, Private$6$1.TIMER_DELAY); + } + }; + /** + * Cancel the open timer, if the timer is pending. + */ + Menu.prototype._cancelOpenTimer = function () { + if (this._openTimerID !== 0) { + clearTimeout(this._openTimerID); + this._openTimerID = 0; + } + }; + /** + * Cancel the close timer, if the timer is pending. + */ + Menu.prototype._cancelCloseTimer = function () { + if (this._closeTimerID !== 0) { + clearTimeout(this._closeTimerID); + this._closeTimerID = 0; + } + }; + return Menu; + }(Widget)); + /** + * The namespace for the `Menu` class statics. + */ + (function (Menu) { + /** + * The default implementation of `IRenderer`. + * + * #### Notes + * Subclasses are free to reimplement rendering methods as needed. + */ + var Renderer = /** @class */ (function () { + /** + * Construct a new renderer. + */ + function Renderer() { + } + /** + * Render the virtual element for a menu item. + * + * @param data - The data to use for rendering the item. + * + * @returns A virtual element representing the item. + */ + Renderer.prototype.renderItem = function (data) { + var className = this.createItemClass(data); + var dataset = this.createItemDataset(data); + return (h.li({ className: className, dataset: dataset }, this.renderIcon(data), this.renderLabel(data), this.renderShortcut(data), this.renderSubmenu(data))); + }; + /** + * Render the icon element for a menu item. + * + * @param data - The data to use for rendering the icon. + * + * @returns A virtual element representing the item icon. + */ + Renderer.prototype.renderIcon = function (data) { + var className = this.createIconClass(data); + /* */ + if (typeof data.item.icon === 'string') { + return h.div({ className: className }, data.item.iconLabel); + } + /* */ + // if data.item.icon is undefined, it will be ignored + return h.div({ className: className }, data.item.icon, data.item.iconLabel); + }; + /** + * Render the label element for a menu item. + * + * @param data - The data to use for rendering the label. + * + * @returns A virtual element representing the item label. + */ + Renderer.prototype.renderLabel = function (data) { + var content = this.formatLabel(data); + return h.div({ + className: 'lm-Menu-itemLabel' + /* */ + + ' p-Menu-itemLabel' + /* */ + }, content); + }; + /** + * Render the shortcut element for a menu item. + * + * @param data - The data to use for rendering the shortcut. + * + * @returns A virtual element representing the item shortcut. + */ + Renderer.prototype.renderShortcut = function (data) { + var content = this.formatShortcut(data); + return h.div({ + className: 'lm-Menu-itemShortcut' + /* */ + + ' p-Menu-itemShortcut' + /* */ + }, content); + }; + /** + * Render the submenu icon element for a menu item. + * + * @param data - The data to use for rendering the submenu icon. + * + * @returns A virtual element representing the submenu icon. + */ + Renderer.prototype.renderSubmenu = function (data) { + return h.div({ + className: 'lm-Menu-itemSubmenuIcon' + /* */ + + ' p-Menu-itemSubmenuIcon' + /* */ + }); + }; + /** + * Create the class name for the menu item. + * + * @param data - The data to use for the class name. + * + * @returns The full class name for the menu item. + */ + Renderer.prototype.createItemClass = function (data) { + // Setup the initial class name. + var name = 'lm-Menu-item'; + /* */ + name += ' p-Menu-item'; + /* */ + // Add the boolean state classes. + if (!data.item.isEnabled) { + name += ' lm-mod-disabled'; + /* */ + name += ' p-mod-disabled'; + /* */ + } + if (data.item.isToggled) { + name += ' lm-mod-toggled'; + /* */ + name += ' p-mod-toggled'; + /* */ + } + if (!data.item.isVisible) { + name += ' lm-mod-hidden'; + /* */ + name += ' p-mod-hidden'; + /* */ + } + if (data.active) { + name += ' lm-mod-active'; + /* */ + name += ' p-mod-active'; + /* */ + } + if (data.collapsed) { + name += ' lm-mod-collapsed'; + /* */ + name += ' p-mod-collapsed'; + /* */ + } + // Add the extra class. + var extra = data.item.className; + if (extra) { + name += " " + extra; + } + // Return the complete class name. + return name; + }; + /** + * Create the dataset for the menu item. + * + * @param data - The data to use for creating the dataset. + * + * @returns The dataset for the menu item. + */ + Renderer.prototype.createItemDataset = function (data) { + var result; + var _a = data.item, type = _a.type, command = _a.command, dataset = _a.dataset; + if (type === 'command') { + result = __assign$3(__assign$3({}, dataset), { type: type, command: command }); + } + else { + result = __assign$3(__assign$3({}, dataset), { type: type }); + } + return result; + }; + /** + * Create the class name for the menu item icon. + * + * @param data - The data to use for the class name. + * + * @returns The full class name for the item icon. + */ + Renderer.prototype.createIconClass = function (data) { + var name = 'lm-Menu-itemIcon'; + /* */ + name += ' p-Menu-itemIcon'; + /* */ + var extra = data.item.iconClass; + return extra ? name + " " + extra : name; + }; + /** + * Create the render content for the label node. + * + * @param data - The data to use for the label content. + * + * @returns The content to add to the label node. + */ + Renderer.prototype.formatLabel = function (data) { + // Fetch the label text and mnemonic index. + var _a = data.item, label = _a.label, mnemonic = _a.mnemonic; + // If the index is out of range, do not modify the label. + if (mnemonic < 0 || mnemonic >= label.length) { + return label; + } + // Split the label into parts. + var prefix = label.slice(0, mnemonic); + var suffix = label.slice(mnemonic + 1); + var char = label[mnemonic]; + // Wrap the mnemonic character in a span. + var span = h.span({ + className: 'lm-Menu-itemMnemonic' + /* */ + + ' p-Menu-itemMnemonic' + /* */ + }, char); + // Return the content parts. + return [prefix, span, suffix]; + }; + /** + * Create the render content for the shortcut node. + * + * @param data - The data to use for the shortcut content. + * + * @returns The content to add to the shortcut node. + */ + Renderer.prototype.formatShortcut = function (data) { + var kb = data.item.keyBinding; + return kb ? kb.keys.map(CommandRegistry.formatKeystroke).join(', ') : null; + }; + return Renderer; + }()); + Menu.Renderer = Renderer; + /** + * The default `Renderer` instance. + */ + Menu.defaultRenderer = new Renderer(); + })(Menu || (Menu = {})); + /** + * The namespace for the module implementation details. + */ + var Private$6$1; + (function (Private) { + /** + * The ms delay for opening and closing a submenu. + */ + Private.TIMER_DELAY = 300; + /** + * The horizontal pixel overlap for an open submenu. + */ + Private.SUBMENU_OVERLAP = 3; + /** + * Create the DOM node for a menu. + */ + function createNode() { + var node = document.createElement('div'); + var content = document.createElement('ul'); + content.className = 'lm-Menu-content'; + /* */ + content.classList.add('p-Menu-content'); + /* */ + node.appendChild(content); + node.tabIndex = -1; + return node; + } + Private.createNode = createNode; + /** + * Test whether a menu item can be activated. + */ + function canActivate(item) { + return item.type !== 'separator' && item.isEnabled && item.isVisible; + } + Private.canActivate = canActivate; + /** + * Create a new menu item for an owner menu. + */ + function createItem(owner, options) { + return new MenuItem(owner.commands, options); + } + Private.createItem = createItem; + /** + * Hit test a menu hierarchy starting at the given root. + */ + function hitTestMenus(menu, x, y) { + for (var temp = menu; temp; temp = temp.childMenu) { + if (ElementExt.hitTest(temp.node, x, y)) { + return true; + } + } + return false; + } + Private.hitTestMenus = hitTestMenus; + /** + * Compute which extra separator items should be collapsed. + */ + function computeCollapsed(items) { + // Allocate the return array and fill it with `false`. + var result = new Array(items.length); + ArrayExt.fill(result, false); + // Collapse the leading separators. + var k1 = 0; + var n = items.length; + for (; k1 < n; ++k1) { + var item = items[k1]; + if (!item.isVisible) { + continue; + } + if (item.type !== 'separator') { + break; + } + result[k1] = true; + } + // Hide the trailing separators. + var k2 = n - 1; + for (; k2 >= 0; --k2) { + var item = items[k2]; + if (!item.isVisible) { + continue; + } + if (item.type !== 'separator') { + break; + } + result[k2] = true; + } + // Hide the remaining consecutive separators. + var hide = false; + while (++k1 < k2) { + var item = items[k1]; + if (!item.isVisible) { + continue; + } + if (item.type !== 'separator') { + hide = false; + } + else if (hide) { + result[k1] = true; + } + else { + hide = true; + } + } + // Return the resulting flags. + return result; + } + Private.computeCollapsed = computeCollapsed; + /** + * Open a menu as a root menu at the target location. + */ + function openRootMenu(menu, x, y, forceX, forceY) { + // Ensure the menu is updated before attaching and measuring. + MessageLoop.sendMessage(menu, Widget.Msg.UpdateRequest); + // Get the current position and size of the main viewport. + var px = window.pageXOffset; + var py = window.pageYOffset; + var cw = document.documentElement.clientWidth; + var ch = document.documentElement.clientHeight; + // Compute the maximum allowed height for the menu. + var maxHeight = ch - (forceY ? y : 0); + // Fetch common variables. + var node = menu.node; + var style = node.style; + // Clear the menu geometry and prepare it for measuring. + style.top = ''; + style.left = ''; + style.width = ''; + style.height = ''; + style.visibility = 'hidden'; + style.maxHeight = maxHeight + "px"; + // Attach the menu to the document. + Widget.attach(menu, document.body); + // Measure the size of the menu. + var _a = node.getBoundingClientRect(), width = _a.width, height = _a.height; + // Adjust the X position of the menu to fit on-screen. + if (!forceX && (x + width > px + cw)) { + x = px + cw - width; + } + // Adjust the Y position of the menu to fit on-screen. + if (!forceY && (y + height > py + ch)) { + if (y > py + ch) { + y = py + ch - height; + } + else { + y = y - height; + } + } + // Update the position of the menu to the computed position. + style.top = Math.max(0, y) + "px"; + style.left = Math.max(0, x) + "px"; + // Finally, make the menu visible on the screen. + style.visibility = ''; + } + Private.openRootMenu = openRootMenu; + /** + * Open a menu as a submenu using an item node for positioning. + */ + function openSubmenu(submenu, itemNode) { + // Ensure the menu is updated before opening. + MessageLoop.sendMessage(submenu, Widget.Msg.UpdateRequest); + // Get the current position and size of the main viewport. + var px = window.pageXOffset; + var py = window.pageYOffset; + var cw = document.documentElement.clientWidth; + var ch = document.documentElement.clientHeight; + // Compute the maximum allowed height for the menu. + var maxHeight = ch; + // Fetch common variables. + var node = submenu.node; + var style = node.style; + // Clear the menu geometry and prepare it for measuring. + style.top = ''; + style.left = ''; + style.width = ''; + style.height = ''; + style.visibility = 'hidden'; + style.maxHeight = maxHeight + "px"; + // Attach the menu to the document. + Widget.attach(submenu, document.body); + // Measure the size of the menu. + var _a = node.getBoundingClientRect(), width = _a.width, height = _a.height; + // Compute the box sizing for the menu. + var box = ElementExt.boxSizing(submenu.node); + // Get the bounding rect for the target item node. + var itemRect = itemNode.getBoundingClientRect(); + // Compute the target X position. + var x = itemRect.right - Private.SUBMENU_OVERLAP; + // Adjust the X position to fit on the screen. + if (x + width > px + cw) { + x = itemRect.left + Private.SUBMENU_OVERLAP - width; + } + // Compute the target Y position. + var y = itemRect.top - box.borderTop - box.paddingTop; + // Adjust the Y position to fit on the screen. + if (y + height > py + ch) { + y = itemRect.bottom + box.borderBottom + box.paddingBottom - height; + } + // Update the position of the menu to the computed position. + style.top = Math.max(0, y) + "px"; + style.left = Math.max(0, x) + "px"; + // Finally, make the menu visible on the screen. + style.visibility = ''; + } + Private.openSubmenu = openSubmenu; + /** + * Find the best matching mnemonic item. + * + * The search starts at the given index and wraps around. + */ + function findMnemonic(items, key, start) { + // Setup the result variables. + var index = -1; + var auto = -1; + var multiple = false; + // Normalize the key to upper case. + var upperKey = key.toUpperCase(); + // Search the items from the given start index. + for (var i = 0, n = items.length; i < n; ++i) { + // Compute the wrapped index. + var k = (i + start) % n; + // Lookup the item + var item = items[k]; + // Ignore items which cannot be activated. + if (!canActivate(item)) { + continue; + } + // Ignore items with an empty label. + var label = item.label; + if (label.length === 0) { + continue; + } + // Lookup the mnemonic index for the label. + var mn = item.mnemonic; + // Handle a valid mnemonic index. + if (mn >= 0 && mn < label.length) { + if (label[mn].toUpperCase() === upperKey) { + if (index === -1) { + index = k; + } + else { + multiple = true; + } + } + continue; + } + // Finally, handle the auto index if possible. + if (auto === -1 && label[0].toUpperCase() === upperKey) { + auto = k; + } + } + // Return the search results. + return { index: index, multiple: multiple, auto: auto }; + } + Private.findMnemonic = findMnemonic; + /** + * A concrete implementation of `Menu.IItem`. + */ + var MenuItem = /** @class */ (function () { + /** + * Construct a new menu item. + */ + function MenuItem(commands, options) { + this._commands = commands; + this.type = options.type || 'command'; + this.command = options.command || ''; + this.args = options.args || JSONExt.emptyObject; + this.submenu = options.submenu || null; + } + Object.defineProperty(MenuItem.prototype, "label", { + /** + * The display label for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.label(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.label; + } + return ''; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "mnemonic", { + /** + * The mnemonic index for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.mnemonic(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.mnemonic; + } + return -1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "icon", { + /** + * The icon renderer for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.icon(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.icon; + } + /* */ + // alias to icon class if not otherwise defined + return this.iconClass; + /* */ + /* + return undefined; + */ + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "iconClass", { + /** + * The icon class for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.iconClass(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.iconClass; + } + return ''; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "iconLabel", { + /** + * The icon label for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.iconLabel(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.iconLabel; + } + return ''; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "caption", { + /** + * The display caption for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.caption(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.caption; + } + return ''; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "className", { + /** + * The extra class name for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.className(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.className; + } + return ''; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "dataset", { + /** + * The dataset for the menu item. + */ + get: function () { + if (this.type === 'command') { + return this._commands.dataset(this.command, this.args); + } + if (this.type === 'submenu' && this.submenu) { + return this.submenu.title.dataset; + } + return {}; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "isEnabled", { + /** + * Whether the menu item is enabled. + */ + get: function () { + if (this.type === 'command') { + return this._commands.isEnabled(this.command, this.args); + } + if (this.type === 'submenu') { + return this.submenu !== null; + } + return true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "isToggled", { + /** + * Whether the menu item is toggled. + */ + get: function () { + if (this.type === 'command') { + return this._commands.isToggled(this.command, this.args); + } + return false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "isVisible", { + /** + * Whether the menu item is visible. + */ + get: function () { + if (this.type === 'command') { + return this._commands.isVisible(this.command, this.args); + } + if (this.type === 'submenu') { + return this.submenu !== null; + } + return true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuItem.prototype, "keyBinding", { + /** + * The key binding for the menu item. + */ + get: function () { + if (this.type === 'command') { + var _a = this, command_1 = _a.command, args_1 = _a.args; + return ArrayExt.findLastValue(this._commands.keyBindings, function (kb) { + return kb.command === command_1 && JSONExt.deepEqual(kb.args, args_1); + }) || null; + } + return null; + }, + enumerable: true, + configurable: true + }); + return MenuItem; + }()); + })(Private$6$1 || (Private$6$1 = {})); + + /** + * An object which implements a universal context menu. + * + * #### Notes + * The items shown in the context menu are determined by CSS selector + * matching against the DOM hierarchy at the site of the mouse click. + * This is similar in concept to how keyboard shortcuts are matched + * in the command registry. + */ + var ContextMenu = /** @class */ (function () { + /** + * Construct a new context menu. + * + * @param options - The options for initializing the menu. + */ + function ContextMenu(options) { + this._idTick = 0; + this._items = []; + this.menu = new Menu(options); + } + /** + * Add an item to the context menu. + * + * @param options - The options for creating the item. + * + * @returns A disposable which will remove the item from the menu. + */ + ContextMenu.prototype.addItem = function (options) { + var _this = this; + // Create an item from the given options. + var item = Private$7$1.createItem(options, this._idTick++); + // Add the item to the internal array. + this._items.push(item); + // Return a disposable which will remove the item. + return new DisposableDelegate(function () { + ArrayExt.removeFirstOf(_this._items, item); + }); + }; + /** + * Open the context menu in response to a `'contextmenu'` event. + * + * @param event - The `'contextmenu'` event of interest. + * + * @returns `true` if the menu was opened, or `false` if no items + * matched the event and the menu was not opened. + * + * #### Notes + * This method will populate the context menu with items which match + * the propagation path of the event, then open the menu at the mouse + * position indicated by the event. + */ + ContextMenu.prototype.open = function (event) { + var _this = this; + // Clear the current contents of the context menu. + this.menu.clearItems(); + // Bail early if there are no items to match. + if (this._items.length === 0) { + return false; + } + // Find the matching items for the event. + var items = Private$7$1.matchItems(this._items, event); + // Bail if there are no matching items. + if (!items || items.length === 0) { + return false; + } + // Add the filtered items to the menu. + each$1(items, function (item) { _this.menu.addItem(item); }); + // Open the context menu at the current mouse position. + this.menu.open(event.clientX, event.clientY); + // Indicate success. + return true; + }; + return ContextMenu; + }()); + /** + * The namespace for the module implementation details. + */ + var Private$7$1; + (function (Private) { + /** + * Create a normalized context menu item from an options object. + */ + function createItem(options, id) { + var selector = validateSelector(options.selector); + var rank = options.rank !== undefined ? options.rank : Infinity; + return __assign$3(__assign$3({}, options), { selector: selector, rank: rank, id: id }); + } + Private.createItem = createItem; + /** + * Find the items which match a context menu event. + * + * The results are sorted by DOM level, specificity, and rank. + */ + function matchItems(items, event) { + // Look up the target of the event. + var target = event.target; + // Bail if there is no target. + if (!target) { + return null; + } + // Look up the current target of the event. + var currentTarget = event.currentTarget; + // Bail if there is no current target. + if (!currentTarget) { + return null; + } + // There are some third party libraries that cause the `target` to + // be detached from the DOM before lumino can process the event. + // If that happens, search for a new target node by point. If that + // node is still dangling, bail. + if (!currentTarget.contains(target)) { + target = document.elementFromPoint(event.clientX, event.clientY); + if (!target || !currentTarget.contains(target)) { + return null; + } + } + // Set up the result array. + var result = []; + // Copy the items array to allow in-place modification. + var availableItems = items.slice(); + // Walk up the DOM hierarchy searching for matches. + while (target !== null) { + // Set up the match array for this DOM level. + var matches = []; + // Search the remaining items for matches. + for (var i = 0, n = availableItems.length; i < n; ++i) { + // Fetch the item. + var item = availableItems[i]; + // Skip items which are already consumed. + if (!item) { + continue; + } + // Skip items which do not match the element. + if (!Selector.matches(target, item.selector)) { + continue; + } + // Add the matched item to the result for this DOM level. + matches.push(item); + // Mark the item as consumed. + availableItems[i] = null; + } + // Sort the matches for this level and add them to the results. + if (matches.length !== 0) { + matches.sort(itemCmp); + result.push.apply(result, matches); + } + // Stop searching at the limits of the DOM range. + if (target === currentTarget) { + break; + } + // Step to the parent DOM level. + target = target.parentElement; + } + // Return the matched and sorted results. + return result; + } + Private.matchItems = matchItems; + /** + * Validate the selector for a menu item. + * + * This returns the validated selector, or throws if the selector is + * invalid or contains commas. + */ + function validateSelector(selector) { + if (selector.indexOf(',') !== -1) { + throw new Error("Selector cannot contain commas: " + selector); + } + if (!Selector.isValid(selector)) { + throw new Error("Invalid selector: " + selector); + } + return selector; + } + /** + * A sort comparison function for a context menu item. + */ + function itemCmp(a, b) { + // Sort first based on selector specificity. + var s1 = Selector.calculateSpecificity(a.selector); + var s2 = Selector.calculateSpecificity(b.selector); + if (s1 !== s2) { + return s2 - s1; + } + // If specificities are equal, sort based on rank. + var r1 = a.rank; + var r2 = b.rank; + if (r1 !== r2) { + return r1 < r2 ? -1 : 1; // Infinity-safe + } + // When all else fails, sort by item id. + return a.id - b.id; + } + })(Private$7$1 || (Private$7$1 = {})); + + /** + * A layout which provides a flexible docking arrangement. + * + * #### Notes + * The consumer of this layout is responsible for handling all signals + * from the generated tab bars and managing the visibility of widgets + * and tab bars as needed. + */ + var DockLayout = /** @class */ (function (_super) { + __extends$5(DockLayout, _super); + /** + * Construct a new dock layout. + * + * @param options - The options for initializing the layout. + */ + function DockLayout(options) { + var _this = _super.call(this) || this; + _this._spacing = 4; + _this._dirty = false; + _this._root = null; + _this._box = null; + _this._items = new Map(); + _this.renderer = options.renderer; + if (options.spacing !== undefined) { + _this._spacing = Private$8$1.clampSpacing(options.spacing); + } + return _this; + } + /** + * Dispose of the resources held by the layout. + * + * #### Notes + * This will clear and dispose all widgets in the layout. + */ + DockLayout.prototype.dispose = function () { + // Get an iterator over the widgets in the layout. + var widgets = this.iter(); + // Dispose of the layout items. + this._items.forEach(function (item) { item.dispose(); }); + // Clear the layout state before disposing the widgets. + this._box = null; + this._root = null; + this._items.clear(); + // Dispose of the widgets contained in the old layout root. + each$1(widgets, function (widget) { widget.dispose(); }); + // Dispose of the base class. + _super.prototype.dispose.call(this); + }; + Object.defineProperty(DockLayout.prototype, "spacing", { + /** + * Get the inter-element spacing for the dock layout. + */ + get: function () { + return this._spacing; + }, + /** + * Set the inter-element spacing for the dock layout. + */ + set: function (value) { + value = Private$8$1.clampSpacing(value); + if (this._spacing === value) { + return; + } + this._spacing = value; + if (!this.parent) { + return; + } + this.parent.fit(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DockLayout.prototype, "isEmpty", { + /** + * Whether the dock layout is empty. + */ + get: function () { + return this._root === null; + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator over all widgets in the layout. + * + * @returns A new iterator over the widgets in the layout. + * + * #### Notes + * This iterator includes the generated tab bars. + */ + DockLayout.prototype.iter = function () { + return this._root ? this._root.iterAllWidgets() : empty(); + }; + /** + * Create an iterator over the user widgets in the layout. + * + * @returns A new iterator over the user widgets in the layout. + * + * #### Notes + * This iterator does not include the generated tab bars. + */ + DockLayout.prototype.widgets = function () { + return this._root ? this._root.iterUserWidgets() : empty(); + }; + /** + * Create an iterator over the selected widgets in the layout. + * + * @returns A new iterator over the selected user widgets. + * + * #### Notes + * This iterator yields the widgets corresponding to the current tab + * of each tab bar in the layout. + */ + DockLayout.prototype.selectedWidgets = function () { + return this._root ? this._root.iterSelectedWidgets() : empty(); + }; + /** + * Create an iterator over the tab bars in the layout. + * + * @returns A new iterator over the tab bars in the layout. + * + * #### Notes + * This iterator does not include the user widgets. + */ + DockLayout.prototype.tabBars = function () { + return this._root ? this._root.iterTabBars() : empty(); + }; + /** + * Create an iterator over the handles in the layout. + * + * @returns A new iterator over the handles in the layout. + */ + DockLayout.prototype.handles = function () { + return this._root ? this._root.iterHandles() : empty(); + }; + /** + * Move a handle to the given offset position. + * + * @param handle - The handle to move. + * + * @param offsetX - The desired offset X position of the handle. + * + * @param offsetY - The desired offset Y position of the handle. + * + * #### Notes + * If the given handle is not contained in the layout, this is no-op. + * + * The handle will be moved as close as possible to the desired + * position without violating any of the layout constraints. + * + * Only one of the coordinates is used depending on the orientation + * of the handle. This method accepts both coordinates to make it + * easy to invoke from a mouse move event without needing to know + * the handle orientation. + */ + DockLayout.prototype.moveHandle = function (handle, offsetX, offsetY) { + // Bail early if there is no root or if the handle is hidden. + var hidden = handle.classList.contains('lm-mod-hidden'); + /* */ + hidden = hidden || handle.classList.contains('p-mod-hidden'); + /* */ + if (!this._root || hidden) { + return; + } + // Lookup the split node for the handle. + var data = this._root.findSplitNode(handle); + if (!data) { + return; + } + // Compute the desired delta movement for the handle. + var delta; + if (data.node.orientation === 'horizontal') { + delta = offsetX - handle.offsetLeft; + } + else { + delta = offsetY - handle.offsetTop; + } + // Bail if there is no handle movement. + if (delta === 0) { + return; + } + // Prevent sibling resizing unless needed. + data.node.holdSizes(); + // Adjust the sizers to reflect the handle movement. + BoxEngine.adjust(data.node.sizers, data.index, delta); + // Update the layout of the widgets. + if (this.parent) { + this.parent.update(); + } + }; + /** + * Save the current configuration of the dock layout. + * + * @returns A new config object for the current layout state. + * + * #### Notes + * The return value can be provided to the `restoreLayout` method + * in order to restore the layout to its current configuration. + */ + DockLayout.prototype.saveLayout = function () { + // Bail early if there is no root. + if (!this._root) { + return { main: null }; + } + // Hold the current sizes in the layout tree. + this._root.holdAllSizes(); + // Return the layout config. + return { main: this._root.createConfig() }; + }; + /** + * Restore the layout to a previously saved configuration. + * + * @param config - The layout configuration to restore. + * + * #### Notes + * Widgets which currently belong to the layout but which are not + * contained in the config will be unparented. + */ + DockLayout.prototype.restoreLayout = function (config) { + var _this = this; + // Create the widget set for validating the config. + var widgetSet = new Set(); + // Normalize the main area config and collect the widgets. + var mainConfig; + if (config.main) { + mainConfig = Private$8$1.normalizeAreaConfig(config.main, widgetSet); + } + else { + mainConfig = null; + } + // Create iterators over the old content. + var oldWidgets = this.widgets(); + var oldTabBars = this.tabBars(); + var oldHandles = this.handles(); + // Clear the root before removing the old content. + this._root = null; + // Unparent the old widgets which are not in the new config. + each$1(oldWidgets, function (widget) { + if (!widgetSet.has(widget)) { + widget.parent = null; + } + }); + // Dispose of the old tab bars. + each$1(oldTabBars, function (tabBar) { + tabBar.dispose(); + }); + // Remove the old handles. + each$1(oldHandles, function (handle) { + if (handle.parentNode) { + handle.parentNode.removeChild(handle); + } + }); + // Reparent the new widgets to the current parent. + widgetSet.forEach(function (widget) { + widget.parent = _this.parent; + }); + // Create the root node for the new config. + if (mainConfig) { + this._root = Private$8$1.realizeAreaConfig(mainConfig, { + createTabBar: function () { return _this._createTabBar(); }, + createHandle: function () { return _this._createHandle(); } + }); + } + else { + this._root = null; + } + // If there is no parent, there is nothing more to do. + if (!this.parent) { + return; + } + // Attach the new widgets to the parent. + widgetSet.forEach(function (widget) { + _this.attachWidget(widget); + }); + // Post a fit request to the parent. + this.parent.fit(); + }; + /** + * Add a widget to the dock layout. + * + * @param widget - The widget to add to the dock layout. + * + * @param options - The additional options for adding the widget. + * + * #### Notes + * The widget will be moved if it is already contained in the layout. + * + * An error will be thrown if the reference widget is invalid. + */ + DockLayout.prototype.addWidget = function (widget, options) { + if (options === void 0) { options = {}; } + // Parse the options. + var ref = options.ref || null; + var mode = options.mode || 'tab-after'; + // Find the tab node which holds the reference widget. + var refNode = null; + if (this._root && ref) { + refNode = this._root.findTabNode(ref); + } + // Throw an error if the reference widget is invalid. + if (ref && !refNode) { + throw new Error('Reference widget is not in the layout.'); + } + // Reparent the widget to the current layout parent. + widget.parent = this.parent; + // Insert the widget according to the insert mode. + switch (mode) { + case 'tab-after': + this._insertTab(widget, ref, refNode, true); + break; + case 'tab-before': + this._insertTab(widget, ref, refNode, false); + break; + case 'split-top': + this._insertSplit(widget, ref, refNode, 'vertical', false); + break; + case 'split-left': + this._insertSplit(widget, ref, refNode, 'horizontal', false); + break; + case 'split-right': + this._insertSplit(widget, ref, refNode, 'horizontal', true); + break; + case 'split-bottom': + this._insertSplit(widget, ref, refNode, 'vertical', true); + break; + } + // Do nothing else if there is no parent widget. + if (!this.parent) { + return; + } + // Ensure the widget is attached to the parent widget. + this.attachWidget(widget); + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * Remove a widget from the layout. + * + * @param widget - The widget to remove from the layout. + * + * #### Notes + * A widget is automatically removed from the layout when its `parent` + * is set to `null`. This method should only be invoked directly when + * removing a widget from a layout which has yet to be installed on a + * parent widget. + * + * This method does *not* modify the widget's `parent`. + */ + DockLayout.prototype.removeWidget = function (widget) { + // Remove the widget from its current layout location. + this._removeWidget(widget); + // Do nothing else if there is no parent widget. + if (!this.parent) { + return; + } + // Detach the widget from the parent widget. + this.detachWidget(widget); + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * Find the tab area which contains the given client position. + * + * @param clientX - The client X position of interest. + * + * @param clientY - The client Y position of interest. + * + * @returns The geometry of the tab area at the given position, or + * `null` if there is no tab area at the given position. + */ + DockLayout.prototype.hitTestTabAreas = function (clientX, clientY) { + // Bail early if hit testing cannot produce valid results. + if (!this._root || !this.parent || !this.parent.isVisible) { + return null; + } + // Ensure the parent box sizing data is computed. + if (!this._box) { + this._box = ElementExt.boxSizing(this.parent.node); + } + // Convert from client to local coordinates. + var rect = this.parent.node.getBoundingClientRect(); + var x = clientX - rect.left - this._box.borderLeft; + var y = clientY - rect.top - this._box.borderTop; + // Find the tab layout node at the local position. + var tabNode = this._root.hitTestTabNodes(x, y); + // Bail if a tab layout node was not found. + if (!tabNode) { + return null; + } + // Extract the data from the tab node. + var tabBar = tabNode.tabBar, top = tabNode.top, left = tabNode.left, width = tabNode.width, height = tabNode.height; + // Compute the right and bottom edges of the tab area. + var borderWidth = this._box.borderLeft + this._box.borderRight; + var borderHeight = this._box.borderTop + this._box.borderBottom; + var right = rect.width - borderWidth - (left + width); + var bottom = rect.height - borderHeight - (top + height); + // Return the hit test results. + return { tabBar: tabBar, x: x, y: y, top: top, left: left, right: right, bottom: bottom, width: width, height: height }; + }; + /** + * Perform layout initialization which requires the parent widget. + */ + DockLayout.prototype.init = function () { + var _this = this; + // Perform superclass initialization. + _super.prototype.init.call(this); + // Attach each widget to the parent. + each$1(this, function (widget) { _this.attachWidget(widget); }); + // Attach each handle to the parent. + each$1(this.handles(), function (handle) { _this.parent.node.appendChild(handle); }); + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * Attach the widget to the layout parent widget. + * + * @param widget - The widget to attach to the parent. + * + * #### Notes + * This is a no-op if the widget is already attached. + */ + DockLayout.prototype.attachWidget = function (widget) { + // Do nothing if the widget is already attached. + if (this.parent.node === widget.node.parentNode) { + return; + } + // Create the layout item for the widget. + this._items.set(widget, new LayoutItem(widget)); + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Add the widget's node to the parent. + this.parent.node.appendChild(widget.node); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + }; + /** + * Detach the widget from the layout parent widget. + * + * @param widget - The widget to detach from the parent. + * + * #### Notes + * This is a no-op if the widget is not attached. + */ + DockLayout.prototype.detachWidget = function (widget) { + // Do nothing if the widget is not attached. + if (this.parent.node !== widget.node.parentNode) { + return; + } + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget's node from the parent. + this.parent.node.removeChild(widget.node); + // Send an `'after-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + // Delete the layout item for the widget. + var item = this._items.get(widget); + if (item) { + this._items.delete(widget); + item.dispose(); + } + }; + /** + * A message handler invoked on a `'before-show'` message. + */ + DockLayout.prototype.onBeforeShow = function (msg) { + _super.prototype.onBeforeShow.call(this, msg); + this.parent.update(); + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + DockLayout.prototype.onBeforeAttach = function (msg) { + _super.prototype.onBeforeAttach.call(this, msg); + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-shown'` message. + */ + DockLayout.prototype.onChildShown = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-hidden'` message. + */ + DockLayout.prototype.onChildHidden = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'resize'` message. + */ + DockLayout.prototype.onResize = function (msg) { + if (this.parent.isVisible) { + this._update(msg.width, msg.height); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + DockLayout.prototype.onUpdateRequest = function (msg) { + if (this.parent.isVisible) { + this._update(-1, -1); + } + }; + /** + * A message handler invoked on a `'fit-request'` message. + */ + DockLayout.prototype.onFitRequest = function (msg) { + if (this.parent.isAttached) { + this._fit(); + } + }; + /** + * Remove the specified widget from the layout structure. + * + * #### Notes + * This is a no-op if the widget is not in the layout tree. + * + * This does not detach the widget from the parent node. + */ + DockLayout.prototype._removeWidget = function (widget) { + // Bail early if there is no layout root. + if (!this._root) { + return; + } + // Find the tab node which contains the given widget. + var tabNode = this._root.findTabNode(widget); + // Bail early if the tab node is not found. + if (!tabNode) { + return; + } + // If there are multiple tabs, just remove the widget's tab. + if (tabNode.tabBar.titles.length > 1) { + tabNode.tabBar.removeTab(widget.title); + return; + } + // Otherwise, the tab node needs to be removed... + // Dispose the tab bar. + tabNode.tabBar.dispose(); + // Handle the case where the tab node is the root. + if (this._root === tabNode) { + this._root = null; + return; + } + // Otherwise, remove the tab node from its parent... + // Prevent widget resizing unless needed. + this._root.holdAllSizes(); + // Clear the parent reference on the tab node. + var splitNode = tabNode.parent; + tabNode.parent = null; + // Remove the tab node from its parent split node. + var i = ArrayExt.removeFirstOf(splitNode.children, tabNode); + var handle = ArrayExt.removeAt(splitNode.handles, i); + ArrayExt.removeAt(splitNode.sizers, i); + // Remove the handle from its parent DOM node. + if (handle.parentNode) { + handle.parentNode.removeChild(handle); + } + // If there are multiple children, just update the handles. + if (splitNode.children.length > 1) { + splitNode.syncHandles(); + return; + } + // Otherwise, the split node also needs to be removed... + // Clear the parent reference on the split node. + var maybeParent = splitNode.parent; + splitNode.parent = null; + // Lookup the remaining child node and handle. + var childNode = splitNode.children[0]; + var childHandle = splitNode.handles[0]; + // Clear the split node data. + splitNode.children.length = 0; + splitNode.handles.length = 0; + splitNode.sizers.length = 0; + // Remove the child handle from its parent node. + if (childHandle.parentNode) { + childHandle.parentNode.removeChild(childHandle); + } + // Handle the case where the split node is the root. + if (this._root === splitNode) { + childNode.parent = null; + this._root = childNode; + return; + } + // Otherwise, move the child node to the parent node... + var parentNode = maybeParent; + // Lookup the index of the split node. + var j = parentNode.children.indexOf(splitNode); + // Handle the case where the child node is a tab node. + if (childNode instanceof Private$8$1.TabLayoutNode) { + childNode.parent = parentNode; + parentNode.children[j] = childNode; + return; + } + // Remove the split data from the parent. + var splitHandle = ArrayExt.removeAt(parentNode.handles, j); + ArrayExt.removeAt(parentNode.children, j); + ArrayExt.removeAt(parentNode.sizers, j); + // Remove the handle from its parent node. + if (splitHandle.parentNode) { + splitHandle.parentNode.removeChild(splitHandle); + } + // The child node and the split parent node will have the same + // orientation. Merge the grand-children with the parent node. + for (var i_1 = 0, n = childNode.children.length; i_1 < n; ++i_1) { + var gChild = childNode.children[i_1]; + var gHandle = childNode.handles[i_1]; + var gSizer = childNode.sizers[i_1]; + ArrayExt.insert(parentNode.children, j + i_1, gChild); + ArrayExt.insert(parentNode.handles, j + i_1, gHandle); + ArrayExt.insert(parentNode.sizers, j + i_1, gSizer); + gChild.parent = parentNode; + } + // Clear the child node. + childNode.children.length = 0; + childNode.handles.length = 0; + childNode.sizers.length = 0; + childNode.parent = null; + // Sync the handles on the parent node. + parentNode.syncHandles(); + }; + /** + * Insert a widget next to an existing tab. + * + * #### Notes + * This does not attach the widget to the parent widget. + */ + DockLayout.prototype._insertTab = function (widget, ref, refNode, after) { + // Do nothing if the tab is inserted next to itself. + if (widget === ref) { + return; + } + // Create the root if it does not exist. + if (!this._root) { + var tabNode = new Private$8$1.TabLayoutNode(this._createTabBar()); + tabNode.tabBar.addTab(widget.title); + this._root = tabNode; + return; + } + // Use the first tab node as the ref node if needed. + if (!refNode) { + refNode = this._root.findFirstTabNode(); + } + // If the widget is not contained in the ref node, ensure it is + // removed from the layout and hidden before being added again. + if (refNode.tabBar.titles.indexOf(widget.title) === -1) { + this._removeWidget(widget); + widget.hide(); + } + // Lookup the target index for inserting the tab. + var index; + if (ref) { + index = refNode.tabBar.titles.indexOf(ref.title); + } + else { + index = refNode.tabBar.currentIndex; + } + // Insert the widget's tab relative to the target index. + refNode.tabBar.insertTab(index + (after ? 1 : 0), widget.title); + }; + /** + * Insert a widget as a new split area. + * + * #### Notes + * This does not attach the widget to the parent widget. + */ + DockLayout.prototype._insertSplit = function (widget, ref, refNode, orientation, after) { + // Do nothing if there is no effective split. + if (widget === ref && refNode && refNode.tabBar.titles.length === 1) { + return; + } + // Ensure the widget is removed from the current layout. + this._removeWidget(widget); + // Create the tab layout node to hold the widget. + var tabNode = new Private$8$1.TabLayoutNode(this._createTabBar()); + tabNode.tabBar.addTab(widget.title); + // Set the root if it does not exist. + if (!this._root) { + this._root = tabNode; + return; + } + // If the ref node parent is null, split the root. + if (!refNode || !refNode.parent) { + // Ensure the root is split with the correct orientation. + var root = this._splitRoot(orientation); + // Determine the insert index for the new tab node. + var i_2 = after ? root.children.length : 0; + // Normalize the split node. + root.normalizeSizes(); + // Create the sizer for new tab node. + var sizer = Private$8$1.createSizer(refNode ? 1 : Private$8$1.GOLDEN_RATIO); + // Insert the tab node sized to the golden ratio. + ArrayExt.insert(root.children, i_2, tabNode); + ArrayExt.insert(root.sizers, i_2, sizer); + ArrayExt.insert(root.handles, i_2, this._createHandle()); + tabNode.parent = root; + // Re-normalize the split node to maintain the ratios. + root.normalizeSizes(); + // Finally, synchronize the visibility of the handles. + root.syncHandles(); + return; + } + // Lookup the split node for the ref widget. + var splitNode = refNode.parent; + // If the split node already had the correct orientation, + // the widget can be inserted into the split node directly. + if (splitNode.orientation === orientation) { + // Find the index of the ref node. + var i_3 = splitNode.children.indexOf(refNode); + // Normalize the split node. + splitNode.normalizeSizes(); + // Consume half the space for the insert location. + var s = splitNode.sizers[i_3].sizeHint /= 2; + // Insert the tab node sized to the other half. + var j_1 = i_3 + (after ? 1 : 0); + ArrayExt.insert(splitNode.children, j_1, tabNode); + ArrayExt.insert(splitNode.sizers, j_1, Private$8$1.createSizer(s)); + ArrayExt.insert(splitNode.handles, j_1, this._createHandle()); + tabNode.parent = splitNode; + // Finally, synchronize the visibility of the handles. + splitNode.syncHandles(); + return; + } + // Remove the ref node from the split node. + var i = ArrayExt.removeFirstOf(splitNode.children, refNode); + // Create a new normalized split node for the children. + var childNode = new Private$8$1.SplitLayoutNode(orientation); + childNode.normalized = true; + // Add the ref node sized to half the space. + childNode.children.push(refNode); + childNode.sizers.push(Private$8$1.createSizer(0.5)); + childNode.handles.push(this._createHandle()); + refNode.parent = childNode; + // Add the tab node sized to the other half. + var j = after ? 1 : 0; + ArrayExt.insert(childNode.children, j, tabNode); + ArrayExt.insert(childNode.sizers, j, Private$8$1.createSizer(0.5)); + ArrayExt.insert(childNode.handles, j, this._createHandle()); + tabNode.parent = childNode; + // Synchronize the visibility of the handles. + childNode.syncHandles(); + // Finally, add the new child node to the original split node. + ArrayExt.insert(splitNode.children, i, childNode); + childNode.parent = splitNode; + }; + /** + * Ensure the root is a split node with the given orientation. + */ + DockLayout.prototype._splitRoot = function (orientation) { + // Bail early if the root already meets the requirements. + var oldRoot = this._root; + if (oldRoot instanceof Private$8$1.SplitLayoutNode) { + if (oldRoot.orientation === orientation) { + return oldRoot; + } + } + // Create a new root node with the specified orientation. + var newRoot = this._root = new Private$8$1.SplitLayoutNode(orientation); + // Add the old root to the new root. + if (oldRoot) { + newRoot.children.push(oldRoot); + newRoot.sizers.push(Private$8$1.createSizer(0)); + newRoot.handles.push(this._createHandle()); + oldRoot.parent = newRoot; + } + // Return the new root as a convenience. + return newRoot; + }; + /** + * Fit the layout to the total size required by the widgets. + */ + DockLayout.prototype._fit = function () { + // Set up the computed minimum size. + var minW = 0; + var minH = 0; + // Update the size limits for the layout tree. + if (this._root) { + var limits = this._root.fit(this._spacing, this._items); + minW = limits.minWidth; + minH = limits.minHeight; + } + // Update the box sizing and add it to the computed min size. + var box = this._box = ElementExt.boxSizing(this.parent.node); + minW += box.horizontalSum; + minH += box.verticalSum; + // Update the parent's min size constraints. + var style = this.parent.node.style; + style.minWidth = minW + "px"; + style.minHeight = minH + "px"; + // Set the dirty flag to ensure only a single update occurs. + this._dirty = true; + // Notify the ancestor that it should fit immediately. This may + // cause a resize of the parent, fulfilling the required update. + if (this.parent.parent) { + MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest); + } + // If the dirty flag is still set, the parent was not resized. + // Trigger the required update on the parent widget immediately. + if (this._dirty) { + MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest); + } + }; + /** + * Update the layout position and size of the widgets. + * + * The parent offset dimensions should be `-1` if unknown. + */ + DockLayout.prototype._update = function (offsetWidth, offsetHeight) { + // Clear the dirty flag to indicate the update occurred. + this._dirty = false; + // Bail early if there is no root layout node. + if (!this._root) { + return; + } + // Measure the parent if the offset dimensions are unknown. + if (offsetWidth < 0) { + offsetWidth = this.parent.node.offsetWidth; + } + if (offsetHeight < 0) { + offsetHeight = this.parent.node.offsetHeight; + } + // Ensure the parent box sizing data is computed. + if (!this._box) { + this._box = ElementExt.boxSizing(this.parent.node); + } + // Compute the actual layout bounds adjusted for border and padding. + var x = this._box.paddingTop; + var y = this._box.paddingLeft; + var width = offsetWidth - this._box.horizontalSum; + var height = offsetHeight - this._box.verticalSum; + // Update the geometry of the layout tree. + this._root.update(x, y, width, height, this._spacing, this._items); + }; + /** + * Create a new tab bar for use by the dock layout. + * + * #### Notes + * The tab bar will be attached to the parent if it exists. + */ + DockLayout.prototype._createTabBar = function () { + // Create the tab bar using the renderer. + var tabBar = this.renderer.createTabBar(); + // Enforce necessary tab bar behavior. + tabBar.orientation = 'horizontal'; + // Reparent and attach the tab bar to the parent if possible. + if (this.parent) { + tabBar.parent = this.parent; + this.attachWidget(tabBar); + } + // Return the initialized tab bar. + return tabBar; + }; + /** + * Create a new handle for the dock layout. + * + * #### Notes + * The handle will be attached to the parent if it exists. + */ + DockLayout.prototype._createHandle = function () { + // Create the handle using the renderer. + var handle = this.renderer.createHandle(); + // Initialize the handle layout behavior. + var style = handle.style; + style.position = 'absolute'; + style.top = '0'; + style.left = '0'; + style.width = '0'; + style.height = '0'; + // Attach the handle to the parent if it exists. + if (this.parent) { + this.parent.node.appendChild(handle); + } + // Return the initialized handle. + return handle; + }; + return DockLayout; + }(Layout)); + /** + * The namespace for the module implementation details. + */ + var Private$8$1; + (function (Private) { + /** + * A fraction used for sizing root panels; ~= `1 / golden_ratio`. + */ + Private.GOLDEN_RATIO = 0.618; + /** + * Clamp a spacing value to an integer >= 0. + */ + function clampSpacing(value) { + return Math.max(0, Math.floor(value)); + } + Private.clampSpacing = clampSpacing; + /** + * Create a box sizer with an initial size hint. + */ + function createSizer(hint) { + var sizer = new BoxSizer(); + sizer.sizeHint = hint; + sizer.size = hint; + return sizer; + } + Private.createSizer = createSizer; + /** + * Normalize an area config object and collect the visited widgets. + */ + function normalizeAreaConfig(config, widgetSet) { + var result; + if (config.type === 'tab-area') { + result = normalizeTabAreaConfig(config, widgetSet); + } + else { + result = normalizeSplitAreaConfig(config, widgetSet); + } + return result; + } + Private.normalizeAreaConfig = normalizeAreaConfig; + /** + * Convert a normalized area config into a layout tree. + */ + function realizeAreaConfig(config, renderer) { + var node; + if (config.type === 'tab-area') { + node = realizeTabAreaConfig(config, renderer); + } + else { + node = realizeSplitAreaConfig(config, renderer); + } + return node; + } + Private.realizeAreaConfig = realizeAreaConfig; + /** + * A layout node which holds the data for a tabbed area. + */ + var TabLayoutNode = /** @class */ (function () { + /** + * Construct a new tab layout node. + * + * @param tabBar - The tab bar to use for the layout node. + */ + function TabLayoutNode(tabBar) { + /** + * The parent of the layout node. + */ + this.parent = null; + this._top = 0; + this._left = 0; + this._width = 0; + this._height = 0; + var tabSizer = new BoxSizer(); + var widgetSizer = new BoxSizer(); + tabSizer.stretch = 0; + widgetSizer.stretch = 1; + this.tabBar = tabBar; + this.sizers = [tabSizer, widgetSizer]; + } + Object.defineProperty(TabLayoutNode.prototype, "top", { + /** + * The most recent value for the `top` edge of the layout box. + */ + get: function () { + return this._top; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabLayoutNode.prototype, "left", { + /** + * The most recent value for the `left` edge of the layout box. + */ + get: function () { + return this._left; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabLayoutNode.prototype, "width", { + /** + * The most recent value for the `width` of the layout box. + */ + get: function () { + return this._width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabLayoutNode.prototype, "height", { + /** + * The most recent value for the `height` of the layout box. + */ + get: function () { + return this._height; + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator for all widgets in the layout tree. + */ + TabLayoutNode.prototype.iterAllWidgets = function () { + return chain$1(once$1(this.tabBar), this.iterUserWidgets()); + }; + /** + * Create an iterator for the user widgets in the layout tree. + */ + TabLayoutNode.prototype.iterUserWidgets = function () { + return map$1(this.tabBar.titles, function (title) { return title.owner; }); + }; + /** + * Create an iterator for the selected widgets in the layout tree. + */ + TabLayoutNode.prototype.iterSelectedWidgets = function () { + var title = this.tabBar.currentTitle; + return title ? once$1(title.owner) : empty(); + }; + /** + * Create an iterator for the tab bars in the layout tree. + */ + TabLayoutNode.prototype.iterTabBars = function () { + return once$1(this.tabBar); + }; + /** + * Create an iterator for the handles in the layout tree. + */ + TabLayoutNode.prototype.iterHandles = function () { + return empty(); + }; + /** + * Find the tab layout node which contains the given widget. + */ + TabLayoutNode.prototype.findTabNode = function (widget) { + return this.tabBar.titles.indexOf(widget.title) !== -1 ? this : null; + }; + /** + * Find the split layout node which contains the given handle. + */ + TabLayoutNode.prototype.findSplitNode = function (handle) { + return null; + }; + /** + * Find the first tab layout node in a layout tree. + */ + TabLayoutNode.prototype.findFirstTabNode = function () { + return this; + }; + /** + * Find the tab layout node which contains the local point. + */ + TabLayoutNode.prototype.hitTestTabNodes = function (x, y) { + if (x < this._left || x >= this._left + this._width) { + return null; + } + if (y < this._top || y >= this._top + this._height) { + return null; + } + return this; + }; + /** + * Create a configuration object for the layout tree. + */ + TabLayoutNode.prototype.createConfig = function () { + var widgets = this.tabBar.titles.map(function (title) { return title.owner; }); + var currentIndex = this.tabBar.currentIndex; + return { type: 'tab-area', widgets: widgets, currentIndex: currentIndex }; + }; + /** + * Recursively hold all of the sizes in the layout tree. + * + * This ignores the sizers of tab layout nodes. + */ + TabLayoutNode.prototype.holdAllSizes = function () { + return; + }; + /** + * Fit the layout tree. + */ + TabLayoutNode.prototype.fit = function (spacing, items) { + // Set up the limit variables. + var minWidth = 0; + var minHeight = 0; + var maxWidth = Infinity; + var maxHeight = Infinity; + // Lookup the tab bar layout item. + var tabBarItem = items.get(this.tabBar); + // Lookup the widget layout item. + var current = this.tabBar.currentTitle; + var widgetItem = current ? items.get(current.owner) : undefined; + // Lookup the tab bar and widget sizers. + var _a = this.sizers, tabBarSizer = _a[0], widgetSizer = _a[1]; + // Update the tab bar limits. + if (tabBarItem) { + tabBarItem.fit(); + } + // Update the widget limits. + if (widgetItem) { + widgetItem.fit(); + } + // Update the results and sizer for the tab bar. + if (tabBarItem && !tabBarItem.isHidden) { + minWidth = Math.max(minWidth, tabBarItem.minWidth); + minHeight += tabBarItem.minHeight; + tabBarSizer.minSize = tabBarItem.minHeight; + tabBarSizer.maxSize = tabBarItem.maxHeight; + } + else { + tabBarSizer.minSize = 0; + tabBarSizer.maxSize = 0; + } + // Update the results and sizer for the current widget. + if (widgetItem && !widgetItem.isHidden) { + minWidth = Math.max(minWidth, widgetItem.minWidth); + minHeight += widgetItem.minHeight; + widgetSizer.minSize = widgetItem.minHeight; + widgetSizer.maxSize = Infinity; + } + else { + widgetSizer.minSize = 0; + widgetSizer.maxSize = Infinity; + } + // Return the computed size limits for the layout node. + return { minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight }; + }; + /** + * Update the layout tree. + */ + TabLayoutNode.prototype.update = function (left, top, width, height, spacing, items) { + // Update the layout box values. + this._top = top; + this._left = left; + this._width = width; + this._height = height; + // Lookup the tab bar layout item. + var tabBarItem = items.get(this.tabBar); + // Lookup the widget layout item. + var current = this.tabBar.currentTitle; + var widgetItem = current ? items.get(current.owner) : undefined; + // Distribute the layout space to the sizers. + BoxEngine.calc(this.sizers, height); + // Update the tab bar item using the computed size. + if (tabBarItem && !tabBarItem.isHidden) { + var size = this.sizers[0].size; + tabBarItem.update(left, top, width, size); + top += size; + } + // Layout the widget using the computed size. + if (widgetItem && !widgetItem.isHidden) { + var size = this.sizers[1].size; + widgetItem.update(left, top, width, size); + } + }; + return TabLayoutNode; + }()); + Private.TabLayoutNode = TabLayoutNode; + /** + * A layout node which holds the data for a split area. + */ + var SplitLayoutNode = /** @class */ (function () { + /** + * Construct a new split layout node. + * + * @param orientation - The orientation of the node. + */ + function SplitLayoutNode(orientation) { + /** + * The parent of the layout node. + */ + this.parent = null; + /** + * Whether the sizers have been normalized. + */ + this.normalized = false; + /** + * The child nodes for the split node. + */ + this.children = []; + /** + * The box sizers for the layout children. + */ + this.sizers = []; + /** + * The handles for the layout children. + */ + this.handles = []; + this.orientation = orientation; + } + /** + * Create an iterator for all widgets in the layout tree. + */ + SplitLayoutNode.prototype.iterAllWidgets = function () { + var children = map$1(this.children, function (child) { return child.iterAllWidgets(); }); + return new ChainIterator(children); + }; + /** + * Create an iterator for the user widgets in the layout tree. + */ + SplitLayoutNode.prototype.iterUserWidgets = function () { + var children = map$1(this.children, function (child) { return child.iterUserWidgets(); }); + return new ChainIterator(children); + }; + /** + * Create an iterator for the selected widgets in the layout tree. + */ + SplitLayoutNode.prototype.iterSelectedWidgets = function () { + var children = map$1(this.children, function (child) { return child.iterSelectedWidgets(); }); + return new ChainIterator(children); + }; + /** + * Create an iterator for the tab bars in the layout tree. + */ + SplitLayoutNode.prototype.iterTabBars = function () { + var children = map$1(this.children, function (child) { return child.iterTabBars(); }); + return new ChainIterator(children); + }; + /** + * Create an iterator for the handles in the layout tree. + */ + SplitLayoutNode.prototype.iterHandles = function () { + var children = map$1(this.children, function (child) { return child.iterHandles(); }); + return chain$1(this.handles, new ChainIterator(children)); + }; + /** + * Find the tab layout node which contains the given widget. + */ + SplitLayoutNode.prototype.findTabNode = function (widget) { + for (var i = 0, n = this.children.length; i < n; ++i) { + var result = this.children[i].findTabNode(widget); + if (result) { + return result; + } + } + return null; + }; + /** + * Find the split layout node which contains the given handle. + */ + SplitLayoutNode.prototype.findSplitNode = function (handle) { + var index = this.handles.indexOf(handle); + if (index !== -1) { + return { index: index, node: this }; + } + for (var i = 0, n = this.children.length; i < n; ++i) { + var result = this.children[i].findSplitNode(handle); + if (result) { + return result; + } + } + return null; + }; + /** + * Find the first tab layout node in a layout tree. + */ + SplitLayoutNode.prototype.findFirstTabNode = function () { + if (this.children.length === 0) { + return null; + } + return this.children[0].findFirstTabNode(); + }; + /** + * Find the tab layout node which contains the local point. + */ + SplitLayoutNode.prototype.hitTestTabNodes = function (x, y) { + for (var i = 0, n = this.children.length; i < n; ++i) { + var result = this.children[i].hitTestTabNodes(x, y); + if (result) { + return result; + } + } + return null; + }; + /** + * Create a configuration object for the layout tree. + */ + SplitLayoutNode.prototype.createConfig = function () { + var orientation = this.orientation; + var sizes = this.createNormalizedSizes(); + var children = this.children.map(function (child) { return child.createConfig(); }); + return { type: 'split-area', orientation: orientation, children: children, sizes: sizes }; + }; + /** + * Sync the visibility and orientation of the handles. + */ + SplitLayoutNode.prototype.syncHandles = function () { + var _this = this; + each$1(this.handles, function (handle, i) { + handle.setAttribute('data-orientation', _this.orientation); + if (i === _this.handles.length - 1) { + handle.classList.add('lm-mod-hidden'); + /* */ + handle.classList.add('p-mod-hidden'); + /* */ + } + else { + handle.classList.remove('lm-mod-hidden'); + /* */ + handle.classList.remove('p-mod-hidden'); + /* */ + } + }); + }; + /** + * Hold the current sizes of the box sizers. + * + * This sets the size hint of each sizer to its current size. + */ + SplitLayoutNode.prototype.holdSizes = function () { + each$1(this.sizers, function (sizer) { sizer.sizeHint = sizer.size; }); + }; + /** + * Recursively hold all of the sizes in the layout tree. + * + * This ignores the sizers of tab layout nodes. + */ + SplitLayoutNode.prototype.holdAllSizes = function () { + each$1(this.children, function (child) { return child.holdAllSizes(); }); + this.holdSizes(); + }; + /** + * Normalize the sizes of the split layout node. + */ + SplitLayoutNode.prototype.normalizeSizes = function () { + // Bail early if the sizers are empty. + var n = this.sizers.length; + if (n === 0) { + return; + } + // Hold the current sizes of the sizers. + this.holdSizes(); + // Compute the sum of the sizes. + var sum = reduce$1(this.sizers, function (v, sizer) { return v + sizer.sizeHint; }, 0); + // Normalize the sizes based on the sum. + if (sum === 0) { + each$1(this.sizers, function (sizer) { + sizer.size = sizer.sizeHint = 1 / n; + }); + } + else { + each$1(this.sizers, function (sizer) { + sizer.size = sizer.sizeHint /= sum; + }); + } + // Mark the sizes as normalized. + this.normalized = true; + }; + /** + * Snap the normalized sizes of the split layout node. + */ + SplitLayoutNode.prototype.createNormalizedSizes = function () { + // Bail early if the sizers are empty. + var n = this.sizers.length; + if (n === 0) { + return []; + } + // Grab the current sizes of the sizers. + var sizes = this.sizers.map(function (sizer) { return sizer.size; }); + // Compute the sum of the sizes. + var sum = reduce$1(sizes, function (v, size) { return v + size; }, 0); + // Normalize the sizes based on the sum. + if (sum === 0) { + each$1(sizes, function (size, i) { sizes[i] = 1 / n; }); + } + else { + each$1(sizes, function (size, i) { sizes[i] = size / sum; }); + } + // Return the normalized sizes. + return sizes; + }; + /** + * Fit the layout tree. + */ + SplitLayoutNode.prototype.fit = function (spacing, items) { + // Compute the required fixed space. + var horizontal = this.orientation === 'horizontal'; + var fixed = Math.max(0, this.children.length - 1) * spacing; + // Set up the limit variables. + var minWidth = horizontal ? fixed : 0; + var minHeight = horizontal ? 0 : fixed; + var maxWidth = Infinity; + var maxHeight = Infinity; + // Fit the children and update the limits. + for (var i = 0, n = this.children.length; i < n; ++i) { + var limits = this.children[i].fit(spacing, items); + if (horizontal) { + minHeight = Math.max(minHeight, limits.minHeight); + minWidth += limits.minWidth; + this.sizers[i].minSize = limits.minWidth; + } + else { + minWidth = Math.max(minWidth, limits.minWidth); + minHeight += limits.minHeight; + this.sizers[i].minSize = limits.minHeight; + } + } + // Return the computed limits for the layout node. + return { minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight }; + }; + /** + * Update the layout tree. + */ + SplitLayoutNode.prototype.update = function (left, top, width, height, spacing, items) { + // Compute the available layout space. + var horizontal = this.orientation === 'horizontal'; + var fixed = Math.max(0, this.children.length - 1) * spacing; + var space = Math.max(0, (horizontal ? width : height) - fixed); + // De-normalize the sizes if needed. + if (this.normalized) { + each$1(this.sizers, function (sizer) { sizer.sizeHint *= space; }); + this.normalized = false; + } + // Distribute the layout space to the sizers. + BoxEngine.calc(this.sizers, space); + // Update the geometry of the child nodes and handles. + for (var i = 0, n = this.children.length; i < n; ++i) { + var child = this.children[i]; + var size = this.sizers[i].size; + var handleStyle = this.handles[i].style; + if (horizontal) { + child.update(left, top, size, height, spacing, items); + left += size; + handleStyle.top = top + "px"; + handleStyle.left = left + "px"; + handleStyle.width = spacing + "px"; + handleStyle.height = height + "px"; + left += spacing; + } + else { + child.update(left, top, width, size, spacing, items); + top += size; + handleStyle.top = top + "px"; + handleStyle.left = left + "px"; + handleStyle.width = width + "px"; + handleStyle.height = spacing + "px"; + top += spacing; + } + } + }; + return SplitLayoutNode; + }()); + Private.SplitLayoutNode = SplitLayoutNode; + /** + * Normalize a tab area config and collect the visited widgets. + */ + function normalizeTabAreaConfig(config, widgetSet) { + // Bail early if there is no content. + if (config.widgets.length === 0) { + return null; + } + // Setup the filtered widgets array. + var widgets = []; + // Filter the config for unique widgets. + each$1(config.widgets, function (widget) { + if (!widgetSet.has(widget)) { + widgetSet.add(widget); + widgets.push(widget); + } + }); + // Bail if there are no effective widgets. + if (widgets.length === 0) { + return null; + } + // Normalize the current index. + var index = config.currentIndex; + if (index !== -1 && (index < 0 || index >= widgets.length)) { + index = 0; + } + // Return a normalized config object. + return { type: 'tab-area', widgets: widgets, currentIndex: index }; + } + /** + * Normalize a split area config and collect the visited widgets. + */ + function normalizeSplitAreaConfig(config, widgetSet) { + // Set up the result variables. + var orientation = config.orientation; + var children = []; + var sizes = []; + // Normalize the config children. + for (var i = 0, n = config.children.length; i < n; ++i) { + // Normalize the child config. + var child = normalizeAreaConfig(config.children[i], widgetSet); + // Ignore an empty child. + if (!child) { + continue; + } + // Add the child or hoist its content as appropriate. + if (child.type === 'tab-area' || child.orientation !== orientation) { + children.push(child); + sizes.push(Math.abs(config.sizes[i] || 0)); + } + else { + children.push.apply(children, child.children); + sizes.push.apply(sizes, child.sizes); + } + } + // Bail if there are no effective children. + if (children.length === 0) { + return null; + } + // If there is only one effective child, return that child. + if (children.length === 1) { + return children[0]; + } + // Return a normalized config object. + return { type: 'split-area', orientation: orientation, children: children, sizes: sizes }; + } + /** + * Convert a normalized tab area config into a layout tree. + */ + function realizeTabAreaConfig(config, renderer) { + // Create the tab bar for the layout node. + var tabBar = renderer.createTabBar(); + // Hide each widget and add it to the tab bar. + each$1(config.widgets, function (widget) { + widget.hide(); + tabBar.addTab(widget.title); + }); + // Set the current index of the tab bar. + tabBar.currentIndex = config.currentIndex; + // Return the new tab layout node. + return new TabLayoutNode(tabBar); + } + /** + * Convert a normalized split area config into a layout tree. + */ + function realizeSplitAreaConfig(config, renderer) { + // Create the split layout node. + var node = new SplitLayoutNode(config.orientation); + // Add each child to the layout node. + each$1(config.children, function (child, i) { + // Create the child data for the layout node. + var childNode = realizeAreaConfig(child, renderer); + var sizer = createSizer(config.sizes[i]); + var handle = renderer.createHandle(); + // Add the child data to the layout node. + node.children.push(childNode); + node.handles.push(handle); + node.sizers.push(sizer); + // Update the parent for the child node. + childNode.parent = node; + }); + // Synchronize the handle state for the layout node. + node.syncHandles(); + // Normalize the sizes for the layout node. + node.normalizeSizes(); + // Return the new layout node. + return node; + } + })(Private$8$1 || (Private$8$1 = {})); + + /** + * A widget which displays titles as a single row or column of tabs. + * + * #### Notes + * If CSS transforms are used to rotate nodes for vertically oriented + * text, then tab dragging will not work correctly. The `tabsMovable` + * property should be set to `false` when rotating nodes from CSS. + */ + var TabBar = /** @class */ (function (_super) { + __extends$5(TabBar, _super); + /** + * Construct a new tab bar. + * + * @param options - The options for initializing the tab bar. + */ + function TabBar(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this, { node: Private$9$1.createNode() }) || this; + _this._currentIndex = -1; + _this._titles = []; + _this._previousTitle = null; + _this._dragData = null; + _this._tabMoved = new Signal(_this); + _this._currentChanged = new Signal(_this); + _this._tabCloseRequested = new Signal(_this); + _this._tabDetachRequested = new Signal(_this); + _this._tabActivateRequested = new Signal(_this); + _this.addClass('lm-TabBar'); + /* */ + _this.addClass('p-TabBar'); + /* */ + _this.setFlag(Widget.Flag.DisallowLayout); + _this.tabsMovable = options.tabsMovable || false; + _this.allowDeselect = options.allowDeselect || false; + _this.insertBehavior = options.insertBehavior || 'select-tab-if-needed'; + _this.removeBehavior = options.removeBehavior || 'select-tab-after'; + _this.renderer = options.renderer || TabBar.defaultRenderer; + _this._orientation = options.orientation || 'horizontal'; + _this.dataset['orientation'] = _this._orientation; + return _this; + } + /** + * Dispose of the resources held by the widget. + */ + TabBar.prototype.dispose = function () { + this._releaseMouse(); + this._titles.length = 0; + this._previousTitle = null; + _super.prototype.dispose.call(this); + }; + Object.defineProperty(TabBar.prototype, "currentChanged", { + /** + * A signal emitted when the current tab is changed. + * + * #### Notes + * This signal is emitted when the currently selected tab is changed + * either through user or programmatic interaction. + * + * Notably, this signal is not emitted when the index of the current + * tab changes due to tabs being inserted, removed, or moved. It is + * only emitted when the actual current tab node is changed. + */ + get: function () { + return this._currentChanged; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "tabMoved", { + /** + * A signal emitted when a tab is moved by the user. + * + * #### Notes + * This signal is emitted when a tab is moved by user interaction. + * + * This signal is not emitted when a tab is moved programmatically. + */ + get: function () { + return this._tabMoved; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "tabActivateRequested", { + /** + * A signal emitted when a tab is clicked by the user. + * + * #### Notes + * If the clicked tab is not the current tab, the clicked tab will be + * made current and the `currentChanged` signal will be emitted first. + * + * This signal is emitted even if the clicked tab is the current tab. + */ + get: function () { + return this._tabActivateRequested; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "tabCloseRequested", { + /** + * A signal emitted when a tab close icon is clicked. + * + * #### Notes + * This signal is not emitted unless the tab title is `closable`. + */ + get: function () { + return this._tabCloseRequested; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "tabDetachRequested", { + /** + * A signal emitted when a tab is dragged beyond the detach threshold. + * + * #### Notes + * This signal is emitted when the user drags a tab with the mouse, + * and mouse is dragged beyond the detach threshold. + * + * The consumer of the signal should call `releaseMouse` and remove + * the tab in order to complete the detach. + * + * This signal is only emitted once per drag cycle. + */ + get: function () { + return this._tabDetachRequested; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "currentTitle", { + /** + * Get the currently selected title. + * + * #### Notes + * This will be `null` if no tab is selected. + */ + get: function () { + return this._titles[this._currentIndex] || null; + }, + /** + * Set the currently selected title. + * + * #### Notes + * If the title does not exist, the title will be set to `null`. + */ + set: function (value) { + this.currentIndex = value ? this._titles.indexOf(value) : -1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "currentIndex", { + /** + * Get the index of the currently selected tab. + * + * #### Notes + * This will be `-1` if no tab is selected. + */ + get: function () { + return this._currentIndex; + }, + /** + * Set the index of the currently selected tab. + * + * #### Notes + * If the value is out of range, the index will be set to `-1`. + */ + set: function (value) { + // Adjust for an out of range index. + if (value < 0 || value >= this._titles.length) { + value = -1; + } + // Bail early if the index will not change. + if (this._currentIndex === value) { + return; + } + // Look up the previous index and title. + var pi = this._currentIndex; + var pt = this._titles[pi] || null; + // Look up the current index and title. + var ci = value; + var ct = this._titles[ci] || null; + // Update the current index and previous title. + this._currentIndex = ci; + this._previousTitle = pt; + // Schedule an update of the tabs. + this.update(); + // Emit the current changed signal. + this._currentChanged.emit({ + previousIndex: pi, previousTitle: pt, + currentIndex: ci, currentTitle: ct + }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "orientation", { + /** + * Get the orientation of the tab bar. + * + * #### Notes + * This controls whether the tabs are arranged in a row or column. + */ + get: function () { + return this._orientation; + }, + /** + * Set the orientation of the tab bar. + * + * #### Notes + * This controls whether the tabs are arranged in a row or column. + */ + set: function (value) { + // Do nothing if the orientation does not change. + if (this._orientation === value) { + return; + } + // Release the mouse before making any changes. + this._releaseMouse(); + // Toggle the orientation values. + this._orientation = value; + this.dataset['orientation'] = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "titles", { + /** + * A read-only array of the titles in the tab bar. + */ + get: function () { + return this._titles; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabBar.prototype, "contentNode", { + /** + * The tab bar content node. + * + * #### Notes + * This is the node which holds the tab nodes. + * + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-TabBar-content')[0]; + }, + enumerable: true, + configurable: true + }); + /** + * Add a tab to the end of the tab bar. + * + * @param value - The title which holds the data for the tab, + * or an options object to convert to a title. + * + * @returns The title object added to the tab bar. + * + * #### Notes + * If the title is already added to the tab bar, it will be moved. + */ + TabBar.prototype.addTab = function (value) { + return this.insertTab(this._titles.length, value); + }; + /** + * Insert a tab into the tab bar at the specified index. + * + * @param index - The index at which to insert the tab. + * + * @param value - The title which holds the data for the tab, + * or an options object to convert to a title. + * + * @returns The title object added to the tab bar. + * + * #### Notes + * The index will be clamped to the bounds of the tabs. + * + * If the title is already added to the tab bar, it will be moved. + */ + TabBar.prototype.insertTab = function (index, value) { + // Release the mouse before making any changes. + this._releaseMouse(); + // Coerce the value to a title. + var title = Private$9$1.asTitle(value); + // Look up the index of the title. + var i = this._titles.indexOf(title); + // Clamp the insert index to the array bounds. + var j = Math.max(0, Math.min(index, this._titles.length)); + // If the title is not in the array, insert it. + if (i === -1) { + // Insert the title into the array. + ArrayExt.insert(this._titles, j, title); + // Connect to the title changed signal. + title.changed.connect(this._onTitleChanged, this); + // Schedule an update of the tabs. + this.update(); + // Adjust the current index for the insert. + this._adjustCurrentForInsert(j, title); + // Return the title added to the tab bar. + return title; + } + // Otherwise, the title exists in the array and should be moved. + // Adjust the index if the location is at the end of the array. + if (j === this._titles.length) { + j--; + } + // Bail if there is no effective move. + if (i === j) { + return title; + } + // Move the title to the new location. + ArrayExt.move(this._titles, i, j); + // Schedule an update of the tabs. + this.update(); + // Adjust the current index for the move. + this._adjustCurrentForMove(i, j); + // Return the title added to the tab bar. + return title; + }; + /** + * Remove a tab from the tab bar. + * + * @param title - The title for the tab to remove. + * + * #### Notes + * This is a no-op if the title is not in the tab bar. + */ + TabBar.prototype.removeTab = function (title) { + this.removeTabAt(this._titles.indexOf(title)); + }; + /** + * Remove the tab at a given index from the tab bar. + * + * @param index - The index of the tab to remove. + * + * #### Notes + * This is a no-op if the index is out of range. + */ + TabBar.prototype.removeTabAt = function (index) { + // Release the mouse before making any changes. + this._releaseMouse(); + // Remove the title from the array. + var title = ArrayExt.removeAt(this._titles, index); + // Bail if the index is out of range. + if (!title) { + return; + } + // Disconnect from the title changed signal. + title.changed.disconnect(this._onTitleChanged, this); + // Clear the previous title if it's being removed. + if (title === this._previousTitle) { + this._previousTitle = null; + } + // Schedule an update of the tabs. + this.update(); + // Adjust the current index for the remove. + this._adjustCurrentForRemove(index, title); + }; + /** + * Remove all tabs from the tab bar. + */ + TabBar.prototype.clearTabs = function () { + // Bail if there is nothing to remove. + if (this._titles.length === 0) { + return; + } + // Release the mouse before making any changes. + this._releaseMouse(); + // Disconnect from the title changed signals. + for (var _i = 0, _a = this._titles; _i < _a.length; _i++) { + var title = _a[_i]; + title.changed.disconnect(this._onTitleChanged, this); + } + // Get the current index and title. + var pi = this.currentIndex; + var pt = this.currentTitle; + // Reset the current index and previous title. + this._currentIndex = -1; + this._previousTitle = null; + // Clear the title array. + this._titles.length = 0; + // Schedule an update of the tabs. + this.update(); + // If no tab was selected, there's nothing else to do. + if (pi === -1) { + return; + } + // Emit the current changed signal. + this._currentChanged.emit({ + previousIndex: pi, previousTitle: pt, + currentIndex: -1, currentTitle: null + }); + }; + /** + * Release the mouse and restore the non-dragged tab positions. + * + * #### Notes + * This will cause the tab bar to stop handling mouse events and to + * restore the tabs to their non-dragged positions. + */ + TabBar.prototype.releaseMouse = function () { + this._releaseMouse(); + }; + /** + * Handle the DOM events for the tab bar. + * + * @param event - The DOM event sent to the tab bar. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the tab bar's DOM node. + * + * This should not be called directly by user code. + */ + TabBar.prototype.handleEvent = function (event) { + switch (event.type) { + case 'mousedown': + this._evtMouseDown(event); + break; + case 'mousemove': + this._evtMouseMove(event); + break; + case 'mouseup': + this._evtMouseUp(event); + break; + case 'keydown': + this._evtKeyDown(event); + break; + case 'contextmenu': + event.preventDefault(); + event.stopPropagation(); + break; + } + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + TabBar.prototype.onBeforeAttach = function (msg) { + this.node.addEventListener('mousedown', this); + }; + /** + * A message handler invoked on an `'after-detach'` message. + */ + TabBar.prototype.onAfterDetach = function (msg) { + this.node.removeEventListener('mousedown', this); + this._releaseMouse(); + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + TabBar.prototype.onUpdateRequest = function (msg) { + var titles = this._titles; + var renderer = this.renderer; + var currentTitle = this.currentTitle; + var content = new Array(titles.length); + for (var i = 0, n = titles.length; i < n; ++i) { + var title = titles[i]; + var current = title === currentTitle; + var zIndex = current ? n : n - i - 1; + content[i] = renderer.renderTab({ title: title, current: current, zIndex: zIndex }); + } + VirtualDOM.render(content, this.contentNode); + }; + /** + * Handle the `'keydown'` event for the tab bar. + */ + TabBar.prototype._evtKeyDown = function (event) { + // Stop all input events during drag. + event.preventDefault(); + event.stopPropagation(); + // Release the mouse if `Escape` is pressed. + if (event.keyCode === 27) { + this._releaseMouse(); + } + }; + /** + * Handle the `'mousedown'` event for the tab bar. + */ + TabBar.prototype._evtMouseDown = function (event) { + // Do nothing if it's not a left or middle mouse press. + if (event.button !== 0 && event.button !== 1) { + return; + } + // Do nothing if a drag is in progress. + if (this._dragData) { + return; + } + // Lookup the tab nodes. + var tabs = this.contentNode.children; + // Find the index of the pressed tab. + var index = ArrayExt.findFirstIndex(tabs, function (tab) { + return ElementExt.hitTest(tab, event.clientX, event.clientY); + }); + // Do nothing if the press is not on a tab. + if (index === -1) { + return; + } + // Pressing on a tab stops the event propagation. + event.preventDefault(); + event.stopPropagation(); + // Initialize the non-measured parts of the drag data. + this._dragData = { + tab: tabs[index], + index: index, + pressX: event.clientX, + pressY: event.clientY, + tabPos: -1, + tabSize: -1, + tabPressPos: -1, + targetIndex: -1, + tabLayout: null, + contentRect: null, + override: null, + dragActive: false, + dragAborted: false, + detachRequested: false + }; + // Add the document mouse up listener. + document.addEventListener('mouseup', this, true); + // Do nothing else if the middle button is clicked. + if (event.button === 1) { + return; + } + // Do nothing else if the close icon is clicked. + var icon = tabs[index].querySelector(this.renderer.closeIconSelector); + if (icon && icon.contains(event.target)) { + return; + } + // Add the extra listeners if the tabs are movable. + if (this.tabsMovable) { + document.addEventListener('mousemove', this, true); + document.addEventListener('keydown', this, true); + document.addEventListener('contextmenu', this, true); + } + // Update the current index as appropriate. + if (this.allowDeselect && this.currentIndex === index) { + this.currentIndex = -1; + } + else { + this.currentIndex = index; + } + // Do nothing else if there is no current tab. + if (this.currentIndex === -1) { + return; + } + // Emit the tab activate request signal. + this._tabActivateRequested.emit({ + index: this.currentIndex, title: this.currentTitle + }); + }; + /** + * Handle the `'mousemove'` event for the tab bar. + */ + TabBar.prototype._evtMouseMove = function (event) { + // Do nothing if no drag is in progress. + var data = this._dragData; + if (!data) { + return; + } + // Suppress the event during a drag. + event.preventDefault(); + event.stopPropagation(); + // Lookup the tab nodes. + var tabs = this.contentNode.children; + // Bail early if the drag threshold has not been met. + if (!data.dragActive && !Private$9$1.dragExceeded(data, event)) { + return; + } + // Activate the drag if necessary. + if (!data.dragActive) { + // Fill in the rest of the drag data measurements. + var tabRect = data.tab.getBoundingClientRect(); + if (this._orientation === 'horizontal') { + data.tabPos = data.tab.offsetLeft; + data.tabSize = tabRect.width; + data.tabPressPos = data.pressX - tabRect.left; + } + else { + data.tabPos = data.tab.offsetTop; + data.tabSize = tabRect.height; + data.tabPressPos = data.pressY - tabRect.top; + } + data.tabLayout = Private$9$1.snapTabLayout(tabs, this._orientation); + data.contentRect = this.contentNode.getBoundingClientRect(); + data.override = Drag.overrideCursor('default'); + // Add the dragging style classes. + data.tab.classList.add('lm-mod-dragging'); + this.addClass('lm-mod-dragging'); + /* */ + data.tab.classList.add('p-mod-dragging'); + this.addClass('p-mod-dragging'); + /* */ + // Mark the drag as active. + data.dragActive = true; + } + // Emit the detach requested signal if the threshold is exceeded. + if (!data.detachRequested && Private$9$1.detachExceeded(data, event)) { + // Only emit the signal once per drag cycle. + data.detachRequested = true; + // Setup the arguments for the signal. + var index = data.index; + var clientX = event.clientX; + var clientY = event.clientY; + var tab = tabs[index]; + var title = this._titles[index]; + // Emit the tab detach requested signal. + this._tabDetachRequested.emit({ index: index, title: title, tab: tab, clientX: clientX, clientY: clientY }); + // Bail if the signal handler aborted the drag. + if (data.dragAborted) { + return; + } + } + // Update the positions of the tabs. + Private$9$1.layoutTabs(tabs, data, event, this._orientation); + }; + /** + * Handle the `'mouseup'` event for the document. + */ + TabBar.prototype._evtMouseUp = function (event) { + var _this = this; + // Do nothing if it's not a left or middle mouse release. + if (event.button !== 0 && event.button !== 1) { + return; + } + // Do nothing if no drag is in progress. + var data = this._dragData; + if (!data) { + return; + } + // Stop the event propagation. + event.preventDefault(); + event.stopPropagation(); + // Remove the extra mouse event listeners. + document.removeEventListener('mousemove', this, true); + document.removeEventListener('mouseup', this, true); + document.removeEventListener('keydown', this, true); + document.removeEventListener('contextmenu', this, true); + // Handle a release when the drag is not active. + if (!data.dragActive) { + // Clear the drag data. + this._dragData = null; + // Lookup the tab nodes. + var tabs = this.contentNode.children; + // Find the index of the released tab. + var index = ArrayExt.findFirstIndex(tabs, function (tab) { + return ElementExt.hitTest(tab, event.clientX, event.clientY); + }); + // Do nothing if the release is not on the original pressed tab. + if (index !== data.index) { + return; + } + // Ignore the release if the title is not closable. + var title = this._titles[index]; + if (!title.closable) { + return; + } + // Emit the close requested signal if the middle button is released. + if (event.button === 1) { + this._tabCloseRequested.emit({ index: index, title: title }); + return; + } + // Emit the close requested signal if the close icon was released. + var icon = tabs[index].querySelector(this.renderer.closeIconSelector); + if (icon && icon.contains(event.target)) { + this._tabCloseRequested.emit({ index: index, title: title }); + return; + } + // Otherwise, there is nothing left to do. + return; + } + // Do nothing if the left button is not released. + if (event.button !== 0) { + return; + } + // Position the tab at its final resting position. + Private$9$1.finalizeTabPosition(data, this._orientation); + // Remove the dragging class from the tab so it can be transitioned. + data.tab.classList.remove('lm-mod-dragging'); + /* */ + data.tab.classList.remove('p-mod-dragging'); + /* */ + // Parse the transition duration for releasing the tab. + var duration = Private$9$1.parseTransitionDuration(data.tab); + // Complete the release on a timer to allow the tab to transition. + setTimeout(function () { + // Do nothing if the drag has been aborted. + if (data.dragAborted) { + return; + } + // Clear the drag data reference. + _this._dragData = null; + // Reset the positions of the tabs. + Private$9$1.resetTabPositions(_this.contentNode.children, _this._orientation); + // Clear the cursor grab. + data.override.dispose(); + // Remove the remaining dragging style. + _this.removeClass('lm-mod-dragging'); + /* */ + _this.removeClass('p-mod-dragging'); + /* */ + // If the tab was not moved, there is nothing else to do. + var i = data.index; + var j = data.targetIndex; + if (j === -1 || i === j) { + return; + } + // Move the title to the new locations. + ArrayExt.move(_this._titles, i, j); + // Adjust the current index for the move. + _this._adjustCurrentForMove(i, j); + // Emit the tab moved signal. + _this._tabMoved.emit({ + fromIndex: i, toIndex: j, title: _this._titles[j] + }); + // Update the tabs immediately to prevent flicker. + MessageLoop.sendMessage(_this, Widget.Msg.UpdateRequest); + }, duration); + }; + /** + * Release the mouse and restore the non-dragged tab positions. + */ + TabBar.prototype._releaseMouse = function () { + // Do nothing if no drag is in progress. + var data = this._dragData; + if (!data) { + return; + } + // Clear the drag data reference. + this._dragData = null; + // Remove the extra mouse listeners. + document.removeEventListener('mousemove', this, true); + document.removeEventListener('mouseup', this, true); + document.removeEventListener('keydown', this, true); + document.removeEventListener('contextmenu', this, true); + // Indicate the drag has been aborted. This allows the mouse + // event handlers to return early when the drag is canceled. + data.dragAborted = true; + // If the drag is not active, there's nothing more to do. + if (!data.dragActive) { + return; + } + // Reset the tabs to their non-dragged positions. + Private$9$1.resetTabPositions(this.contentNode.children, this._orientation); + // Clear the cursor override. + data.override.dispose(); + // Clear the dragging style classes. + data.tab.classList.remove('lm-mod-dragging'); + this.removeClass('lm-mod-dragging'); + /* */ + data.tab.classList.remove('p-mod-dragging'); + this.removeClass('p-mod-dragging'); + /* */ + }; + /** + * Adjust the current index for a tab insert operation. + * + * This method accounts for the tab bar's insertion behavior when + * adjusting the current index and emitting the changed signal. + */ + TabBar.prototype._adjustCurrentForInsert = function (i, title) { + // Lookup commonly used variables. + var ct = this.currentTitle; + var ci = this._currentIndex; + var bh = this.insertBehavior; + // Handle the behavior where the new tab is always selected, + // or the behavior where the new tab is selected if needed. + if (bh === 'select-tab' || (bh === 'select-tab-if-needed' && ci === -1)) { + this._currentIndex = i; + this._previousTitle = ct; + this._currentChanged.emit({ + previousIndex: ci, previousTitle: ct, + currentIndex: i, currentTitle: title + }); + return; + } + // Otherwise, silently adjust the current index if needed. + if (ci >= i) { + this._currentIndex++; + } + }; + /** + * Adjust the current index for a tab move operation. + * + * This method will not cause the actual current tab to change. + * It silently adjusts the index to account for the given move. + */ + TabBar.prototype._adjustCurrentForMove = function (i, j) { + if (this._currentIndex === i) { + this._currentIndex = j; + } + else if (this._currentIndex < i && this._currentIndex >= j) { + this._currentIndex++; + } + else if (this._currentIndex > i && this._currentIndex <= j) { + this._currentIndex--; + } + }; + /** + * Adjust the current index for a tab remove operation. + * + * This method accounts for the tab bar's remove behavior when + * adjusting the current index and emitting the changed signal. + */ + TabBar.prototype._adjustCurrentForRemove = function (i, title) { + // Lookup commonly used variables. + var ci = this._currentIndex; + var bh = this.removeBehavior; + // Silently adjust the index if the current tab is not removed. + if (ci !== i) { + if (ci > i) { + this._currentIndex--; + } + return; + } + // No tab gets selected if the tab bar is empty. + if (this._titles.length === 0) { + this._currentIndex = -1; + this._currentChanged.emit({ + previousIndex: i, previousTitle: title, + currentIndex: -1, currentTitle: null + }); + return; + } + // Handle behavior where the next sibling tab is selected. + if (bh === 'select-tab-after') { + this._currentIndex = Math.min(i, this._titles.length - 1); + this._currentChanged.emit({ + previousIndex: i, previousTitle: title, + currentIndex: this._currentIndex, currentTitle: this.currentTitle + }); + return; + } + // Handle behavior where the previous sibling tab is selected. + if (bh === 'select-tab-before') { + this._currentIndex = Math.max(0, i - 1); + this._currentChanged.emit({ + previousIndex: i, previousTitle: title, + currentIndex: this._currentIndex, currentTitle: this.currentTitle + }); + return; + } + // Handle behavior where the previous history tab is selected. + if (bh === 'select-previous-tab') { + if (this._previousTitle) { + this._currentIndex = this._titles.indexOf(this._previousTitle); + this._previousTitle = null; + } + else { + this._currentIndex = Math.min(i, this._titles.length - 1); + } + this._currentChanged.emit({ + previousIndex: i, previousTitle: title, + currentIndex: this._currentIndex, currentTitle: this.currentTitle + }); + return; + } + // Otherwise, no tab gets selected. + this._currentIndex = -1; + this._currentChanged.emit({ + previousIndex: i, previousTitle: title, + currentIndex: -1, currentTitle: null + }); + }; + /** + * Handle the `changed` signal of a title object. + */ + TabBar.prototype._onTitleChanged = function (sender) { + this.update(); + }; + return TabBar; + }(Widget)); + /** + * The namespace for the `TabBar` class statics. + */ + (function (TabBar) { + /** + * The default implementation of `IRenderer`. + * + * #### Notes + * Subclasses are free to reimplement rendering methods as needed. + */ + var Renderer = /** @class */ (function () { + /** + * Construct a new renderer. + */ + function Renderer() { + /** + * A selector which matches the close icon node in a tab. + */ + this.closeIconSelector = '.lm-TabBar-tabCloseIcon'; + this._tabID = 0; + this._tabKeys = new WeakMap(); + } + /** + * Render the virtual element for a tab. + * + * @param data - The data to use for rendering the tab. + * + * @returns A virtual element representing the tab. + */ + Renderer.prototype.renderTab = function (data) { + var title = data.title.caption; + var key = this.createTabKey(data); + var style = this.createTabStyle(data); + var className = this.createTabClass(data); + var dataset = this.createTabDataset(data); + return (h.li({ key: key, className: className, title: title, style: style, dataset: dataset }, this.renderIcon(data), this.renderLabel(data), this.renderCloseIcon(data))); + }; + /** + * Render the icon element for a tab. + * + * @param data - The data to use for rendering the tab. + * + * @returns A virtual element representing the tab icon. + */ + Renderer.prototype.renderIcon = function (data) { + var title = data.title; + var className = this.createIconClass(data); + /* */ + if (typeof title.icon === 'string') { + return h.div({ className: className }, title.iconLabel); + } + /* */ + // if title.icon is undefined, it will be ignored + return h.div({ className: className }, title.icon, title.iconLabel); + }; + /** + * Render the label element for a tab. + * + * @param data - The data to use for rendering the tab. + * + * @returns A virtual element representing the tab label. + */ + Renderer.prototype.renderLabel = function (data) { + return h.div({ + className: 'lm-TabBar-tabLabel' + /* */ + + ' p-TabBar-tabLabel' + /* */ + }, data.title.label); + }; + /** + * Render the close icon element for a tab. + * + * @param data - The data to use for rendering the tab. + * + * @returns A virtual element representing the tab close icon. + */ + Renderer.prototype.renderCloseIcon = function (data) { + return h.div({ + className: 'lm-TabBar-tabCloseIcon' + /* */ + + ' p-TabBar-tabCloseIcon' + /* */ + }); + }; + /** + * Create a unique render key for the tab. + * + * @param data - The data to use for the tab. + * + * @returns The unique render key for the tab. + * + * #### Notes + * This method caches the key against the tab title the first time + * the key is generated. This enables efficient rendering of moved + * tabs and avoids subtle hover style artifacts. + */ + Renderer.prototype.createTabKey = function (data) { + var key = this._tabKeys.get(data.title); + if (key === undefined) { + key = "tab-key-" + this._tabID++; + this._tabKeys.set(data.title, key); + } + return key; + }; + /** + * Create the inline style object for a tab. + * + * @param data - The data to use for the tab. + * + * @returns The inline style data for the tab. + */ + Renderer.prototype.createTabStyle = function (data) { + return { zIndex: "" + data.zIndex }; + }; + /** + * Create the class name for the tab. + * + * @param data - The data to use for the tab. + * + * @returns The full class name for the tab. + */ + Renderer.prototype.createTabClass = function (data) { + var name = 'lm-TabBar-tab'; + /* */ + name += ' p-TabBar-tab'; + /* */ + if (data.title.className) { + name += " " + data.title.className; + } + if (data.title.closable) { + name += ' lm-mod-closable'; + /* */ + name += ' p-mod-closable'; + /* */ + } + if (data.current) { + name += ' lm-mod-current'; + /* */ + name += ' p-mod-current'; + /* */ + } + return name; + }; + /** + * Create the dataset for a tab. + * + * @param data - The data to use for the tab. + * + * @returns The dataset for the tab. + */ + Renderer.prototype.createTabDataset = function (data) { + return data.title.dataset; + }; + /** + * Create the class name for the tab icon. + * + * @param data - The data to use for the tab. + * + * @returns The full class name for the tab icon. + */ + Renderer.prototype.createIconClass = function (data) { + var name = 'lm-TabBar-tabIcon'; + /* */ + name += ' p-TabBar-tabIcon'; + /* */ + var extra = data.title.iconClass; + return extra ? name + " " + extra : name; + }; + return Renderer; + }()); + TabBar.Renderer = Renderer; + /** + * The default `Renderer` instance. + */ + TabBar.defaultRenderer = new Renderer(); + })(TabBar || (TabBar = {})); + /** + * The namespace for the module implementation details. + */ + var Private$9$1; + (function (Private) { + /** + * The start drag distance threshold. + */ + Private.DRAG_THRESHOLD = 5; + /** + * The detach distance threshold. + */ + Private.DETACH_THRESHOLD = 20; + /** + * Create the DOM node for a tab bar. + */ + function createNode() { + var node = document.createElement('div'); + var content = document.createElement('ul'); + content.className = 'lm-TabBar-content'; + /* */ + content.classList.add('p-TabBar-content'); + /* */ + node.appendChild(content); + return node; + } + Private.createNode = createNode; + /** + * Coerce a title or options into a real title. + */ + function asTitle(value) { + return value instanceof Title ? value : new Title(value); + } + Private.asTitle = asTitle; + /** + * Parse the transition duration for a tab node. + */ + function parseTransitionDuration(tab) { + var style = window.getComputedStyle(tab); + return 1000 * (parseFloat(style.transitionDuration) || 0); + } + Private.parseTransitionDuration = parseTransitionDuration; + /** + * Get a snapshot of the current tab layout values. + */ + function snapTabLayout(tabs, orientation) { + var layout = new Array(tabs.length); + for (var i = 0, n = tabs.length; i < n; ++i) { + var node = tabs[i]; + var style = window.getComputedStyle(node); + if (orientation === 'horizontal') { + layout[i] = { + pos: node.offsetLeft, + size: node.offsetWidth, + margin: parseFloat(style.marginLeft) || 0 + }; + } + else { + layout[i] = { + pos: node.offsetTop, + size: node.offsetHeight, + margin: parseFloat(style.marginTop) || 0 + }; + } + } + return layout; + } + Private.snapTabLayout = snapTabLayout; + /** + * Test if the event exceeds the drag threshold. + */ + function dragExceeded(data, event) { + var dx = Math.abs(event.clientX - data.pressX); + var dy = Math.abs(event.clientY - data.pressY); + return dx >= Private.DRAG_THRESHOLD || dy >= Private.DRAG_THRESHOLD; + } + Private.dragExceeded = dragExceeded; + /** + * Test if the event exceeds the drag detach threshold. + */ + function detachExceeded(data, event) { + var rect = data.contentRect; + return ((event.clientX < rect.left - Private.DETACH_THRESHOLD) || + (event.clientX >= rect.right + Private.DETACH_THRESHOLD) || + (event.clientY < rect.top - Private.DETACH_THRESHOLD) || + (event.clientY >= rect.bottom + Private.DETACH_THRESHOLD)); + } + Private.detachExceeded = detachExceeded; + /** + * Update the relative tab positions and computed target index. + */ + function layoutTabs(tabs, data, event, orientation) { + // Compute the orientation-sensitive values. + var pressPos; + var localPos; + var clientPos; + var clientSize; + if (orientation === 'horizontal') { + pressPos = data.pressX; + localPos = event.clientX - data.contentRect.left; + clientPos = event.clientX; + clientSize = data.contentRect.width; + } + else { + pressPos = data.pressY; + localPos = event.clientY - data.contentRect.top; + clientPos = event.clientY; + clientSize = data.contentRect.height; + } + // Compute the target data. + var targetIndex = data.index; + var targetPos = localPos - data.tabPressPos; + var targetEnd = targetPos + data.tabSize; + // Update the relative tab positions. + for (var i = 0, n = tabs.length; i < n; ++i) { + var pxPos = void 0; + var layout = data.tabLayout[i]; + var threshold = layout.pos + (layout.size >> 1); + if (i < data.index && targetPos < threshold) { + pxPos = data.tabSize + data.tabLayout[i + 1].margin + "px"; + targetIndex = Math.min(targetIndex, i); + } + else if (i > data.index && targetEnd > threshold) { + pxPos = -data.tabSize - layout.margin + "px"; + targetIndex = Math.max(targetIndex, i); + } + else if (i === data.index) { + var ideal = clientPos - pressPos; + var limit = clientSize - (data.tabPos + data.tabSize); + pxPos = Math.max(-data.tabPos, Math.min(ideal, limit)) + "px"; + } + else { + pxPos = ''; + } + if (orientation === 'horizontal') { + tabs[i].style.left = pxPos; + } + else { + tabs[i].style.top = pxPos; + } + } + // Update the computed target index. + data.targetIndex = targetIndex; + } + Private.layoutTabs = layoutTabs; + /** + * Position the drag tab at its final resting relative position. + */ + function finalizeTabPosition(data, orientation) { + // Compute the orientation-sensitive client size. + var clientSize; + if (orientation === 'horizontal') { + clientSize = data.contentRect.width; + } + else { + clientSize = data.contentRect.height; + } + // Compute the ideal final tab position. + var ideal; + if (data.targetIndex === data.index) { + ideal = 0; + } + else if (data.targetIndex > data.index) { + var tgt = data.tabLayout[data.targetIndex]; + ideal = tgt.pos + tgt.size - data.tabSize - data.tabPos; + } + else { + var tgt = data.tabLayout[data.targetIndex]; + ideal = tgt.pos - data.tabPos; + } + // Compute the tab position limit. + var limit = clientSize - (data.tabPos + data.tabSize); + var final = Math.max(-data.tabPos, Math.min(ideal, limit)); + // Set the final orientation-sensitive position. + if (orientation === 'horizontal') { + data.tab.style.left = final + "px"; + } + else { + data.tab.style.top = final + "px"; + } + } + Private.finalizeTabPosition = finalizeTabPosition; + /** + * Reset the relative positions of the given tabs. + */ + function resetTabPositions(tabs, orientation) { + each$1(tabs, function (tab) { + if (orientation === 'horizontal') { + tab.style.left = ''; + } + else { + tab.style.top = ''; + } + }); + } + Private.resetTabPositions = resetTabPositions; + })(Private$9$1 || (Private$9$1 = {})); + + /** + * A widget which provides a flexible docking area for widgets. + */ + var DockPanel = /** @class */ (function (_super) { + __extends$5(DockPanel, _super); + /** + * Construct a new dock panel. + * + * @param options - The options for initializing the panel. + */ + function DockPanel(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this) || this; + _this._drag = null; + _this._tabsMovable = true; + _this._pressData = null; + _this._layoutModified = new Signal(_this); + _this.addClass('lm-DockPanel'); + /* */ + _this.addClass('p-DockPanel'); + /* */ + _this._mode = options.mode || 'multiple-document'; + _this._renderer = options.renderer || DockPanel.defaultRenderer; + _this._edges = options.edges || Private$a.DEFAULT_EDGES; + if (options.tabsMovable !== undefined) { + _this._tabsMovable = options.tabsMovable; + } + // Toggle the CSS mode attribute. + _this.dataset['mode'] = _this._mode; + // Create the delegate renderer for the layout. + var renderer = { + createTabBar: function () { return _this._createTabBar(); }, + createHandle: function () { return _this._createHandle(); } + }; + // Set up the dock layout for the panel. + _this.layout = new DockLayout({ renderer: renderer, spacing: options.spacing }); + // Set up the overlay drop indicator. + _this.overlay = options.overlay || new DockPanel.Overlay(); + _this.node.appendChild(_this.overlay.node); + return _this; + } + /** + * Dispose of the resources held by the panel. + */ + DockPanel.prototype.dispose = function () { + // Ensure the mouse is released. + this._releaseMouse(); + // Hide the overlay. + this.overlay.hide(0); + // Cancel a drag if one is in progress. + if (this._drag) { + this._drag.dispose(); + } + // Dispose of the base class. + _super.prototype.dispose.call(this); + }; + Object.defineProperty(DockPanel.prototype, "layoutModified", { + /** + * A signal emitted when the layout configuration is modified. + * + * #### Notes + * This signal is emitted whenever the current layout configuration + * may have changed. + * + * This signal is emitted asynchronously in a collapsed fashion, so + * that multiple synchronous modifications results in only a single + * emit of the signal. + */ + get: function () { + return this._layoutModified; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DockPanel.prototype, "renderer", { + /** + * The renderer used by the dock panel. + */ + get: function () { + return this.layout.renderer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DockPanel.prototype, "spacing", { + /** + * Get the spacing between the widgets. + */ + get: function () { + return this.layout.spacing; + }, + /** + * Set the spacing between the widgets. + */ + set: function (value) { + this.layout.spacing = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DockPanel.prototype, "mode", { + /** + * Get the mode for the dock panel. + */ + get: function () { + return this._mode; + }, + /** + * Set the mode for the dock panel. + * + * #### Notes + * Changing the mode is a destructive operation with respect to the + * panel's layout configuration. If layout state must be preserved, + * save the current layout config before changing the mode. + */ + set: function (value) { + // Bail early if the mode does not change. + if (this._mode === value) { + return; + } + // Update the internal mode. + this._mode = value; + // Toggle the CSS mode attribute. + this.dataset['mode'] = value; + // Get the layout for the panel. + var layout = this.layout; + // Configure the layout for the specified mode. + switch (value) { + case 'multiple-document': + each$1(layout.tabBars(), function (tabBar) { tabBar.show(); }); + break; + case 'single-document': + layout.restoreLayout(Private$a.createSingleDocumentConfig(this)); + break; + default: + throw 'unreachable'; + } + // Schedule an emit of the layout modified signal. + MessageLoop.postMessage(this, Private$a.LayoutModified); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DockPanel.prototype, "tabsMovable", { + /** + * Whether the tabs can be dragged / moved at runtime. + */ + get: function () { + return this._tabsMovable; + }, + /** + * Enable / Disable draggable / movable tabs. + */ + set: function (value) { + this._tabsMovable = value; + each$1(this.tabBars(), function (tabbar) { return tabbar.tabsMovable = value; }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DockPanel.prototype, "isEmpty", { + /** + * Whether the dock panel is empty. + */ + get: function () { + return this.layout.isEmpty; + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator over the user widgets in the panel. + * + * @returns A new iterator over the user widgets in the panel. + * + * #### Notes + * This iterator does not include the generated tab bars. + */ + DockPanel.prototype.widgets = function () { + return this.layout.widgets(); + }; + /** + * Create an iterator over the selected widgets in the panel. + * + * @returns A new iterator over the selected user widgets. + * + * #### Notes + * This iterator yields the widgets corresponding to the current tab + * of each tab bar in the panel. + */ + DockPanel.prototype.selectedWidgets = function () { + return this.layout.selectedWidgets(); + }; + /** + * Create an iterator over the tab bars in the panel. + * + * @returns A new iterator over the tab bars in the panel. + * + * #### Notes + * This iterator does not include the user widgets. + */ + DockPanel.prototype.tabBars = function () { + return this.layout.tabBars(); + }; + /** + * Create an iterator over the handles in the panel. + * + * @returns A new iterator over the handles in the panel. + */ + DockPanel.prototype.handles = function () { + return this.layout.handles(); + }; + /** + * Select a specific widget in the dock panel. + * + * @param widget - The widget of interest. + * + * #### Notes + * This will make the widget the current widget in its tab area. + */ + DockPanel.prototype.selectWidget = function (widget) { + // Find the tab bar which contains the widget. + var tabBar = find$1(this.tabBars(), function (bar) { + return bar.titles.indexOf(widget.title) !== -1; + }); + // Throw an error if no tab bar is found. + if (!tabBar) { + throw new Error('Widget is not contained in the dock panel.'); + } + // Ensure the widget is the current widget. + tabBar.currentTitle = widget.title; + }; + /** + * Activate a specified widget in the dock panel. + * + * @param widget - The widget of interest. + * + * #### Notes + * This will select and activate the given widget. + */ + DockPanel.prototype.activateWidget = function (widget) { + this.selectWidget(widget); + widget.activate(); + }; + /** + * Save the current layout configuration of the dock panel. + * + * @returns A new config object for the current layout state. + * + * #### Notes + * The return value can be provided to the `restoreLayout` method + * in order to restore the layout to its current configuration. + */ + DockPanel.prototype.saveLayout = function () { + return this.layout.saveLayout(); + }; + /** + * Restore the layout to a previously saved configuration. + * + * @param config - The layout configuration to restore. + * + * #### Notes + * Widgets which currently belong to the layout but which are not + * contained in the config will be unparented. + * + * The dock panel automatically reverts to `'multiple-document'` + * mode when a layout config is restored. + */ + DockPanel.prototype.restoreLayout = function (config) { + // Reset the mode. + this._mode = 'multiple-document'; + // Restore the layout. + this.layout.restoreLayout(config); + // Flush the message loop on IE and Edge to prevent flicker. + if (Platform.IS_EDGE || Platform.IS_IE) { + MessageLoop.flush(); + } + // Schedule an emit of the layout modified signal. + MessageLoop.postMessage(this, Private$a.LayoutModified); + }; + /** + * Add a widget to the dock panel. + * + * @param widget - The widget to add to the dock panel. + * + * @param options - The additional options for adding the widget. + * + * #### Notes + * If the panel is in single document mode, the options are ignored + * and the widget is always added as tab in the hidden tab bar. + */ + DockPanel.prototype.addWidget = function (widget, options) { + if (options === void 0) { options = {}; } + // Add the widget to the layout. + if (this._mode === 'single-document') { + this.layout.addWidget(widget); + } + else { + this.layout.addWidget(widget, options); + } + // Schedule an emit of the layout modified signal. + MessageLoop.postMessage(this, Private$a.LayoutModified); + }; + /** + * Process a message sent to the widget. + * + * @param msg - The message sent to the widget. + */ + DockPanel.prototype.processMessage = function (msg) { + if (msg.type === 'layout-modified') { + this._layoutModified.emit(undefined); + } + else { + _super.prototype.processMessage.call(this, msg); + } + }; + /** + * Handle the DOM events for the dock panel. + * + * @param event - The DOM event sent to the panel. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the panel's DOM node. It should + * not be called directly by user code. + */ + DockPanel.prototype.handleEvent = function (event) { + switch (event.type) { + case 'lm-dragenter': + this._evtDragEnter(event); + break; + case 'lm-dragleave': + this._evtDragLeave(event); + break; + case 'lm-dragover': + this._evtDragOver(event); + break; + case 'lm-drop': + this._evtDrop(event); + break; + case 'mousedown': + this._evtMouseDown(event); + break; + case 'mousemove': + this._evtMouseMove(event); + break; + case 'mouseup': + this._evtMouseUp(event); + break; + case 'keydown': + this._evtKeyDown(event); + break; + case 'contextmenu': + event.preventDefault(); + event.stopPropagation(); + break; + } + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + DockPanel.prototype.onBeforeAttach = function (msg) { + this.node.addEventListener('lm-dragenter', this); + this.node.addEventListener('lm-dragleave', this); + this.node.addEventListener('lm-dragover', this); + this.node.addEventListener('lm-drop', this); + this.node.addEventListener('mousedown', this); + }; + /** + * A message handler invoked on an `'after-detach'` message. + */ + DockPanel.prototype.onAfterDetach = function (msg) { + this.node.removeEventListener('lm-dragenter', this); + this.node.removeEventListener('lm-dragleave', this); + this.node.removeEventListener('lm-dragover', this); + this.node.removeEventListener('lm-drop', this); + this.node.removeEventListener('mousedown', this); + this._releaseMouse(); + }; + /** + * A message handler invoked on a `'child-added'` message. + */ + DockPanel.prototype.onChildAdded = function (msg) { + // Ignore the generated tab bars. + if (Private$a.isGeneratedTabBarProperty.get(msg.child)) { + return; + } + // Add the widget class to the child. + msg.child.addClass('lm-DockPanel-widget'); + /* */ + msg.child.addClass('p-DockPanel-widget'); + /* */ + }; + /** + * A message handler invoked on a `'child-removed'` message. + */ + DockPanel.prototype.onChildRemoved = function (msg) { + // Ignore the generated tab bars. + if (Private$a.isGeneratedTabBarProperty.get(msg.child)) { + return; + } + // Remove the widget class from the child. + msg.child.removeClass('lm-DockPanel-widget'); + /* */ + msg.child.removeClass('p-DockPanel-widget'); + /* */ + // Schedule an emit of the layout modified signal. + MessageLoop.postMessage(this, Private$a.LayoutModified); + }; + /** + * Handle the `'lm-dragenter'` event for the dock panel. + */ + DockPanel.prototype._evtDragEnter = function (event) { + // If the factory mime type is present, mark the event as + // handled in order to get the rest of the drag events. + if (event.mimeData.hasData('application/vnd.lumino.widget-factory')) { + event.preventDefault(); + event.stopPropagation(); + } + }; + /** + * Handle the `'lm-dragleave'` event for the dock panel. + */ + DockPanel.prototype._evtDragLeave = function (event) { + // Mark the event as handled. + event.preventDefault(); + event.stopPropagation(); + // The new target might be a descendant, so we might still handle the drop. + // Hide asynchronously so that if a lm-dragover event bubbles up to us, the + // hide is cancelled by the lm-dragover handler's show overlay logic. + this.overlay.hide(1); + }; + /** + * Handle the `'lm-dragover'` event for the dock panel. + */ + DockPanel.prototype._evtDragOver = function (event) { + // Mark the event as handled. + event.preventDefault(); + event.stopPropagation(); + // Show the drop indicator overlay and update the drop + // action based on the drop target zone under the mouse. + if (this._showOverlay(event.clientX, event.clientY) === 'invalid') { + event.dropAction = 'none'; + } + else { + event.dropAction = event.proposedAction; + } + }; + /** + * Handle the `'lm-drop'` event for the dock panel. + */ + DockPanel.prototype._evtDrop = function (event) { + // Mark the event as handled. + event.preventDefault(); + event.stopPropagation(); + // Hide the drop indicator overlay. + this.overlay.hide(0); + // Bail if the proposed action is to do nothing. + if (event.proposedAction === 'none') { + event.dropAction = 'none'; + return; + } + // Find the drop target under the mouse. + var clientX = event.clientX, clientY = event.clientY; + var _a = Private$a.findDropTarget(this, clientX, clientY, this._edges), zone = _a.zone, target = _a.target; + // Bail if the drop zone is invalid. + if (zone === 'invalid') { + event.dropAction = 'none'; + return; + } + // Bail if the factory mime type has invalid data. + var mimeData = event.mimeData; + var factory = mimeData.getData('application/vnd.lumino.widget-factory'); + if (typeof factory !== 'function') { + event.dropAction = 'none'; + return; + } + // Bail if the factory does not produce a widget. + var widget = factory(); + if (!(widget instanceof Widget)) { + event.dropAction = 'none'; + return; + } + // Bail if the widget is an ancestor of the dock panel. + if (widget.contains(this)) { + event.dropAction = 'none'; + return; + } + // Find the reference widget for the drop target. + var ref = target ? Private$a.getDropRef(target.tabBar) : null; + // Add the widget according to the indicated drop zone. + switch (zone) { + case 'root-all': + this.addWidget(widget); + break; + case 'root-top': + this.addWidget(widget, { mode: 'split-top' }); + break; + case 'root-left': + this.addWidget(widget, { mode: 'split-left' }); + break; + case 'root-right': + this.addWidget(widget, { mode: 'split-right' }); + break; + case 'root-bottom': + this.addWidget(widget, { mode: 'split-bottom' }); + break; + case 'widget-all': + this.addWidget(widget, { mode: 'tab-after', ref: ref }); + break; + case 'widget-top': + this.addWidget(widget, { mode: 'split-top', ref: ref }); + break; + case 'widget-left': + this.addWidget(widget, { mode: 'split-left', ref: ref }); + break; + case 'widget-right': + this.addWidget(widget, { mode: 'split-right', ref: ref }); + break; + case 'widget-bottom': + this.addWidget(widget, { mode: 'split-bottom', ref: ref }); + break; + case 'widget-tab': + this.addWidget(widget, { mode: 'tab-after', ref: ref }); + break; + default: + throw 'unreachable'; + } + // Accept the proposed drop action. + event.dropAction = event.proposedAction; + // Activate the dropped widget. + this.activateWidget(widget); + }; + /** + * Handle the `'keydown'` event for the dock panel. + */ + DockPanel.prototype._evtKeyDown = function (event) { + // Stop input events during drag. + event.preventDefault(); + event.stopPropagation(); + // Release the mouse if `Escape` is pressed. + if (event.keyCode === 27) { + // Finalize the mouse release. + this._releaseMouse(); + // Schedule an emit of the layout modified signal. + MessageLoop.postMessage(this, Private$a.LayoutModified); + } + }; + /** + * Handle the `'mousedown'` event for the dock panel. + */ + DockPanel.prototype._evtMouseDown = function (event) { + // Do nothing if the left mouse button is not pressed. + if (event.button !== 0) { + return; + } + // Find the handle which contains the mouse target, if any. + var layout = this.layout; + var target = event.target; + var handle = find$1(layout.handles(), function (handle) { return handle.contains(target); }); + if (!handle) { + return; + } + // Stop the event when a handle is pressed. + event.preventDefault(); + event.stopPropagation(); + // Add the extra document listeners. + document.addEventListener('keydown', this, true); + document.addEventListener('mouseup', this, true); + document.addEventListener('mousemove', this, true); + document.addEventListener('contextmenu', this, true); + // Compute the offset deltas for the handle press. + var rect = handle.getBoundingClientRect(); + var deltaX = event.clientX - rect.left; + var deltaY = event.clientY - rect.top; + // Override the cursor and store the press data. + var style = window.getComputedStyle(handle); + var override = Drag.overrideCursor(style.cursor); + this._pressData = { handle: handle, deltaX: deltaX, deltaY: deltaY, override: override }; + }; + /** + * Handle the `'mousemove'` event for the dock panel. + */ + DockPanel.prototype._evtMouseMove = function (event) { + // Bail early if no drag is in progress. + if (!this._pressData) { + return; + } + // Stop the event when dragging a handle. + event.preventDefault(); + event.stopPropagation(); + // Compute the desired offset position for the handle. + var rect = this.node.getBoundingClientRect(); + var xPos = event.clientX - rect.left - this._pressData.deltaX; + var yPos = event.clientY - rect.top - this._pressData.deltaY; + // Set the handle as close to the desired position as possible. + var layout = this.layout; + layout.moveHandle(this._pressData.handle, xPos, yPos); + }; + /** + * Handle the `'mouseup'` event for the dock panel. + */ + DockPanel.prototype._evtMouseUp = function (event) { + // Do nothing if the left mouse button is not released. + if (event.button !== 0) { + return; + } + // Stop the event when releasing a handle. + event.preventDefault(); + event.stopPropagation(); + // Finalize the mouse release. + this._releaseMouse(); + // Schedule an emit of the layout modified signal. + MessageLoop.postMessage(this, Private$a.LayoutModified); + }; + /** + * Release the mouse grab for the dock panel. + */ + DockPanel.prototype._releaseMouse = function () { + // Bail early if no drag is in progress. + if (!this._pressData) { + return; + } + // Clear the override cursor. + this._pressData.override.dispose(); + this._pressData = null; + // Remove the extra document listeners. + document.removeEventListener('keydown', this, true); + document.removeEventListener('mouseup', this, true); + document.removeEventListener('mousemove', this, true); + document.removeEventListener('contextmenu', this, true); + }; + /** + * Show the overlay indicator at the given client position. + * + * Returns the drop zone at the specified client position. + * + * #### Notes + * If the position is not over a valid zone, the overlay is hidden. + */ + DockPanel.prototype._showOverlay = function (clientX, clientY) { + // Find the dock target for the given client position. + var _a = Private$a.findDropTarget(this, clientX, clientY, this._edges), zone = _a.zone, target = _a.target; + // If the drop zone is invalid, hide the overlay and bail. + if (zone === 'invalid') { + this.overlay.hide(100); + return zone; + } + // Setup the variables needed to compute the overlay geometry. + var top; + var left; + var right; + var bottom; + var box = ElementExt.boxSizing(this.node); // TODO cache this? + var rect = this.node.getBoundingClientRect(); + // Compute the overlay geometry based on the dock zone. + switch (zone) { + case 'root-all': + top = box.paddingTop; + left = box.paddingLeft; + right = box.paddingRight; + bottom = box.paddingBottom; + break; + case 'root-top': + top = box.paddingTop; + left = box.paddingLeft; + right = box.paddingRight; + bottom = rect.height * Private$a.GOLDEN_RATIO; + break; + case 'root-left': + top = box.paddingTop; + left = box.paddingLeft; + right = rect.width * Private$a.GOLDEN_RATIO; + bottom = box.paddingBottom; + break; + case 'root-right': + top = box.paddingTop; + left = rect.width * Private$a.GOLDEN_RATIO; + right = box.paddingRight; + bottom = box.paddingBottom; + break; + case 'root-bottom': + top = rect.height * Private$a.GOLDEN_RATIO; + left = box.paddingLeft; + right = box.paddingRight; + bottom = box.paddingBottom; + break; + case 'widget-all': + top = target.top; + left = target.left; + right = target.right; + bottom = target.bottom; + break; + case 'widget-top': + top = target.top; + left = target.left; + right = target.right; + bottom = target.bottom + target.height / 2; + break; + case 'widget-left': + top = target.top; + left = target.left; + right = target.right + target.width / 2; + bottom = target.bottom; + break; + case 'widget-right': + top = target.top; + left = target.left + target.width / 2; + right = target.right; + bottom = target.bottom; + break; + case 'widget-bottom': + top = target.top + target.height / 2; + left = target.left; + right = target.right; + bottom = target.bottom; + break; + case 'widget-tab': + var tabHeight = target.tabBar.node.getBoundingClientRect().height; + top = target.top; + left = target.left; + right = target.right; + bottom = target.bottom + target.height - tabHeight; + break; + default: + throw 'unreachable'; + } + // Show the overlay with the computed geometry. + this.overlay.show({ top: top, left: left, right: right, bottom: bottom }); + // Finally, return the computed drop zone. + return zone; + }; + /** + * Create a new tab bar for use by the panel. + */ + DockPanel.prototype._createTabBar = function () { + // Create the tab bar. + var tabBar = this._renderer.createTabBar(); + // Set the generated tab bar property for the tab bar. + Private$a.isGeneratedTabBarProperty.set(tabBar, true); + // Hide the tab bar when in single document mode. + if (this._mode === 'single-document') { + tabBar.hide(); + } + // Enforce necessary tab bar behavior. + // TODO do we really want to enforce *all* of these? + tabBar.tabsMovable = this._tabsMovable; + tabBar.allowDeselect = false; + tabBar.removeBehavior = 'select-previous-tab'; + tabBar.insertBehavior = 'select-tab-if-needed'; + // Connect the signal handlers for the tab bar. + tabBar.tabMoved.connect(this._onTabMoved, this); + tabBar.currentChanged.connect(this._onCurrentChanged, this); + tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this); + tabBar.tabDetachRequested.connect(this._onTabDetachRequested, this); + tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this); + // Return the initialized tab bar. + return tabBar; + }; + /** + * Create a new handle for use by the panel. + */ + DockPanel.prototype._createHandle = function () { + return this._renderer.createHandle(); + }; + /** + * Handle the `tabMoved` signal from a tab bar. + */ + DockPanel.prototype._onTabMoved = function () { + MessageLoop.postMessage(this, Private$a.LayoutModified); + }; + /** + * Handle the `currentChanged` signal from a tab bar. + */ + DockPanel.prototype._onCurrentChanged = function (sender, args) { + // Extract the previous and current title from the args. + var previousTitle = args.previousTitle, currentTitle = args.currentTitle; + // Hide the previous widget. + if (previousTitle) { + previousTitle.owner.hide(); + } + // Show the current widget. + if (currentTitle) { + currentTitle.owner.show(); + } + // Flush the message loop on IE and Edge to prevent flicker. + if (Platform.IS_EDGE || Platform.IS_IE) { + MessageLoop.flush(); + } + // Schedule an emit of the layout modified signal. + MessageLoop.postMessage(this, Private$a.LayoutModified); + }; + /** + * Handle the `tabActivateRequested` signal from a tab bar. + */ + DockPanel.prototype._onTabActivateRequested = function (sender, args) { + args.title.owner.activate(); + }; + /** + * Handle the `tabCloseRequested` signal from a tab bar. + */ + DockPanel.prototype._onTabCloseRequested = function (sender, args) { + args.title.owner.close(); + }; + /** + * Handle the `tabDetachRequested` signal from a tab bar. + */ + DockPanel.prototype._onTabDetachRequested = function (sender, args) { + var _this = this; + // Do nothing if a drag is already in progress. + if (this._drag) { + return; + } + // Release the tab bar's hold on the mouse. + sender.releaseMouse(); + // Extract the data from the args. + var title = args.title, tab = args.tab, clientX = args.clientX, clientY = args.clientY; + // Setup the mime data for the drag operation. + var mimeData = new MimeData(); + var factory = function () { return title.owner; }; + mimeData.setData('application/vnd.lumino.widget-factory', factory); + // Create the drag image for the drag operation. + var dragImage = tab.cloneNode(true); + // Create the drag object to manage the drag-drop operation. + this._drag = new Drag({ + mimeData: mimeData, dragImage: dragImage, + proposedAction: 'move', + supportedActions: 'move', + }); + // Hide the tab node in the original tab. + tab.classList.add('lm-mod-hidden'); + /* */ + tab.classList.add('p-mod-hidden'); + // Create the cleanup callback. + var cleanup = (function () { + _this._drag = null; + tab.classList.remove('lm-mod-hidden'); + /* */ + tab.classList.remove('p-mod-hidden'); + }); + // Start the drag operation and cleanup when done. + this._drag.start(clientX, clientY).then(cleanup); + }; + return DockPanel; + }(Widget)); + /** + * The namespace for the `DockPanel` class statics. + */ + (function (DockPanel) { + /** + * A concrete implementation of `IOverlay`. + * + * This is the default overlay implementation for a dock panel. + */ + var Overlay = /** @class */ (function () { + /** + * Construct a new overlay. + */ + function Overlay() { + this._timer = -1; + this._hidden = true; + this.node = document.createElement('div'); + this.node.classList.add('lm-DockPanel-overlay'); + this.node.classList.add('lm-mod-hidden'); + /* */ + this.node.classList.add('p-DockPanel-overlay'); + this.node.classList.add('p-mod-hidden'); + this.node.style.position = 'absolute'; + } + /** + * Show the overlay using the given overlay geometry. + * + * @param geo - The desired geometry for the overlay. + */ + Overlay.prototype.show = function (geo) { + // Update the position of the overlay. + var style = this.node.style; + style.top = geo.top + "px"; + style.left = geo.left + "px"; + style.right = geo.right + "px"; + style.bottom = geo.bottom + "px"; + // Clear any pending hide timer. + clearTimeout(this._timer); + this._timer = -1; + // If the overlay is already visible, we're done. + if (!this._hidden) { + return; + } + // Clear the hidden flag. + this._hidden = false; + // Finally, show the overlay. + this.node.classList.remove('lm-mod-hidden'); + /* */ + this.node.classList.remove('p-mod-hidden'); + }; + /** + * Hide the overlay node. + * + * @param delay - The delay (in ms) before hiding the overlay. + * A delay value <= 0 will hide the overlay immediately. + */ + Overlay.prototype.hide = function (delay) { + var _this = this; + // Do nothing if the overlay is already hidden. + if (this._hidden) { + return; + } + // Hide immediately if the delay is <= 0. + if (delay <= 0) { + clearTimeout(this._timer); + this._timer = -1; + this._hidden = true; + this.node.classList.add('lm-mod-hidden'); + /* */ + this.node.classList.add('p-mod-hidden'); + return; + } + // Do nothing if a hide is already pending. + if (this._timer !== -1) { + return; + } + // Otherwise setup the hide timer. + this._timer = window.setTimeout(function () { + _this._timer = -1; + _this._hidden = true; + _this.node.classList.add('lm-mod-hidden'); + /* */ + _this.node.classList.add('p-mod-hidden'); + }, delay); + }; + return Overlay; + }()); + DockPanel.Overlay = Overlay; + /** + * The default implementation of `IRenderer`. + */ + var Renderer = /** @class */ (function () { + function Renderer() { + } + /** + * Create a new tab bar for use with a dock panel. + * + * @returns A new tab bar for a dock panel. + */ + Renderer.prototype.createTabBar = function () { + var bar = new TabBar(); + bar.addClass('lm-DockPanel-tabBar'); + /* */ + bar.addClass('p-DockPanel-tabBar'); + /* */ + return bar; + }; + /** + * Create a new handle node for use with a dock panel. + * + * @returns A new handle node for a dock panel. + */ + Renderer.prototype.createHandle = function () { + var handle = document.createElement('div'); + handle.className = 'lm-DockPanel-handle'; + /* */ + handle.classList.add('p-DockPanel-handle'); + return handle; + }; + return Renderer; + }()); + DockPanel.Renderer = Renderer; + /** + * The default `Renderer` instance. + */ + DockPanel.defaultRenderer = new Renderer(); + })(DockPanel || (DockPanel = {})); + /** + * The namespace for the module implementation details. + */ + var Private$a; + (function (Private) { + /** + * A fraction used for sizing root panels; ~= `1 / golden_ratio`. + */ + Private.GOLDEN_RATIO = 0.618; + /** + * The default sizes for the edge drop zones, in pixels. + */ + Private.DEFAULT_EDGES = { + /** + * The size of the top edge dock zone for the root panel, in pixels. + * This is different from the others to distinguish between the top + * tab bar and the top root zone. + */ + top: 12, + /** + * The size of the edge dock zone for the root panel, in pixels. + */ + right: 40, + /** + * The size of the edge dock zone for the root panel, in pixels. + */ + bottom: 40, + /** + * The size of the edge dock zone for the root panel, in pixels. + */ + left: 40 + }; + /** + * A singleton `'layout-modified'` conflatable message. + */ + Private.LayoutModified = new ConflatableMessage('layout-modified'); + /** + * An attached property used to track generated tab bars. + */ + Private.isGeneratedTabBarProperty = new AttachedProperty({ + name: 'isGeneratedTabBar', + create: function () { return false; } + }); + /** + * Create a single document config for the widgets in a dock panel. + */ + function createSingleDocumentConfig(panel) { + // Return an empty config if the panel is empty. + if (panel.isEmpty) { + return { main: null }; + } + // Get a flat array of the widgets in the panel. + var widgets = toArray$1(panel.widgets()); + // Get the first selected widget in the panel. + var selected = panel.selectedWidgets().next(); + // Compute the current index for the new config. + var currentIndex = selected ? widgets.indexOf(selected) : -1; + // Return the single document config. + return { main: { type: 'tab-area', widgets: widgets, currentIndex: currentIndex } }; + } + Private.createSingleDocumentConfig = createSingleDocumentConfig; + /** + * Find the drop target at the given client position. + */ + function findDropTarget(panel, clientX, clientY, edges) { + // Bail if the mouse is not over the dock panel. + if (!ElementExt.hitTest(panel.node, clientX, clientY)) { + return { zone: 'invalid', target: null }; + } + // Look up the layout for the panel. + var layout = panel.layout; + // If the layout is empty, indicate the entire root drop zone. + if (layout.isEmpty) { + return { zone: 'root-all', target: null }; + } + // Test the edge zones when in multiple document mode. + if (panel.mode === 'multiple-document') { + // Get the client rect for the dock panel. + var panelRect = panel.node.getBoundingClientRect(); + // Compute the distance to each edge of the panel. + var pl = clientX - panelRect.left + 1; + var pt = clientY - panelRect.top + 1; + var pr = panelRect.right - clientX; + var pb = panelRect.bottom - clientY; + // Find the minimum distance to an edge. + var pd = Math.min(pt, pr, pb, pl); + // Return a root zone if the mouse is within an edge. + switch (pd) { + case pt: + if (pt < edges.top) { + return { zone: 'root-top', target: null }; + } + break; + case pr: + if (pr < edges.right) { + return { zone: 'root-right', target: null }; + } + break; + case pb: + if (pb < edges.bottom) { + return { zone: 'root-bottom', target: null }; + } + break; + case pl: + if (pl < edges.left) { + return { zone: 'root-left', target: null }; + } + break; + default: + throw 'unreachable'; + } + } + // Hit test the dock layout at the given client position. + var target = layout.hitTestTabAreas(clientX, clientY); + // Bail if no target area was found. + if (!target) { + return { zone: 'invalid', target: null }; + } + // Return the whole tab area when in single document mode. + if (panel.mode === 'single-document') { + return { zone: 'widget-all', target: target }; + } + // Compute the distance to each edge of the tab area. + var al = target.x - target.left + 1; + var at = target.y - target.top + 1; + var ar = target.left + target.width - target.x; + var ab = target.top + target.height - target.y; + var tabHeight = target.tabBar.node.getBoundingClientRect().height; + if (at < tabHeight) { + return { zone: 'widget-tab', target: target }; + } + // Get the X and Y edge sizes for the area. + var rx = Math.round(target.width / 3); + var ry = Math.round(target.height / 3); + // If the mouse is not within an edge, indicate the entire area. + if (al > rx && ar > rx && at > ry && ab > ry) { + return { zone: 'widget-all', target: target }; + } + // Scale the distances by the slenderness ratio. + al /= rx; + at /= ry; + ar /= rx; + ab /= ry; + // Find the minimum distance to the area edge. + var ad = Math.min(al, at, ar, ab); + // Find the widget zone for the area edge. + var zone; + switch (ad) { + case al: + zone = 'widget-left'; + break; + case at: + zone = 'widget-top'; + break; + case ar: + zone = 'widget-right'; + break; + case ab: + zone = 'widget-bottom'; + break; + default: + throw 'unreachable'; + } + // Return the final drop target. + return { zone: zone, target: target }; + } + Private.findDropTarget = findDropTarget; + /** + * Get the drop reference widget for a tab bar. + */ + function getDropRef(tabBar) { + if (tabBar.titles.length === 0) { + return null; + } + if (tabBar.currentTitle) { + return tabBar.currentTitle.owner; + } + return tabBar.titles[tabBar.titles.length - 1].owner; + } + Private.getDropRef = getDropRef; + })(Private$a || (Private$a = {})); + + // Copyright (c) Jupyter Development Team. + /** + * A class which tracks focus among a set of widgets. + * + * This class is useful when code needs to keep track of the most + * recently focused widget(s) among a set of related widgets. + */ + var FocusTracker = /** @class */ (function () { + /** + * Construct a new focus tracker. + */ + function FocusTracker() { + this._counter = 0; + this._widgets = []; + this._activeWidget = null; + this._currentWidget = null; + this._numbers = new Map(); + this._nodes = new Map(); + this._activeChanged = new Signal(this); + this._currentChanged = new Signal(this); + } + /** + * Dispose of the resources held by the tracker. + */ + FocusTracker.prototype.dispose = function () { + var _this = this; + // Do nothing if the tracker is already disposed. + if (this._counter < 0) { + return; + } + // Mark the tracker as disposed. + this._counter = -1; + // Clear the connections for the tracker. + Signal.clearData(this); + // Remove all event listeners. + each$1(this._widgets, function (w) { + w.node.removeEventListener('focus', _this, true); + w.node.removeEventListener('blur', _this, true); + }); + // Clear the internal data structures. + this._activeWidget = null; + this._currentWidget = null; + this._nodes.clear(); + this._numbers.clear(); + this._widgets.length = 0; + }; + Object.defineProperty(FocusTracker.prototype, "currentChanged", { + /** + * A signal emitted when the current widget has changed. + */ + get: function () { + return this._currentChanged; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FocusTracker.prototype, "activeChanged", { + /** + * A signal emitted when the active widget has changed. + */ + get: function () { + return this._activeChanged; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FocusTracker.prototype, "isDisposed", { + /** + * A flag indicating whether the tracker is disposed. + */ + get: function () { + return this._counter < 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FocusTracker.prototype, "currentWidget", { + /** + * The current widget in the tracker. + * + * #### Notes + * The current widget is the widget among the tracked widgets which + * has the *descendant node* which has most recently been focused. + * + * The current widget will not be updated if the node loses focus. It + * will only be updated when a different tracked widget gains focus. + * + * If the current widget is removed from the tracker, the previous + * current widget will be restored. + * + * This behavior is intended to follow a user's conceptual model of + * a semantically "current" widget, where the "last thing of type X" + * to be interacted with is the "current instance of X", regardless + * of whether that instance still has focus. + */ + get: function () { + return this._currentWidget; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FocusTracker.prototype, "activeWidget", { + /** + * The active widget in the tracker. + * + * #### Notes + * The active widget is the widget among the tracked widgets which + * has the *descendant node* which is currently focused. + */ + get: function () { + return this._activeWidget; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FocusTracker.prototype, "widgets", { + /** + * A read only array of the widgets being tracked. + */ + get: function () { + return this._widgets; + }, + enumerable: true, + configurable: true + }); + /** + * Get the focus number for a particular widget in the tracker. + * + * @param widget - The widget of interest. + * + * @returns The focus number for the given widget, or `-1` if the + * widget has not had focus since being added to the tracker, or + * is not contained by the tracker. + * + * #### Notes + * The focus number indicates the relative order in which the widgets + * have gained focus. A widget with a larger number has gained focus + * more recently than a widget with a smaller number. + * + * The `currentWidget` will always have the largest focus number. + * + * All widgets start with a focus number of `-1`, which indicates that + * the widget has not been focused since being added to the tracker. + */ + FocusTracker.prototype.focusNumber = function (widget) { + var n = this._numbers.get(widget); + return n === undefined ? -1 : n; + }; + /** + * Test whether the focus tracker contains a given widget. + * + * @param widget - The widget of interest. + * + * @returns `true` if the widget is tracked, `false` otherwise. + */ + FocusTracker.prototype.has = function (widget) { + return this._numbers.has(widget); + }; + /** + * Add a widget to the focus tracker. + * + * @param widget - The widget of interest. + * + * #### Notes + * A widget will be automatically removed from the tracker if it + * is disposed after being added. + * + * If the widget is already tracked, this is a no-op. + */ + FocusTracker.prototype.add = function (widget) { + // Do nothing if the widget is already tracked. + if (this._numbers.has(widget)) { + return; + } + // Test whether the widget has focus. + var focused = widget.node.contains(document.activeElement); + // Set up the initial focus number. + var n = focused ? this._counter++ : -1; + // Add the widget to the internal data structures. + this._widgets.push(widget); + this._numbers.set(widget, n); + this._nodes.set(widget.node, widget); + // Set up the event listeners. The capturing phase must be used + // since the 'focus' and 'blur' events don't bubble and Firefox + // doesn't support the 'focusin' or 'focusout' events. + widget.node.addEventListener('focus', this, true); + widget.node.addEventListener('blur', this, true); + // Connect the disposed signal handler. + widget.disposed.connect(this._onWidgetDisposed, this); + // Set the current and active widgets if needed. + if (focused) { + this._setWidgets(widget, widget); + } + }; + /** + * Remove a widget from the focus tracker. + * + * #### Notes + * If the widget is the `currentWidget`, the previous current widget + * will become the new `currentWidget`. + * + * A widget will be automatically removed from the tracker if it + * is disposed after being added. + * + * If the widget is not tracked, this is a no-op. + */ + FocusTracker.prototype.remove = function (widget) { + var _this = this; + // Bail early if the widget is not tracked. + if (!this._numbers.has(widget)) { + return; + } + // Disconnect the disposed signal handler. + widget.disposed.disconnect(this._onWidgetDisposed, this); + // Remove the event listeners. + widget.node.removeEventListener('focus', this, true); + widget.node.removeEventListener('blur', this, true); + // Remove the widget from the internal data structures. + ArrayExt.removeFirstOf(this._widgets, widget); + this._nodes.delete(widget.node); + this._numbers.delete(widget); + // Bail early if the widget is not the current widget. + if (this._currentWidget !== widget) { + return; + } + // Filter the widgets for those which have had focus. + var valid = filter$1(this._widgets, function (w) { return _this._numbers.get(w) !== -1; }); + // Get the valid widget with the max focus number. + var previous = max$1(valid, function (first, second) { + var a = _this._numbers.get(first); + var b = _this._numbers.get(second); + return a - b; + }) || null; + // Set the current and active widgets. + this._setWidgets(previous, null); + }; + /** + * Handle the DOM events for the focus tracker. + * + * @param event - The DOM event sent to the panel. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the tracked nodes. It should + * not be called directly by user code. + */ + FocusTracker.prototype.handleEvent = function (event) { + switch (event.type) { + case 'focus': + this._evtFocus(event); + break; + case 'blur': + this._evtBlur(event); + break; + } + }; + /** + * Set the current and active widgets for the tracker. + */ + FocusTracker.prototype._setWidgets = function (current, active) { + // Swap the current widget. + var oldCurrent = this._currentWidget; + this._currentWidget = current; + // Swap the active widget. + var oldActive = this._activeWidget; + this._activeWidget = active; + // Emit the `currentChanged` signal if needed. + if (oldCurrent !== current) { + this._currentChanged.emit({ oldValue: oldCurrent, newValue: current }); + } + // Emit the `activeChanged` signal if needed. + if (oldActive !== active) { + this._activeChanged.emit({ oldValue: oldActive, newValue: active }); + } + }; + /** + * Handle the `'focus'` event for a tracked widget. + */ + FocusTracker.prototype._evtFocus = function (event) { + // Find the widget which gained focus, which is known to exist. + var widget = this._nodes.get(event.currentTarget); + // Update the focus number if necessary. + if (widget !== this._currentWidget) { + this._numbers.set(widget, this._counter++); + } + // Set the current and active widgets. + this._setWidgets(widget, widget); + }; + /** + * Handle the `'blur'` event for a tracked widget. + */ + FocusTracker.prototype._evtBlur = function (event) { + // Find the widget which lost focus, which is known to exist. + var widget = this._nodes.get(event.currentTarget); + // Get the node which being focused after this blur. + var focusTarget = event.relatedTarget; + // If no other node is being focused, clear the active widget. + if (!focusTarget) { + this._setWidgets(this._currentWidget, null); + return; + } + // Bail if the focus widget is not changing. + if (widget.node.contains(focusTarget)) { + return; + } + // If no tracked widget is being focused, clear the active widget. + if (!find$1(this._widgets, function (w) { return w.node.contains(focusTarget); })) { + this._setWidgets(this._currentWidget, null); + return; + } + }; + /** + * Handle the `disposed` signal for a tracked widget. + */ + FocusTracker.prototype._onWidgetDisposed = function (sender) { + this.remove(sender); + }; + return FocusTracker; + }()); + + /** + * A layout which arranges its widgets in a grid. + */ + var GridLayout = /** @class */ (function (_super) { + __extends$5(GridLayout, _super); + /** + * Construct a new grid layout. + * + * @param options - The options for initializing the layout. + */ + function GridLayout(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this, options) || this; + _this._dirty = false; + _this._rowSpacing = 4; + _this._columnSpacing = 4; + _this._items = []; + _this._rowStarts = []; + _this._columnStarts = []; + _this._rowSizers = [new BoxSizer()]; + _this._columnSizers = [new BoxSizer()]; + _this._box = null; + if (options.rowCount !== undefined) { + Private$b.reallocSizers(_this._rowSizers, options.rowCount); + } + if (options.columnCount !== undefined) { + Private$b.reallocSizers(_this._columnSizers, options.columnCount); + } + if (options.rowSpacing !== undefined) { + _this._rowSpacing = Private$b.clampValue(options.rowSpacing); + } + if (options.columnSpacing !== undefined) { + _this._columnSpacing = Private$b.clampValue(options.columnSpacing); + } + return _this; + } + /** + * Dispose of the resources held by the layout. + */ + GridLayout.prototype.dispose = function () { + // Dispose of the widgets and layout items. + each$1(this._items, function (item) { + var widget = item.widget; + item.dispose(); + widget.dispose(); + }); + // Clear the layout state. + this._box = null; + this._items.length = 0; + this._rowStarts.length = 0; + this._rowSizers.length = 0; + this._columnStarts.length = 0; + this._columnSizers.length = 0; + // Dispose of the rest of the layout. + _super.prototype.dispose.call(this); + }; + Object.defineProperty(GridLayout.prototype, "rowCount", { + /** + * Get the number of rows in the layout. + */ + get: function () { + return this._rowSizers.length; + }, + /** + * Set the number of rows in the layout. + * + * #### Notes + * The minimum row count is `1`. + */ + set: function (value) { + // Do nothing if the row count does not change. + if (value === this.rowCount) { + return; + } + // Reallocate the row sizers. + Private$b.reallocSizers(this._rowSizers, value); + // Schedule a fit of the parent. + if (this.parent) { + this.parent.fit(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(GridLayout.prototype, "columnCount", { + /** + * Get the number of columns in the layout. + */ + get: function () { + return this._columnSizers.length; + }, + /** + * Set the number of columns in the layout. + * + * #### Notes + * The minimum column count is `1`. + */ + set: function (value) { + // Do nothing if the column count does not change. + if (value === this.columnCount) { + return; + } + // Reallocate the column sizers. + Private$b.reallocSizers(this._columnSizers, value); + // Schedule a fit of the parent. + if (this.parent) { + this.parent.fit(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(GridLayout.prototype, "rowSpacing", { + /** + * Get the row spacing for the layout. + */ + get: function () { + return this._rowSpacing; + }, + /** + * Set the row spacing for the layout. + */ + set: function (value) { + // Clamp the spacing to the allowed range. + value = Private$b.clampValue(value); + // Bail if the spacing does not change + if (this._rowSpacing === value) { + return; + } + // Update the internal spacing. + this._rowSpacing = value; + // Schedule a fit of the parent. + if (this.parent) { + this.parent.fit(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(GridLayout.prototype, "columnSpacing", { + /** + * Get the column spacing for the layout. + */ + get: function () { + return this._columnSpacing; + }, + /** + * Set the col spacing for the layout. + */ + set: function (value) { + // Clamp the spacing to the allowed range. + value = Private$b.clampValue(value); + // Bail if the spacing does not change + if (this._columnSpacing === value) { + return; + } + // Update the internal spacing. + this._columnSpacing = value; + // Schedule a fit of the parent. + if (this.parent) { + this.parent.fit(); + } + }, + enumerable: true, + configurable: true + }); + /** + * Get the stretch factor for a specific row. + * + * @param index - The row index of interest. + * + * @returns The stretch factor for the row. + * + * #### Notes + * This returns `-1` if the index is out of range. + */ + GridLayout.prototype.rowStretch = function (index) { + var sizer = this._rowSizers[index]; + return sizer ? sizer.stretch : -1; + }; + /** + * Set the stretch factor for a specific row. + * + * @param index - The row index of interest. + * + * @param value - The stretch factor for the row. + * + * #### Notes + * This is a no-op if the index is out of range. + */ + GridLayout.prototype.setRowStretch = function (index, value) { + // Look up the row sizer. + var sizer = this._rowSizers[index]; + // Bail if the index is out of range. + if (!sizer) { + return; + } + // Clamp the value to the allowed range. + value = Private$b.clampValue(value); + // Bail if the stretch does not change. + if (sizer.stretch === value) { + return; + } + // Update the sizer stretch. + sizer.stretch = value; + // Schedule an update of the parent. + if (this.parent) { + this.parent.update(); + } + }; + /** + * Get the stretch factor for a specific column. + * + * @param index - The column index of interest. + * + * @returns The stretch factor for the column. + * + * #### Notes + * This returns `-1` if the index is out of range. + */ + GridLayout.prototype.columnStretch = function (index) { + var sizer = this._columnSizers[index]; + return sizer ? sizer.stretch : -1; + }; + /** + * Set the stretch factor for a specific column. + * + * @param index - The column index of interest. + * + * @param value - The stretch factor for the column. + * + * #### Notes + * This is a no-op if the index is out of range. + */ + GridLayout.prototype.setColumnStretch = function (index, value) { + // Look up the column sizer. + var sizer = this._columnSizers[index]; + // Bail if the index is out of range. + if (!sizer) { + return; + } + // Clamp the value to the allowed range. + value = Private$b.clampValue(value); + // Bail if the stretch does not change. + if (sizer.stretch === value) { + return; + } + // Update the sizer stretch. + sizer.stretch = value; + // Schedule an update of the parent. + if (this.parent) { + this.parent.update(); + } + }; + /** + * Create an iterator over the widgets in the layout. + * + * @returns A new iterator over the widgets in the layout. + */ + GridLayout.prototype.iter = function () { + return map$1(this._items, function (item) { return item.widget; }); + }; + /** + * Add a widget to the grid layout. + * + * @param widget - The widget to add to the layout. + * + * #### Notes + * If the widget is already contained in the layout, this is no-op. + */ + GridLayout.prototype.addWidget = function (widget) { + // Look up the index for the widget. + var i = ArrayExt.findFirstIndex(this._items, function (it) { return it.widget === widget; }); + // Bail if the widget is already in the layout. + if (i !== -1) { + return; + } + // Add the widget to the layout. + this._items.push(new LayoutItem(widget)); + // Attach the widget to the parent. + if (this.parent) { + this.attachWidget(widget); + } + }; + /** + * Remove a widget from the grid layout. + * + * @param widget - The widget to remove from the layout. + * + * #### Notes + * A widget is automatically removed from the layout when its `parent` + * is set to `null`. This method should only be invoked directly when + * removing a widget from a layout which has yet to be installed on a + * parent widget. + * + * This method does *not* modify the widget's `parent`. + */ + GridLayout.prototype.removeWidget = function (widget) { + // Look up the index for the widget. + var i = ArrayExt.findFirstIndex(this._items, function (it) { return it.widget === widget; }); + // Bail if the widget is not in the layout. + if (i === -1) { + return; + } + // Remove the widget from the layout. + var item = ArrayExt.removeAt(this._items, i); + // Detach the widget from the parent. + if (this.parent) { + this.detachWidget(widget); + } + // Dispose the layout item. + item.dispose(); + }; + /** + * Perform layout initialization which requires the parent widget. + */ + GridLayout.prototype.init = function () { + var _this = this; + _super.prototype.init.call(this); + each$1(this, function (widget) { _this.attachWidget(widget); }); + }; + /** + * Attach a widget to the parent's DOM node. + * + * @param widget - The widget to attach to the parent. + */ + GridLayout.prototype.attachWidget = function (widget) { + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Add the widget's node to the parent. + this.parent.node.appendChild(widget.node); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * Detach a widget from the parent's DOM node. + * + * @param widget - The widget to detach from the parent. + */ + GridLayout.prototype.detachWidget = function (widget) { + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget's node from the parent. + this.parent.node.removeChild(widget.node); + // Send an `'after-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * A message handler invoked on a `'before-show'` message. + */ + GridLayout.prototype.onBeforeShow = function (msg) { + _super.prototype.onBeforeShow.call(this, msg); + this.parent.update(); + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + GridLayout.prototype.onBeforeAttach = function (msg) { + _super.prototype.onBeforeAttach.call(this, msg); + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-shown'` message. + */ + GridLayout.prototype.onChildShown = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-hidden'` message. + */ + GridLayout.prototype.onChildHidden = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'resize'` message. + */ + GridLayout.prototype.onResize = function (msg) { + if (this.parent.isVisible) { + this._update(msg.width, msg.height); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + GridLayout.prototype.onUpdateRequest = function (msg) { + if (this.parent.isVisible) { + this._update(-1, -1); + } + }; + /** + * A message handler invoked on a `'fit-request'` message. + */ + GridLayout.prototype.onFitRequest = function (msg) { + if (this.parent.isAttached) { + this._fit(); + } + }; + /** + * Fit the layout to the total size required by the widgets. + */ + GridLayout.prototype._fit = function () { + // Reset the min sizes of the sizers. + for (var i = 0, n = this.rowCount; i < n; ++i) { + this._rowSizers[i].minSize = 0; + } + for (var i = 0, n = this.columnCount; i < n; ++i) { + this._columnSizers[i].minSize = 0; + } + // Filter for the visible layout items. + var items = this._items.filter(function (it) { return !it.isHidden; }); + // Fit the layout items. + for (var i = 0, n = items.length; i < n; ++i) { + items[i].fit(); + } + // Get the max row and column index. + var maxRow = this.rowCount - 1; + var maxCol = this.columnCount - 1; + // Sort the items by row span. + items.sort(Private$b.rowSpanCmp); + // Update the min sizes of the row sizers. + for (var i = 0, n = items.length; i < n; ++i) { + // Fetch the item. + var item = items[i]; + // Get the row bounds for the item. + var config = GridLayout.getCellConfig(item.widget); + var r1 = Math.min(config.row, maxRow); + var r2 = Math.min(config.row + config.rowSpan - 1, maxRow); + // Distribute the minimum height to the sizers as needed. + Private$b.distributeMin(this._rowSizers, r1, r2, item.minHeight); + } + // Sort the items by column span. + items.sort(Private$b.columnSpanCmp); + // Update the min sizes of the column sizers. + for (var i = 0, n = items.length; i < n; ++i) { + // Fetch the item. + var item = items[i]; + // Get the column bounds for the item. + var config = GridLayout.getCellConfig(item.widget); + var c1 = Math.min(config.column, maxCol); + var c2 = Math.min(config.column + config.columnSpan - 1, maxCol); + // Distribute the minimum width to the sizers as needed. + Private$b.distributeMin(this._columnSizers, c1, c2, item.minWidth); + } + // If no size constraint is needed, just update the parent. + if (this.fitPolicy === 'set-no-constraint') { + MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest); + return; + } + // Set up the computed min size. + var minH = maxRow * this._rowSpacing; + var minW = maxCol * this._columnSpacing; + // Add the sizer minimums to the computed min size. + for (var i = 0, n = this.rowCount; i < n; ++i) { + minH += this._rowSizers[i].minSize; + } + for (var i = 0, n = this.columnCount; i < n; ++i) { + minW += this._columnSizers[i].minSize; + } + // Update the box sizing and add it to the computed min size. + var box = this._box = ElementExt.boxSizing(this.parent.node); + minW += box.horizontalSum; + minH += box.verticalSum; + // Update the parent's min size constraints. + var style = this.parent.node.style; + style.minWidth = minW + "px"; + style.minHeight = minH + "px"; + // Set the dirty flag to ensure only a single update occurs. + this._dirty = true; + // Notify the ancestor that it should fit immediately. This may + // cause a resize of the parent, fulfilling the required update. + if (this.parent.parent) { + MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest); + } + // If the dirty flag is still set, the parent was not resized. + // Trigger the required update on the parent widget immediately. + if (this._dirty) { + MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest); + } + }; + /** + * Update the layout position and size of the widgets. + * + * The parent offset dimensions should be `-1` if unknown. + */ + GridLayout.prototype._update = function (offsetWidth, offsetHeight) { + // Clear the dirty flag to indicate the update occurred. + this._dirty = false; + // Measure the parent if the offset dimensions are unknown. + if (offsetWidth < 0) { + offsetWidth = this.parent.node.offsetWidth; + } + if (offsetHeight < 0) { + offsetHeight = this.parent.node.offsetHeight; + } + // Ensure the parent box sizing data is computed. + if (!this._box) { + this._box = ElementExt.boxSizing(this.parent.node); + } + // Compute the layout area adjusted for border and padding. + var top = this._box.paddingTop; + var left = this._box.paddingLeft; + var width = offsetWidth - this._box.horizontalSum; + var height = offsetHeight - this._box.verticalSum; + // Get the max row and column index. + var maxRow = this.rowCount - 1; + var maxCol = this.columnCount - 1; + // Compute the total fixed row and column space. + var fixedRowSpace = maxRow * this._rowSpacing; + var fixedColSpace = maxCol * this._columnSpacing; + // Distribute the available space to the box sizers. + BoxEngine.calc(this._rowSizers, Math.max(0, height - fixedRowSpace)); + BoxEngine.calc(this._columnSizers, Math.max(0, width - fixedColSpace)); + // Update the row start positions. + for (var i = 0, pos = top, n = this.rowCount; i < n; ++i) { + this._rowStarts[i] = pos; + pos += this._rowSizers[i].size + this._rowSpacing; + } + // Update the column start positions. + for (var i = 0, pos = left, n = this.columnCount; i < n; ++i) { + this._columnStarts[i] = pos; + pos += this._columnSizers[i].size + this._columnSpacing; + } + // Update the geometry of the layout items. + for (var i = 0, n = this._items.length; i < n; ++i) { + // Fetch the item. + var item = this._items[i]; + // Ignore hidden items. + if (item.isHidden) { + continue; + } + // Fetch the cell bounds for the widget. + var config = GridLayout.getCellConfig(item.widget); + var r1 = Math.min(config.row, maxRow); + var c1 = Math.min(config.column, maxCol); + var r2 = Math.min(config.row + config.rowSpan - 1, maxRow); + var c2 = Math.min(config.column + config.columnSpan - 1, maxCol); + // Compute the cell geometry. + var x = this._columnStarts[c1]; + var y = this._rowStarts[r1]; + var w = this._columnStarts[c2] + this._columnSizers[c2].size - x; + var h = this._rowStarts[r2] + this._rowSizers[r2].size - y; + // Update the geometry of the layout item. + item.update(x, y, w, h); + } + }; + return GridLayout; + }(Layout)); + /** + * The namespace for the `GridLayout` class statics. + */ + (function (GridLayout) { + /** + * Get the cell config for the given widget. + * + * @param widget - The widget of interest. + * + * @returns The cell config for the widget. + */ + function getCellConfig(widget) { + return Private$b.cellConfigProperty.get(widget); + } + GridLayout.getCellConfig = getCellConfig; + /** + * Set the cell config for the given widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the cell config. + */ + function setCellConfig(widget, value) { + Private$b.cellConfigProperty.set(widget, Private$b.normalizeConfig(value)); + } + GridLayout.setCellConfig = setCellConfig; + })(GridLayout || (GridLayout = {})); + /** + * The namespace for the module implementation details. + */ + var Private$b; + (function (Private) { + /** + * The property descriptor for the widget cell config. + */ + Private.cellConfigProperty = new AttachedProperty({ + name: 'cellConfig', + create: function () { return ({ row: 0, column: 0, rowSpan: 1, columnSpan: 1 }); }, + changed: onChildCellConfigChanged + }); + /** + * Normalize a partial cell config object. + */ + function normalizeConfig(config) { + var row = Math.max(0, Math.floor(config.row || 0)); + var column = Math.max(0, Math.floor(config.column || 0)); + var rowSpan = Math.max(1, Math.floor(config.rowSpan || 0)); + var columnSpan = Math.max(1, Math.floor(config.columnSpan || 0)); + return { row: row, column: column, rowSpan: rowSpan, columnSpan: columnSpan }; + } + Private.normalizeConfig = normalizeConfig; + /** + * Clamp a value to an integer >= 0. + */ + function clampValue(value) { + return Math.max(0, Math.floor(value)); + } + Private.clampValue = clampValue; + /** + * A sort comparison function for row spans. + */ + function rowSpanCmp(a, b) { + var c1 = Private.cellConfigProperty.get(a.widget); + var c2 = Private.cellConfigProperty.get(b.widget); + return c1.rowSpan - c2.rowSpan; + } + Private.rowSpanCmp = rowSpanCmp; + /** + * A sort comparison function for column spans. + */ + function columnSpanCmp(a, b) { + var c1 = Private.cellConfigProperty.get(a.widget); + var c2 = Private.cellConfigProperty.get(b.widget); + return c1.columnSpan - c2.columnSpan; + } + Private.columnSpanCmp = columnSpanCmp; + /** + * Reallocate the box sizers for the given grid dimensions. + */ + function reallocSizers(sizers, count) { + // Coerce the count to the valid range. + count = Math.max(1, Math.floor(count)); + // Add the missing sizers. + while (sizers.length < count) { + sizers.push(new BoxSizer()); + } + // Remove the extra sizers. + if (sizers.length > count) { + sizers.length = count; + } + } + Private.reallocSizers = reallocSizers; + /** + * Distribute a min size constraint across a range of sizers. + */ + function distributeMin(sizers, i1, i2, minSize) { + // Sanity check the indices. + if (i2 < i1) { + return; + } + // Handle the simple case of no cell span. + if (i1 === i2) { + var sizer = sizers[i1]; + sizer.minSize = Math.max(sizer.minSize, minSize); + return; + } + // Compute the total current min size of the span. + var totalMin = 0; + for (var i = i1; i <= i2; ++i) { + totalMin += sizers[i].minSize; + } + // Do nothing if the total is greater than the required. + if (totalMin >= minSize) { + return; + } + // Compute the portion of the space to allocate to each sizer. + var portion = (minSize - totalMin) / (i2 - i1 + 1); + // Add the portion to each sizer. + for (var i = i1; i <= i2; ++i) { + sizers[i].minSize += portion; + } + } + Private.distributeMin = distributeMin; + /** + * The change handler for the child cell config property. + */ + function onChildCellConfigChanged(child) { + if (child.parent && child.parent.layout instanceof GridLayout) { + child.parent.fit(); + } + } + })(Private$b || (Private$b = {})); + + /** + * A widget which displays menus as a canonical menu bar. + */ + var MenuBar = /** @class */ (function (_super) { + __extends$5(MenuBar, _super); + /** + * Construct a new menu bar. + * + * @param options - The options for initializing the menu bar. + */ + function MenuBar(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this, { node: Private$c.createNode() }) || this; + _this._activeIndex = -1; + _this._menus = []; + _this._childMenu = null; + _this.addClass('lm-MenuBar'); + /* */ + _this.addClass('p-MenuBar'); + /* */ + _this.setFlag(Widget.Flag.DisallowLayout); + _this.renderer = options.renderer || MenuBar.defaultRenderer; + return _this; + } + /** + * Dispose of the resources held by the widget. + */ + MenuBar.prototype.dispose = function () { + this._closeChildMenu(); + this._menus.length = 0; + _super.prototype.dispose.call(this); + }; + Object.defineProperty(MenuBar.prototype, "childMenu", { + /** + * The child menu of the menu bar. + * + * #### Notes + * This will be `null` if the menu bar does not have an open menu. + */ + get: function () { + return this._childMenu; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuBar.prototype, "contentNode", { + /** + * Get the menu bar content node. + * + * #### Notes + * This is the node which holds the menu title nodes. + * + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-MenuBar-content')[0]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuBar.prototype, "activeMenu", { + /** + * Get the currently active menu. + */ + get: function () { + return this._menus[this._activeIndex] || null; + }, + /** + * Set the currently active menu. + * + * #### Notes + * If the menu does not exist, the menu will be set to `null`. + */ + set: function (value) { + this.activeIndex = value ? this._menus.indexOf(value) : -1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuBar.prototype, "activeIndex", { + /** + * Get the index of the currently active menu. + * + * #### Notes + * This will be `-1` if no menu is active. + */ + get: function () { + return this._activeIndex; + }, + /** + * Set the index of the currently active menu. + * + * #### Notes + * If the menu cannot be activated, the index will be set to `-1`. + */ + set: function (value) { + // Adjust the value for an out of range index. + if (value < 0 || value >= this._menus.length) { + value = -1; + } + // Bail early if the index will not change. + if (this._activeIndex === value) { + return; + } + // Update the active index. + this._activeIndex = value; + // Schedule an update of the items. + this.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MenuBar.prototype, "menus", { + /** + * A read-only array of the menus in the menu bar. + */ + get: function () { + return this._menus; + }, + enumerable: true, + configurable: true + }); + /** + * Open the active menu and activate its first menu item. + * + * #### Notes + * If there is no active menu, this is a no-op. + */ + MenuBar.prototype.openActiveMenu = function () { + // Bail early if there is no active item. + if (this._activeIndex === -1) { + return; + } + // Open the child menu. + this._openChildMenu(); + // Activate the first item in the child menu. + if (this._childMenu) { + this._childMenu.activeIndex = -1; + this._childMenu.activateNextItem(); + } + }; + /** + * Add a menu to the end of the menu bar. + * + * @param menu - The menu to add to the menu bar. + * + * #### Notes + * If the menu is already added to the menu bar, it will be moved. + */ + MenuBar.prototype.addMenu = function (menu) { + this.insertMenu(this._menus.length, menu); + }; + /** + * Insert a menu into the menu bar at the specified index. + * + * @param index - The index at which to insert the menu. + * + * @param menu - The menu to insert into the menu bar. + * + * #### Notes + * The index will be clamped to the bounds of the menus. + * + * If the menu is already added to the menu bar, it will be moved. + */ + MenuBar.prototype.insertMenu = function (index, menu) { + // Close the child menu before making changes. + this._closeChildMenu(); + // Look up the index of the menu. + var i = this._menus.indexOf(menu); + // Clamp the insert index to the array bounds. + var j = Math.max(0, Math.min(index, this._menus.length)); + // If the menu is not in the array, insert it. + if (i === -1) { + // Insert the menu into the array. + ArrayExt.insert(this._menus, j, menu); + // Add the styling class to the menu. + menu.addClass('lm-MenuBar-menu'); + /* */ + menu.addClass('p-MenuBar-menu'); + /* */ + // Connect to the menu signals. + menu.aboutToClose.connect(this._onMenuAboutToClose, this); + menu.menuRequested.connect(this._onMenuMenuRequested, this); + menu.title.changed.connect(this._onTitleChanged, this); + // Schedule an update of the items. + this.update(); + // There is nothing more to do. + return; + } + // Otherwise, the menu exists in the array and should be moved. + // Adjust the index if the location is at the end of the array. + if (j === this._menus.length) { + j--; + } + // Bail if there is no effective move. + if (i === j) { + return; + } + // Move the menu to the new locations. + ArrayExt.move(this._menus, i, j); + // Schedule an update of the items. + this.update(); + }; + /** + * Remove a menu from the menu bar. + * + * @param menu - The menu to remove from the menu bar. + * + * #### Notes + * This is a no-op if the menu is not in the menu bar. + */ + MenuBar.prototype.removeMenu = function (menu) { + this.removeMenuAt(this._menus.indexOf(menu)); + }; + /** + * Remove the menu at a given index from the menu bar. + * + * @param index - The index of the menu to remove. + * + * #### Notes + * This is a no-op if the index is out of range. + */ + MenuBar.prototype.removeMenuAt = function (index) { + // Close the child menu before making changes. + this._closeChildMenu(); + // Remove the menu from the array. + var menu = ArrayExt.removeAt(this._menus, index); + // Bail if the index is out of range. + if (!menu) { + return; + } + // Disconnect from the menu signals. + menu.aboutToClose.disconnect(this._onMenuAboutToClose, this); + menu.menuRequested.disconnect(this._onMenuMenuRequested, this); + menu.title.changed.disconnect(this._onTitleChanged, this); + // Remove the styling class from the menu. + menu.removeClass('lm-MenuBar-menu'); + /* */ + menu.removeClass('p-MenuBar-menu'); + /* */ + // Schedule an update of the items. + this.update(); + }; + /** + * Remove all menus from the menu bar. + */ + MenuBar.prototype.clearMenus = function () { + // Bail if there is nothing to remove. + if (this._menus.length === 0) { + return; + } + // Close the child menu before making changes. + this._closeChildMenu(); + // Disconnect from the menu signals and remove the styling class. + for (var _i = 0, _a = this._menus; _i < _a.length; _i++) { + var menu = _a[_i]; + menu.aboutToClose.disconnect(this._onMenuAboutToClose, this); + menu.menuRequested.disconnect(this._onMenuMenuRequested, this); + menu.title.changed.disconnect(this._onTitleChanged, this); + menu.removeClass('lm-MenuBar-menu'); + /* */ + menu.removeClass('p-MenuBar-menu'); + /* */ + } + // Clear the menus array. + this._menus.length = 0; + // Schedule an update of the items. + this.update(); + }; + /** + * Handle the DOM events for the menu bar. + * + * @param event - The DOM event sent to the menu bar. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the menu bar's DOM nodes. It + * should not be called directly by user code. + */ + MenuBar.prototype.handleEvent = function (event) { + switch (event.type) { + case 'keydown': + this._evtKeyDown(event); + break; + case 'mousedown': + this._evtMouseDown(event); + break; + case 'mousemove': + this._evtMouseMove(event); + break; + case 'mouseleave': + this._evtMouseLeave(event); + break; + case 'contextmenu': + event.preventDefault(); + event.stopPropagation(); + break; + } + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + MenuBar.prototype.onBeforeAttach = function (msg) { + this.node.addEventListener('keydown', this); + this.node.addEventListener('mousedown', this); + this.node.addEventListener('mousemove', this); + this.node.addEventListener('mouseleave', this); + this.node.addEventListener('contextmenu', this); + }; + /** + * A message handler invoked on an `'after-detach'` message. + */ + MenuBar.prototype.onAfterDetach = function (msg) { + this.node.removeEventListener('keydown', this); + this.node.removeEventListener('mousedown', this); + this.node.removeEventListener('mousemove', this); + this.node.removeEventListener('mouseleave', this); + this.node.removeEventListener('contextmenu', this); + this._closeChildMenu(); + }; + /** + * A message handler invoked on an `'activate-request'` message. + */ + MenuBar.prototype.onActivateRequest = function (msg) { + if (this.isAttached) { + this.node.focus(); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + MenuBar.prototype.onUpdateRequest = function (msg) { + var menus = this._menus; + var renderer = this.renderer; + var activeIndex = this._activeIndex; + var content = new Array(menus.length); + for (var i = 0, n = menus.length; i < n; ++i) { + var title = menus[i].title; + var active = i === activeIndex; + content[i] = renderer.renderItem({ title: title, active: active }); + } + VirtualDOM.render(content, this.contentNode); + }; + /** + * Handle the `'keydown'` event for the menu bar. + */ + MenuBar.prototype._evtKeyDown = function (event) { + // A menu bar handles all keydown events. + event.preventDefault(); + event.stopPropagation(); + // Fetch the key code for the event. + var kc = event.keyCode; + // Enter, Up Arrow, Down Arrow + if (kc === 13 || kc === 38 || kc === 40) { + this.openActiveMenu(); + return; + } + // Escape + if (kc === 27) { + this._closeChildMenu(); + this.activeIndex = -1; + this.node.blur(); + return; + } + // Left Arrow + if (kc === 37) { + var i = this._activeIndex; + var n = this._menus.length; + this.activeIndex = i === 0 ? n - 1 : i - 1; + return; + } + // Right Arrow + if (kc === 39) { + var i = this._activeIndex; + var n = this._menus.length; + this.activeIndex = i === n - 1 ? 0 : i + 1; + return; + } + // Get the pressed key character. + var key = getKeyboardLayout().keyForKeydownEvent(event); + // Bail if the key is not valid. + if (!key) { + return; + } + // Search for the next best matching mnemonic item. + var start = this._activeIndex + 1; + var result = Private$c.findMnemonic(this._menus, key, start); + // Handle the requested mnemonic based on the search results. + // If exactly one mnemonic is matched, that menu is opened. + // Otherwise, the next mnemonic is activated if available, + // followed by the auto mnemonic if available. + if (result.index !== -1 && !result.multiple) { + this.activeIndex = result.index; + this.openActiveMenu(); + } + else if (result.index !== -1) { + this.activeIndex = result.index; + } + else if (result.auto !== -1) { + this.activeIndex = result.auto; + } + }; + /** + * Handle the `'mousedown'` event for the menu bar. + */ + MenuBar.prototype._evtMouseDown = function (event) { + // Bail if the mouse press was not on the menu bar. This can occur + // when the document listener is installed for an active menu bar. + if (!ElementExt.hitTest(this.node, event.clientX, event.clientY)) { + return; + } + // Stop the propagation of the event. Immediate propagation is + // also stopped so that an open menu does not handle the event. + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + // Check if the mouse is over one of the menu items. + var index = ArrayExt.findFirstIndex(this.contentNode.children, function (node) { + return ElementExt.hitTest(node, event.clientX, event.clientY); + }); + // If the press was not on an item, close the child menu. + if (index === -1) { + this._closeChildMenu(); + return; + } + // If the press was not the left mouse button, do nothing further. + if (event.button !== 0) { + return; + } + // Otherwise, toggle the open state of the child menu. + if (this._childMenu) { + this._closeChildMenu(); + this.activeIndex = index; + } + else { + this.activeIndex = index; + this._openChildMenu(); + } + }; + /** + * Handle the `'mousemove'` event for the menu bar. + */ + MenuBar.prototype._evtMouseMove = function (event) { + // Check if the mouse is over one of the menu items. + var index = ArrayExt.findFirstIndex(this.contentNode.children, function (node) { + return ElementExt.hitTest(node, event.clientX, event.clientY); + }); + // Bail early if the active index will not change. + if (index === this._activeIndex) { + return; + } + // Bail early if a child menu is open and the mouse is not over + // an item. This allows the child menu to be kept open when the + // mouse is over the empty part of the menu bar. + if (index === -1 && this._childMenu) { + return; + } + // Update the active index to the hovered item. + this.activeIndex = index; + // Open the new menu if a menu is already open. + if (this._childMenu) { + this._openChildMenu(); + } + }; + /** + * Handle the `'mouseleave'` event for the menu bar. + */ + MenuBar.prototype._evtMouseLeave = function (event) { + // Reset the active index if there is no open menu. + if (!this._childMenu) { + this.activeIndex = -1; + } + }; + /** + * Open the child menu at the active index immediately. + * + * If a different child menu is already open, it will be closed, + * even if there is no active menu. + */ + MenuBar.prototype._openChildMenu = function () { + // If there is no active menu, close the current menu. + var newMenu = this.activeMenu; + if (!newMenu) { + this._closeChildMenu(); + return; + } + // Bail if there is no effective menu change. + var oldMenu = this._childMenu; + if (oldMenu === newMenu) { + return; + } + // Swap the internal menu reference. + this._childMenu = newMenu; + // Close the current menu, or setup for the new menu. + if (oldMenu) { + oldMenu.close(); + } + else { + this.addClass('lm-mod-active'); + /* */ + this.addClass('p-mod-active'); + /* */ + document.addEventListener('mousedown', this, true); + } + // Ensure the menu bar is updated and look up the item node. + MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest); + var itemNode = this.contentNode.children[this._activeIndex]; + // Get the positioning data for the new menu. + var _a = itemNode.getBoundingClientRect(), left = _a.left, bottom = _a.bottom; + // Open the new menu at the computed location. + newMenu.open(left, bottom, { forceX: true, forceY: true }); + }; + /** + * Close the child menu immediately. + * + * This is a no-op if a child menu is not open. + */ + MenuBar.prototype._closeChildMenu = function () { + // Bail if no child menu is open. + if (!this._childMenu) { + return; + } + // Remove the active class from the menu bar. + this.removeClass('lm-mod-active'); + /* */ + this.removeClass('p-mod-active'); + /* */ + // Remove the document listeners. + document.removeEventListener('mousedown', this, true); + // Clear the internal menu reference. + var menu = this._childMenu; + this._childMenu = null; + // Close the menu. + menu.close(); + // Reset the active index. + this.activeIndex = -1; + }; + /** + * Handle the `aboutToClose` signal of a menu. + */ + MenuBar.prototype._onMenuAboutToClose = function (sender) { + // Bail if the sender is not the child menu. + if (sender !== this._childMenu) { + return; + } + // Remove the active class from the menu bar. + this.removeClass('lm-mod-active'); + /* */ + this.removeClass('p-mod-active'); + /* */ + // Remove the document listeners. + document.removeEventListener('mousedown', this, true); + // Clear the internal menu reference. + this._childMenu = null; + // Reset the active index. + this.activeIndex = -1; + }; + /** + * Handle the `menuRequested` signal of a child menu. + */ + MenuBar.prototype._onMenuMenuRequested = function (sender, args) { + // Bail if the sender is not the child menu. + if (sender !== this._childMenu) { + return; + } + // Look up the active index and menu count. + var i = this._activeIndex; + var n = this._menus.length; + // Active the next requested index. + switch (args) { + case 'next': + this.activeIndex = i === n - 1 ? 0 : i + 1; + break; + case 'previous': + this.activeIndex = i === 0 ? n - 1 : i - 1; + break; + } + // Open the active menu. + this.openActiveMenu(); + }; + /** + * Handle the `changed` signal of a title object. + */ + MenuBar.prototype._onTitleChanged = function () { + this.update(); + }; + return MenuBar; + }(Widget)); + /** + * The namespace for the `MenuBar` class statics. + */ + (function (MenuBar) { + /** + * The default implementation of `IRenderer`. + * + * #### Notes + * Subclasses are free to reimplement rendering methods as needed. + */ + var Renderer = /** @class */ (function () { + /** + * Construct a new renderer. + */ + function Renderer() { + } + /** + * Render the virtual element for a menu bar item. + * + * @param data - The data to use for rendering the item. + * + * @returns A virtual element representing the item. + */ + Renderer.prototype.renderItem = function (data) { + var className = this.createItemClass(data); + var dataset = this.createItemDataset(data); + return (h.li({ className: className, dataset: dataset }, this.renderIcon(data), this.renderLabel(data))); + }; + /** + * Render the icon element for a menu bar item. + * + * @param data - The data to use for rendering the icon. + * + * @returns A virtual element representing the item icon. + */ + Renderer.prototype.renderIcon = function (data) { + var className = this.createIconClass(data); + /* */ + if (typeof data.title.icon === 'string') { + return h.div({ className: className }, data.title.iconLabel); + } + /* */ + // if data.title.icon is undefined, it will be ignored + return h.div({ className: className }, data.title.icon, data.title.iconLabel); + }; + /** + * Render the label element for a menu item. + * + * @param data - The data to use for rendering the label. + * + * @returns A virtual element representing the item label. + */ + Renderer.prototype.renderLabel = function (data) { + var content = this.formatLabel(data); + return h.div({ className: 'lm-MenuBar-itemLabel' + /* */ + + ' p-MenuBar-itemLabel' + /* */ + }, content); + }; + /** + * Create the class name for the menu bar item. + * + * @param data - The data to use for the class name. + * + * @returns The full class name for the menu item. + */ + Renderer.prototype.createItemClass = function (data) { + var name = 'lm-MenuBar-item'; + /* */ + name += ' p-MenuBar-item'; + /* */ + if (data.title.className) { + name += " " + data.title.className; + } + if (data.active) { + name += ' lm-mod-active'; + /* */ + name += ' p-mod-active'; + /* */ + } + return name; + }; + /** + * Create the dataset for a menu bar item. + * + * @param data - The data to use for the item. + * + * @returns The dataset for the menu bar item. + */ + Renderer.prototype.createItemDataset = function (data) { + return data.title.dataset; + }; + /** + * Create the class name for the menu bar item icon. + * + * @param data - The data to use for the class name. + * + * @returns The full class name for the item icon. + */ + Renderer.prototype.createIconClass = function (data) { + var name = 'lm-MenuBar-itemIcon'; + /* */ + name += ' p-MenuBar-itemIcon'; + /* */ + var extra = data.title.iconClass; + return extra ? name + " " + extra : name; + }; + /** + * Create the render content for the label node. + * + * @param data - The data to use for the label content. + * + * @returns The content to add to the label node. + */ + Renderer.prototype.formatLabel = function (data) { + // Fetch the label text and mnemonic index. + var _a = data.title, label = _a.label, mnemonic = _a.mnemonic; + // If the index is out of range, do not modify the label. + if (mnemonic < 0 || mnemonic >= label.length) { + return label; + } + // Split the label into parts. + var prefix = label.slice(0, mnemonic); + var suffix = label.slice(mnemonic + 1); + var char = label[mnemonic]; + // Wrap the mnemonic character in a span. + var span = h.span({ + className: 'lm-MenuBar-itemMnemonic' + /* */ + + ' p-MenuBar-itemMnemonic' + /* */ + }, char); + // Return the content parts. + return [prefix, span, suffix]; + }; + return Renderer; + }()); + MenuBar.Renderer = Renderer; + /** + * The default `Renderer` instance. + */ + MenuBar.defaultRenderer = new Renderer(); + })(MenuBar || (MenuBar = {})); + /** + * The namespace for the module implementation details. + */ + var Private$c; + (function (Private) { + /** + * Create the DOM node for a menu bar. + */ + function createNode() { + var node = document.createElement('div'); + var content = document.createElement('ul'); + content.className = 'lm-MenuBar-content'; + /* */ + content.classList.add('p-MenuBar-content'); + /* */ + node.appendChild(content); + node.tabIndex = -1; + return node; + } + Private.createNode = createNode; + /** + * Find the best matching mnemonic item. + * + * The search starts at the given index and wraps around. + */ + function findMnemonic(menus, key, start) { + // Setup the result variables. + var index = -1; + var auto = -1; + var multiple = false; + // Normalize the key to upper case. + var upperKey = key.toUpperCase(); + // Search the items from the given start index. + for (var i = 0, n = menus.length; i < n; ++i) { + // Compute the wrapped index. + var k = (i + start) % n; + // Look up the menu title. + var title = menus[k].title; + // Ignore titles with an empty label. + if (title.label.length === 0) { + continue; + } + // Look up the mnemonic index for the label. + var mn = title.mnemonic; + // Handle a valid mnemonic index. + if (mn >= 0 && mn < title.label.length) { + if (title.label[mn].toUpperCase() === upperKey) { + if (index === -1) { + index = k; + } + else { + multiple = true; + } + } + continue; + } + // Finally, handle the auto index if possible. + if (auto === -1 && title.label[0].toUpperCase() === upperKey) { + auto = k; + } + } + // Return the search results. + return { index: index, multiple: multiple, auto: auto }; + } + Private.findMnemonic = findMnemonic; + })(Private$c || (Private$c = {})); + + /** + * A widget which implements a canonical scroll bar. + */ + var ScrollBar = /** @class */ (function (_super) { + __extends$5(ScrollBar, _super); + /** + * Construct a new scroll bar. + * + * @param options - The options for initializing the scroll bar. + */ + function ScrollBar(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this, { node: Private$d.createNode() }) || this; + /** + * A timeout callback for repeating the mouse press. + */ + _this._onRepeat = function () { + // Clear the repeat timer id. + _this._repeatTimer = -1; + // Bail if the mouse has been released. + if (!_this._pressData) { + return; + } + // Look up the part that was pressed. + var part = _this._pressData.part; + // Bail if the thumb was pressed. + if (part === 'thumb') { + return; + } + // Schedule the timer for another repeat. + _this._repeatTimer = window.setTimeout(_this._onRepeat, 20); + // Get the current mouse position. + var mouseX = _this._pressData.mouseX; + var mouseY = _this._pressData.mouseY; + // Handle a decrement button repeat. + if (part === 'decrement') { + // Bail if the mouse is not over the button. + if (!ElementExt.hitTest(_this.decrementNode, mouseX, mouseY)) { + return; + } + // Emit the step requested signal. + _this._stepRequested.emit('decrement'); + // Finished. + return; + } + // Handle an increment button repeat. + if (part === 'increment') { + // Bail if the mouse is not over the button. + if (!ElementExt.hitTest(_this.incrementNode, mouseX, mouseY)) { + return; + } + // Emit the step requested signal. + _this._stepRequested.emit('increment'); + // Finished. + return; + } + // Handle a track repeat. + if (part === 'track') { + // Bail if the mouse is not over the track. + if (!ElementExt.hitTest(_this.trackNode, mouseX, mouseY)) { + return; + } + // Fetch the thumb node. + var thumbNode = _this.thumbNode; + // Bail if the mouse is over the thumb. + if (ElementExt.hitTest(thumbNode, mouseX, mouseY)) { + return; + } + // Fetch the client rect for the thumb. + var thumbRect = thumbNode.getBoundingClientRect(); + // Determine the direction for the page request. + var dir = void 0; + if (_this._orientation === 'horizontal') { + dir = mouseX < thumbRect.left ? 'decrement' : 'increment'; + } + else { + dir = mouseY < thumbRect.top ? 'decrement' : 'increment'; + } + // Emit the page requested signal. + _this._pageRequested.emit(dir); + // Finished. + return; + } + }; + _this._value = 0; + _this._page = 10; + _this._maximum = 100; + _this._repeatTimer = -1; + _this._pressData = null; + _this._thumbMoved = new Signal(_this); + _this._stepRequested = new Signal(_this); + _this._pageRequested = new Signal(_this); + _this.addClass('lm-ScrollBar'); + /* */ + _this.addClass('p-ScrollBar'); + /* */ + _this.setFlag(Widget.Flag.DisallowLayout); + // Set the orientation. + _this._orientation = options.orientation || 'vertical'; + _this.dataset['orientation'] = _this._orientation; + // Parse the rest of the options. + if (options.maximum !== undefined) { + _this._maximum = Math.max(0, options.maximum); + } + if (options.page !== undefined) { + _this._page = Math.max(0, options.page); + } + if (options.value !== undefined) { + _this._value = Math.max(0, Math.min(options.value, _this._maximum)); + } + return _this; + } + Object.defineProperty(ScrollBar.prototype, "thumbMoved", { + /** + * A signal emitted when the user moves the scroll thumb. + * + * #### Notes + * The payload is the current value of the scroll bar. + */ + get: function () { + return this._thumbMoved; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "stepRequested", { + /** + * A signal emitted when the user clicks a step button. + * + * #### Notes + * The payload is whether a decrease or increase is requested. + */ + get: function () { + return this._stepRequested; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "pageRequested", { + /** + * A signal emitted when the user clicks the scroll track. + * + * #### Notes + * The payload is whether a decrease or increase is requested. + */ + get: function () { + return this._pageRequested; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "orientation", { + /** + * Get the orientation of the scroll bar. + */ + get: function () { + return this._orientation; + }, + /** + * Set the orientation of the scroll bar. + */ + set: function (value) { + // Do nothing if the orientation does not change. + if (this._orientation === value) { + return; + } + // Release the mouse before making changes. + this._releaseMouse(); + // Update the internal orientation. + this._orientation = value; + this.dataset['orientation'] = value; + // Schedule an update the scroll bar. + this.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "value", { + /** + * Get the current value of the scroll bar. + */ + get: function () { + return this._value; + }, + /** + * Set the current value of the scroll bar. + * + * #### Notes + * The value will be clamped to the range `[0, maximum]`. + */ + set: function (value) { + // Clamp the value to the allowable range. + value = Math.max(0, Math.min(value, this._maximum)); + // Do nothing if the value does not change. + if (this._value === value) { + return; + } + // Update the internal value. + this._value = value; + // Schedule an update the scroll bar. + this.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "page", { + /** + * Get the page size of the scroll bar. + * + * #### Notes + * The page size is the amount of visible content in the scrolled + * region, expressed in data units. It determines the size of the + * scroll bar thumb. + */ + get: function () { + return this._page; + }, + /** + * Set the page size of the scroll bar. + * + * #### Notes + * The page size will be clamped to the range `[0, Infinity]`. + */ + set: function (value) { + // Clamp the page size to the allowable range. + value = Math.max(0, value); + // Do nothing if the value does not change. + if (this._page === value) { + return; + } + // Update the internal page size. + this._page = value; + // Schedule an update the scroll bar. + this.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "maximum", { + /** + * Get the maximum value of the scroll bar. + */ + get: function () { + return this._maximum; + }, + /** + * Set the maximum value of the scroll bar. + * + * #### Notes + * The max size will be clamped to the range `[0, Infinity]`. + */ + set: function (value) { + // Clamp the value to the allowable range. + value = Math.max(0, value); + // Do nothing if the value does not change. + if (this._maximum === value) { + return; + } + // Update the internal values. + this._maximum = value; + // Clamp the current value to the new range. + this._value = Math.min(this._value, value); + // Schedule an update the scroll bar. + this.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "decrementNode", { + /** + * The scroll bar decrement button node. + * + * #### Notes + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-ScrollBar-button')[0]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "incrementNode", { + /** + * The scroll bar increment button node. + * + * #### Notes + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-ScrollBar-button')[1]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "trackNode", { + /** + * The scroll bar track node. + * + * #### Notes + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-ScrollBar-track')[0]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollBar.prototype, "thumbNode", { + /** + * The scroll bar thumb node. + * + * #### Notes + * Modifying this node directly can lead to undefined behavior. + */ + get: function () { + return this.node.getElementsByClassName('lm-ScrollBar-thumb')[0]; + }, + enumerable: true, + configurable: true + }); + /** + * Handle the DOM events for the scroll bar. + * + * @param event - The DOM event sent to the scroll bar. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the scroll bar's DOM node. + * + * This should not be called directly by user code. + */ + ScrollBar.prototype.handleEvent = function (event) { + switch (event.type) { + case 'mousedown': + this._evtMouseDown(event); + break; + case 'mousemove': + this._evtMouseMove(event); + break; + case 'mouseup': + this._evtMouseUp(event); + break; + case 'keydown': + this._evtKeyDown(event); + break; + case 'contextmenu': + event.preventDefault(); + event.stopPropagation(); + break; + } + }; + /** + * A method invoked on a 'before-attach' message. + */ + ScrollBar.prototype.onBeforeAttach = function (msg) { + this.node.addEventListener('mousedown', this); + this.update(); + }; + /** + * A method invoked on an 'after-detach' message. + */ + ScrollBar.prototype.onAfterDetach = function (msg) { + this.node.removeEventListener('mousedown', this); + this._releaseMouse(); + }; + /** + * A method invoked on an 'update-request' message. + */ + ScrollBar.prototype.onUpdateRequest = function (msg) { + // Convert the value and page into percentages. + var value = this._value * 100 / this._maximum; + var page = this._page * 100 / (this._page + this._maximum); + // Clamp the value and page to the relevant range. + value = Math.max(0, Math.min(value, 100)); + page = Math.max(0, Math.min(page, 100)); + // Fetch the thumb style. + var thumbStyle = this.thumbNode.style; + // Update the thumb style for the current orientation. + if (this._orientation === 'horizontal') { + thumbStyle.top = ''; + thumbStyle.height = ''; + thumbStyle.left = value + "%"; + thumbStyle.width = page + "%"; + thumbStyle.transform = "translate(" + -value + "%, 0%)"; + } + else { + thumbStyle.left = ''; + thumbStyle.width = ''; + thumbStyle.top = value + "%"; + thumbStyle.height = page + "%"; + thumbStyle.transform = "translate(0%, " + -value + "%)"; + } + }; + /** + * Handle the `'keydown'` event for the scroll bar. + */ + ScrollBar.prototype._evtKeyDown = function (event) { + // Stop all input events during drag. + event.preventDefault(); + event.stopPropagation(); + // Ignore anything except the `Escape` key. + if (event.keyCode !== 27) { + return; + } + // Fetch the previous scroll value. + var value = this._pressData ? this._pressData.value : -1; + // Release the mouse. + this._releaseMouse(); + // Restore the old scroll value if possible. + if (value !== -1) { + this._moveThumb(value); + } + }; + /** + * Handle the `'mousedown'` event for the scroll bar. + */ + ScrollBar.prototype._evtMouseDown = function (event) { + // Do nothing if it's not a left mouse press. + if (event.button !== 0) { + return; + } + // Send an activate request to the scroll bar. This can be + // used by message hooks to activate something relevant. + this.activate(); + // Do nothing if the mouse is already captured. + if (this._pressData) { + return; + } + // Find the pressed scroll bar part. + var part = Private$d.findPart(this, event.target); + // Do nothing if the part is not of interest. + if (!part) { + return; + } + // Stop the event propagation. + event.preventDefault(); + event.stopPropagation(); + // Override the mouse cursor. + var override = Drag.overrideCursor('default'); + // Set up the press data. + this._pressData = { + part: part, override: override, + delta: -1, value: -1, + mouseX: event.clientX, + mouseY: event.clientY + }; + // Add the extra event listeners. + document.addEventListener('mousemove', this, true); + document.addEventListener('mouseup', this, true); + document.addEventListener('keydown', this, true); + document.addEventListener('contextmenu', this, true); + // Handle a thumb press. + if (part === 'thumb') { + // Fetch the thumb node. + var thumbNode = this.thumbNode; + // Fetch the client rect for the thumb. + var thumbRect = thumbNode.getBoundingClientRect(); + // Update the press data delta for the current orientation. + if (this._orientation === 'horizontal') { + this._pressData.delta = event.clientX - thumbRect.left; + } + else { + this._pressData.delta = event.clientY - thumbRect.top; + } + // Add the active class to the thumb node. + thumbNode.classList.add('lm-mod-active'); + /* */ + thumbNode.classList.add('p-mod-active'); + /* */ + // Store the current value in the press data. + this._pressData.value = this._value; + // Finished. + return; + } + // Handle a track press. + if (part === 'track') { + // Fetch the client rect for the thumb. + var thumbRect = this.thumbNode.getBoundingClientRect(); + // Determine the direction for the page request. + var dir = void 0; + if (this._orientation === 'horizontal') { + dir = event.clientX < thumbRect.left ? 'decrement' : 'increment'; + } + else { + dir = event.clientY < thumbRect.top ? 'decrement' : 'increment'; + } + // Start the repeat timer. + this._repeatTimer = window.setTimeout(this._onRepeat, 350); + // Emit the page requested signal. + this._pageRequested.emit(dir); + // Finished. + return; + } + // Handle a decrement button press. + if (part === 'decrement') { + // Add the active class to the decrement node. + this.decrementNode.classList.add('lm-mod-active'); + /* */ + this.decrementNode.classList.add('p-mod-active'); + /* */ + // Start the repeat timer. + this._repeatTimer = window.setTimeout(this._onRepeat, 350); + // Emit the step requested signal. + this._stepRequested.emit('decrement'); + // Finished. + return; + } + // Handle an increment button press. + if (part === 'increment') { + // Add the active class to the increment node. + this.incrementNode.classList.add('lm-mod-active'); + /* */ + this.incrementNode.classList.add('p-mod-active'); + /* */ + // Start the repeat timer. + this._repeatTimer = window.setTimeout(this._onRepeat, 350); + // Emit the step requested signal. + this._stepRequested.emit('increment'); + // Finished. + return; + } + }; + /** + * Handle the `'mousemove'` event for the scroll bar. + */ + ScrollBar.prototype._evtMouseMove = function (event) { + // Do nothing if no drag is in progress. + if (!this._pressData) { + return; + } + // Stop the event propagation. + event.preventDefault(); + event.stopPropagation(); + // Update the mouse position. + this._pressData.mouseX = event.clientX; + this._pressData.mouseY = event.clientY; + // Bail if the thumb is not being dragged. + if (this._pressData.part !== 'thumb') { + return; + } + // Get the client rect for the thumb and track. + var thumbRect = this.thumbNode.getBoundingClientRect(); + var trackRect = this.trackNode.getBoundingClientRect(); + // Fetch the scroll geometry based on the orientation. + var trackPos; + var trackSpan; + if (this._orientation === 'horizontal') { + trackPos = event.clientX - trackRect.left - this._pressData.delta; + trackSpan = trackRect.width - thumbRect.width; + } + else { + trackPos = event.clientY - trackRect.top - this._pressData.delta; + trackSpan = trackRect.height - thumbRect.height; + } + // Compute the desired value from the scroll geometry. + var value = trackSpan === 0 ? 0 : trackPos * this._maximum / trackSpan; + // Move the thumb to the computed value. + this._moveThumb(value); + }; + /** + * Handle the `'mouseup'` event for the scroll bar. + */ + ScrollBar.prototype._evtMouseUp = function (event) { + // Do nothing if it's not a left mouse release. + if (event.button !== 0) { + return; + } + // Stop the event propagation. + event.preventDefault(); + event.stopPropagation(); + // Release the mouse. + this._releaseMouse(); + }; + /** + * Release the mouse and restore the node states. + */ + ScrollBar.prototype._releaseMouse = function () { + // Bail if there is no press data. + if (!this._pressData) { + return; + } + // Clear the repeat timer. + clearTimeout(this._repeatTimer); + this._repeatTimer = -1; + // Clear the press data. + this._pressData.override.dispose(); + this._pressData = null; + // Remove the extra event listeners. + document.removeEventListener('mousemove', this, true); + document.removeEventListener('mouseup', this, true); + document.removeEventListener('keydown', this, true); + document.removeEventListener('contextmenu', this, true); + // Remove the active classes from the nodes. + this.thumbNode.classList.remove('lm-mod-active'); + this.decrementNode.classList.remove('lm-mod-active'); + this.incrementNode.classList.remove('lm-mod-active'); + /* */ + this.thumbNode.classList.remove('p-mod-active'); + this.decrementNode.classList.remove('p-mod-active'); + this.incrementNode.classList.remove('p-mod-active'); + /* */ + }; + /** + * Move the thumb to the specified position. + */ + ScrollBar.prototype._moveThumb = function (value) { + // Clamp the value to the allowed range. + value = Math.max(0, Math.min(value, this._maximum)); + // Bail if the value does not change. + if (this._value === value) { + return; + } + // Update the internal value. + this._value = value; + // Schedule an update of the scroll bar. + this.update(); + // Emit the thumb moved signal. + this._thumbMoved.emit(value); + }; + return ScrollBar; + }(Widget)); + /** + * The namespace for the module implementation details. + */ + var Private$d; + (function (Private) { + /** + * Create the DOM node for a scroll bar. + */ + function createNode() { + var node = document.createElement('div'); + var decrement = document.createElement('div'); + var increment = document.createElement('div'); + var track = document.createElement('div'); + var thumb = document.createElement('div'); + decrement.className = 'lm-ScrollBar-button'; + increment.className = 'lm-ScrollBar-button'; + decrement.dataset['action'] = 'decrement'; + increment.dataset['action'] = 'increment'; + track.className = 'lm-ScrollBar-track'; + thumb.className = 'lm-ScrollBar-thumb'; + /* */ + decrement.classList.add('p-ScrollBar-button'); + increment.classList.add('p-ScrollBar-button'); + track.classList.add('p-ScrollBar-track'); + thumb.classList.add('p-ScrollBar-thumb'); + /* */ + track.appendChild(thumb); + node.appendChild(decrement); + node.appendChild(track); + node.appendChild(increment); + return node; + } + Private.createNode = createNode; + /** + * Find the scroll bar part which contains the given target. + */ + function findPart(scrollBar, target) { + // Test the thumb. + if (scrollBar.thumbNode.contains(target)) { + return 'thumb'; + } + // Test the track. + if (scrollBar.trackNode.contains(target)) { + return 'track'; + } + // Test the decrement button. + if (scrollBar.decrementNode.contains(target)) { + return 'decrement'; + } + // Test the increment button. + if (scrollBar.incrementNode.contains(target)) { + return 'increment'; + } + // Indicate no match. + return null; + } + Private.findPart = findPart; + })(Private$d || (Private$d = {})); + + /** + * A concrete layout implementation which holds a single widget. + * + * #### Notes + * This class is useful for creating simple container widgets which + * hold a single child. The child should be positioned with CSS. + */ + var SingletonLayout = /** @class */ (function (_super) { + __extends$5(SingletonLayout, _super); + function SingletonLayout() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._widget = null; + return _this; + } + /** + * Dispose of the resources held by the layout. + */ + SingletonLayout.prototype.dispose = function () { + if (this._widget) { + var widget = this._widget; + this._widget = null; + widget.dispose(); + } + _super.prototype.dispose.call(this); + }; + Object.defineProperty(SingletonLayout.prototype, "widget", { + /** + * Get the child widget for the layout. + */ + get: function () { + return this._widget; + }, + /** + * Set the child widget for the layout. + * + * #### Notes + * Setting the child widget will cause the old child widget to be + * automatically disposed. If that is not desired, set the parent + * of the old child to `null` before assigning a new child. + */ + set: function (widget) { + // Remove the widget from its current parent. This is a no-op + // if the widget's parent is already the layout parent widget. + if (widget) { + widget.parent = this.parent; + } + // Bail early if the widget does not change. + if (this._widget === widget) { + return; + } + // Dispose of the old child widget. + if (this._widget) { + this._widget.dispose(); + } + // Update the internal widget. + this._widget = widget; + // Attach the new child widget if needed. + if (this.parent && widget) { + this.attachWidget(widget); + } + }, + enumerable: true, + configurable: true + }); + /** + * Create an iterator over the widgets in the layout. + * + * @returns A new iterator over the widgets in the layout. + */ + SingletonLayout.prototype.iter = function () { + return this._widget ? once$1(this._widget) : empty(); + }; + /** + * Remove a widget from the layout. + * + * @param widget - The widget to remove from the layout. + * + * #### Notes + * A widget is automatically removed from the layout when its `parent` + * is set to `null`. This method should only be invoked directly when + * removing a widget from a layout which has yet to be installed on a + * parent widget. + * + * This method does *not* modify the widget's `parent`. + */ + SingletonLayout.prototype.removeWidget = function (widget) { + // Bail early if the widget does not exist in the layout. + if (this._widget !== widget) { + return; + } + // Clear the internal widget. + this._widget = null; + // If the layout is parented, detach the widget from the DOM. + if (this.parent) { + this.detachWidget(widget); + } + }; + /** + * Perform layout initialization which requires the parent widget. + */ + SingletonLayout.prototype.init = function () { + var _this = this; + _super.prototype.init.call(this); + each$1(this, function (widget) { _this.attachWidget(widget); }); + }; + /** + * Attach a widget to the parent's DOM node. + * + * @param index - The current index of the widget in the layout. + * + * @param widget - The widget to attach to the parent. + * + * #### Notes + * This method is called automatically by the single layout at the + * appropriate time. It should not be called directly by user code. + * + * The default implementation adds the widgets's node to the parent's + * node at the proper location, and sends the appropriate attach + * messages to the widget if the parent is attached to the DOM. + * + * Subclasses may reimplement this method to control how the widget's + * node is added to the parent's node. + */ + SingletonLayout.prototype.attachWidget = function (widget) { + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Add the widget's node to the parent. + this.parent.node.appendChild(widget.node); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + }; + /** + * Detach a widget from the parent's DOM node. + * + * @param widget - The widget to detach from the parent. + * + * #### Notes + * This method is called automatically by the single layout at the + * appropriate time. It should not be called directly by user code. + * + * The default implementation removes the widget's node from the + * parent's node, and sends the appropriate detach messages to the + * widget if the parent is attached to the DOM. + * + * Subclasses may reimplement this method to control how the widget's + * node is removed from the parent's node. + */ + SingletonLayout.prototype.detachWidget = function (widget) { + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget's node from the parent. + this.parent.node.removeChild(widget.node); + // Send an `'after-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + }; + return SingletonLayout; + }(Layout)); + + /** + * A layout which arranges its widgets into resizable sections. + */ + var SplitLayout = /** @class */ (function (_super) { + __extends$5(SplitLayout, _super); + /** + * Construct a new split layout. + * + * @param options - The options for initializing the layout. + */ + function SplitLayout(options) { + var _this = _super.call(this) || this; + _this._fixed = 0; + _this._spacing = 4; + _this._dirty = false; + _this._hasNormedSizes = false; + _this._sizers = []; + _this._items = []; + _this._handles = []; + _this._box = null; + _this._alignment = 'start'; + _this._orientation = 'horizontal'; + _this.renderer = options.renderer; + if (options.orientation !== undefined) { + _this._orientation = options.orientation; + } + if (options.alignment !== undefined) { + _this._alignment = options.alignment; + } + if (options.spacing !== undefined) { + _this._spacing = Private$e.clampSpacing(options.spacing); + } + return _this; + } + /** + * Dispose of the resources held by the layout. + */ + SplitLayout.prototype.dispose = function () { + // Dispose of the layout items. + each$1(this._items, function (item) { item.dispose(); }); + // Clear the layout state. + this._box = null; + this._items.length = 0; + this._sizers.length = 0; + this._handles.length = 0; + // Dispose of the rest of the layout. + _super.prototype.dispose.call(this); + }; + Object.defineProperty(SplitLayout.prototype, "orientation", { + /** + * Get the layout orientation for the split layout. + */ + get: function () { + return this._orientation; + }, + /** + * Set the layout orientation for the split layout. + */ + set: function (value) { + if (this._orientation === value) { + return; + } + this._orientation = value; + if (!this.parent) { + return; + } + this.parent.dataset['orientation'] = value; + this.parent.fit(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SplitLayout.prototype, "alignment", { + /** + * Get the content alignment for the split layout. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire split layout. + */ + get: function () { + return this._alignment; + }, + /** + * Set the content alignment for the split layout. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire split layout. + */ + set: function (value) { + if (this._alignment === value) { + return; + } + this._alignment = value; + if (!this.parent) { + return; + } + this.parent.dataset['alignment'] = value; + this.parent.update(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SplitLayout.prototype, "spacing", { + /** + * Get the inter-element spacing for the split layout. + */ + get: function () { + return this._spacing; + }, + /** + * Set the inter-element spacing for the split layout. + */ + set: function (value) { + value = Private$e.clampSpacing(value); + if (this._spacing === value) { + return; + } + this._spacing = value; + if (!this.parent) { + return; + } + this.parent.fit(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SplitLayout.prototype, "handles", { + /** + * A read-only array of the split handles in the layout. + */ + get: function () { + return this._handles; + }, + enumerable: true, + configurable: true + }); + /** + * Get the relative sizes of the widgets in the layout. + * + * @returns A new array of the relative sizes of the widgets. + * + * #### Notes + * The returned sizes reflect the sizes of the widgets normalized + * relative to their siblings. + * + * This method **does not** measure the DOM nodes. + */ + SplitLayout.prototype.relativeSizes = function () { + return Private$e.normalize(this._sizers.map(function (sizer) { return sizer.size; })); + }; + /** + * Set the relative sizes for the widgets in the layout. + * + * @param sizes - The relative sizes for the widgets in the panel. + * + * #### Notes + * Extra values are ignored, too few will yield an undefined layout. + * + * The actual geometry of the DOM nodes is updated asynchronously. + */ + SplitLayout.prototype.setRelativeSizes = function (sizes) { + // Copy the sizes and pad with zeros as needed. + var n = this._sizers.length; + var temp = sizes.slice(0, n); + while (temp.length < n) { + temp.push(0); + } + // Normalize the padded sizes. + var normed = Private$e.normalize(temp); + // Apply the normalized sizes to the sizers. + for (var i = 0; i < n; ++i) { + var sizer = this._sizers[i]; + sizer.sizeHint = normed[i]; + sizer.size = normed[i]; + } + // Set the flag indicating the sizes are normalized. + this._hasNormedSizes = true; + // Trigger an update of the parent widget. + if (this.parent) { + this.parent.update(); + } + }; + /** + * Move the offset position of a split handle. + * + * @param index - The index of the handle of the interest. + * + * @param position - The desired offset position of the handle. + * + * #### Notes + * The position is relative to the offset parent. + * + * This will move the handle as close as possible to the desired + * position. The sibling widgets will be adjusted as necessary. + */ + SplitLayout.prototype.moveHandle = function (index, position) { + // Bail if the index is invalid or the handle is hidden. + var handle = this._handles[index]; + if (!handle || handle.classList.contains('lm-mod-hidden')) { + return; + } + // Compute the desired delta movement for the handle. + var delta; + if (this._orientation === 'horizontal') { + delta = position - handle.offsetLeft; + } + else { + delta = position - handle.offsetTop; + } + // Bail if there is no handle movement. + if (delta === 0) { + return; + } + // Prevent widget resizing unless needed. + for (var _i = 0, _a = this._sizers; _i < _a.length; _i++) { + var sizer = _a[_i]; + if (sizer.size > 0) { + sizer.sizeHint = sizer.size; + } + } + // Adjust the sizers to reflect the handle movement. + BoxEngine.adjust(this._sizers, index, delta); + // Update the layout of the widgets. + if (this.parent) { + this.parent.update(); + } + }; + /** + * Perform layout initialization which requires the parent widget. + */ + SplitLayout.prototype.init = function () { + this.parent.dataset['orientation'] = this.orientation; + this.parent.dataset['alignment'] = this.alignment; + _super.prototype.init.call(this); + }; + /** + * Attach a widget to the parent's DOM node. + * + * @param index - The current index of the widget in the layout. + * + * @param widget - The widget to attach to the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + SplitLayout.prototype.attachWidget = function (index, widget) { + // Create the item, handle, and sizer for the new widget. + var item = new LayoutItem(widget); + var handle = Private$e.createHandle(this.renderer); + var average = Private$e.averageSize(this._sizers); + var sizer = Private$e.createSizer(average); + // Insert the item, handle, and sizer into the internal arrays. + ArrayExt.insert(this._items, index, item); + ArrayExt.insert(this._sizers, index, sizer); + ArrayExt.insert(this._handles, index, handle); + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Add the widget and handle nodes to the parent. + this.parent.node.appendChild(widget.node); + this.parent.node.appendChild(handle); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * Move a widget in the parent's DOM node. + * + * @param fromIndex - The previous index of the widget in the layout. + * + * @param toIndex - The current index of the widget in the layout. + * + * @param widget - The widget to move in the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + SplitLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) { + // Move the item, sizer, and handle for the widget. + ArrayExt.move(this._items, fromIndex, toIndex); + ArrayExt.move(this._sizers, fromIndex, toIndex); + ArrayExt.move(this._handles, fromIndex, toIndex); + // Post a fit request to the parent to show/hide last handle. + this.parent.fit(); + }; + /** + * Detach a widget from the parent's DOM node. + * + * @param index - The previous index of the widget in the layout. + * + * @param widget - The widget to detach from the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + SplitLayout.prototype.detachWidget = function (index, widget) { + // Remove the item, handle, and sizer for the widget. + var item = ArrayExt.removeAt(this._items, index); + var handle = ArrayExt.removeAt(this._handles, index); + ArrayExt.removeAt(this._sizers, index); + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget and handle nodes from the parent. + this.parent.node.removeChild(widget.node); + this.parent.node.removeChild(handle); + // Send an `'after-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + // Dispose of the layout item. + item.dispose(); + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * A message handler invoked on a `'before-show'` message. + */ + SplitLayout.prototype.onBeforeShow = function (msg) { + _super.prototype.onBeforeShow.call(this, msg); + this.parent.update(); + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + SplitLayout.prototype.onBeforeAttach = function (msg) { + _super.prototype.onBeforeAttach.call(this, msg); + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-shown'` message. + */ + SplitLayout.prototype.onChildShown = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-hidden'` message. + */ + SplitLayout.prototype.onChildHidden = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'resize'` message. + */ + SplitLayout.prototype.onResize = function (msg) { + if (this.parent.isVisible) { + this._update(msg.width, msg.height); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + SplitLayout.prototype.onUpdateRequest = function (msg) { + if (this.parent.isVisible) { + this._update(-1, -1); + } + }; + /** + * A message handler invoked on a `'fit-request'` message. + */ + SplitLayout.prototype.onFitRequest = function (msg) { + if (this.parent.isAttached) { + this._fit(); + } + }; + /** + * Fit the layout to the total size required by the widgets. + */ + SplitLayout.prototype._fit = function () { + // Update the handles and track the visible widget count. + var nVisible = 0; + var lastHandleIndex = -1; + for (var i = 0, n = this._items.length; i < n; ++i) { + if (this._items[i].isHidden) { + this._handles[i].classList.add('lm-mod-hidden'); + /* */ + this._handles[i].classList.add('p-mod-hidden'); + /* */ + } + else { + this._handles[i].classList.remove('lm-mod-hidden'); + /* */ + this._handles[i].classList.remove('p-mod-hidden'); + /* */ + lastHandleIndex = i; + nVisible++; + } + } + // Hide the handle for the last visible widget. + if (lastHandleIndex !== -1) { + this._handles[lastHandleIndex].classList.add('lm-mod-hidden'); + /* */ + this._handles[lastHandleIndex].classList.add('p-mod-hidden'); + /* */ + } + // Update the fixed space for the visible items. + this._fixed = this._spacing * Math.max(0, nVisible - 1); + // Setup the computed minimum size. + var horz = this._orientation === 'horizontal'; + var minW = horz ? this._fixed : 0; + var minH = horz ? 0 : this._fixed; + // Update the sizers and computed size limits. + for (var i = 0, n = this._items.length; i < n; ++i) { + // Fetch the item and corresponding box sizer. + var item = this._items[i]; + var sizer = this._sizers[i]; + // Prevent resizing unless necessary. + if (sizer.size > 0) { + sizer.sizeHint = sizer.size; + } + // If the item is hidden, it should consume zero size. + if (item.isHidden) { + sizer.minSize = 0; + sizer.maxSize = 0; + continue; + } + // Update the size limits for the item. + item.fit(); + // Update the stretch factor. + sizer.stretch = SplitLayout.getStretch(item.widget); + // Update the sizer limits and computed min size. + if (horz) { + sizer.minSize = item.minWidth; + sizer.maxSize = item.maxWidth; + minW += item.minWidth; + minH = Math.max(minH, item.minHeight); + } + else { + sizer.minSize = item.minHeight; + sizer.maxSize = item.maxHeight; + minH += item.minHeight; + minW = Math.max(minW, item.minWidth); + } + } + // Update the box sizing and add it to the computed min size. + var box = this._box = ElementExt.boxSizing(this.parent.node); + minW += box.horizontalSum; + minH += box.verticalSum; + // Update the parent's min size constraints. + var style = this.parent.node.style; + style.minWidth = minW + "px"; + style.minHeight = minH + "px"; + // Set the dirty flag to ensure only a single update occurs. + this._dirty = true; + // Notify the ancestor that it should fit immediately. This may + // cause a resize of the parent, fulfilling the required update. + if (this.parent.parent) { + MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest); + } + // If the dirty flag is still set, the parent was not resized. + // Trigger the required update on the parent widget immediately. + if (this._dirty) { + MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest); + } + }; + /** + * Update the layout position and size of the widgets. + * + * The parent offset dimensions should be `-1` if unknown. + */ + SplitLayout.prototype._update = function (offsetWidth, offsetHeight) { + // Clear the dirty flag to indicate the update occurred. + this._dirty = false; + // Compute the visible item count. + var nVisible = 0; + for (var i = 0, n = this._items.length; i < n; ++i) { + nVisible += +!this._items[i].isHidden; + } + // Bail early if there are no visible items to layout. + if (nVisible === 0) { + return; + } + // Measure the parent if the offset dimensions are unknown. + if (offsetWidth < 0) { + offsetWidth = this.parent.node.offsetWidth; + } + if (offsetHeight < 0) { + offsetHeight = this.parent.node.offsetHeight; + } + // Ensure the parent box sizing data is computed. + if (!this._box) { + this._box = ElementExt.boxSizing(this.parent.node); + } + // Compute the actual layout bounds adjusted for border and padding. + var top = this._box.paddingTop; + var left = this._box.paddingLeft; + var width = offsetWidth - this._box.horizontalSum; + var height = offsetHeight - this._box.verticalSum; + // Compute the adjusted layout space. + var space; + var horz = this._orientation === 'horizontal'; + if (horz) { + space = Math.max(0, width - this._fixed); + } + else { + space = Math.max(0, height - this._fixed); + } + // Scale the size hints if they are normalized. + if (this._hasNormedSizes) { + for (var _i = 0, _a = this._sizers; _i < _a.length; _i++) { + var sizer = _a[_i]; + sizer.sizeHint *= space; + } + this._hasNormedSizes = false; + } + // Distribute the layout space to the box sizers. + var delta = BoxEngine.calc(this._sizers, space); + // Set up the variables for justification and alignment offset. + var extra = 0; + var offset = 0; + // Account for alignment if there is extra layout space. + if (delta > 0) { + switch (this._alignment) { + case 'start': + break; + case 'center': + extra = 0; + offset = delta / 2; + break; + case 'end': + extra = 0; + offset = delta; + break; + case 'justify': + extra = delta / nVisible; + offset = 0; + break; + default: + throw 'unreachable'; + } + } + // Layout the items using the computed box sizes. + for (var i = 0, n = this._items.length; i < n; ++i) { + // Fetch the item. + var item = this._items[i]; + // Ignore hidden items. + if (item.isHidden) { + continue; + } + // Fetch the computed size for the widget. + var size = this._sizers[i].size; + // Fetch the style for the handle. + var handleStyle = this._handles[i].style; + // Update the widget and handle, and advance the relevant edge. + if (horz) { + item.update(left + offset, top, size + extra, height); + left += size + extra; + handleStyle.top = top + "px"; + handleStyle.left = left + offset + "px"; + handleStyle.width = this._spacing + "px"; + handleStyle.height = height + "px"; + left += this._spacing; + } + else { + item.update(left, top + offset, width, size + extra); + top += size + extra; + handleStyle.top = top + offset + "px"; + handleStyle.left = left + "px"; + handleStyle.width = width + "px"; + handleStyle.height = this._spacing + "px"; + top += this._spacing; + } + } + }; + return SplitLayout; + }(PanelLayout)); + /** + * The namespace for the `SplitLayout` class statics. + */ + (function (SplitLayout) { + /** + * Get the split layout stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @returns The split layout stretch factor for the widget. + */ + function getStretch(widget) { + return Private$e.stretchProperty.get(widget); + } + SplitLayout.getStretch = getStretch; + /** + * Set the split layout stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the stretch factor. + */ + function setStretch(widget, value) { + Private$e.stretchProperty.set(widget, value); + } + SplitLayout.setStretch = setStretch; + })(SplitLayout || (SplitLayout = {})); + /** + * The namespace for the module implementation details. + */ + var Private$e; + (function (Private) { + /** + * The property descriptor for a widget stretch factor. + */ + Private.stretchProperty = new AttachedProperty({ + name: 'stretch', + create: function () { return 0; }, + coerce: function (owner, value) { return Math.max(0, Math.floor(value)); }, + changed: onChildSizingChanged + }); + /** + * Create a new box sizer with the given size hint. + */ + function createSizer(size) { + var sizer = new BoxSizer(); + sizer.sizeHint = Math.floor(size); + return sizer; + } + Private.createSizer = createSizer; + /** + * Create a new split handle node using the given renderer. + */ + function createHandle(renderer) { + var handle = renderer.createHandle(); + handle.style.position = 'absolute'; + return handle; + } + Private.createHandle = createHandle; + /** + * Clamp a spacing value to an integer >= 0. + */ + function clampSpacing(value) { + return Math.max(0, Math.floor(value)); + } + Private.clampSpacing = clampSpacing; + /** + * Compute the average size of an array of box sizers. + */ + function averageSize(sizers) { + return sizers.reduce(function (v, s) { return v + s.size; }, 0) / sizers.length || 0; + } + Private.averageSize = averageSize; + /** + * Normalize an array of values. + */ + function normalize(values) { + var n = values.length; + if (n === 0) { + return []; + } + var sum = values.reduce(function (a, b) { return a + Math.abs(b); }, 0); + return sum === 0 ? values.map(function (v) { return 1 / n; }) : values.map(function (v) { return v / sum; }); + } + Private.normalize = normalize; + /** + * The change handler for the attached sizing properties. + */ + function onChildSizingChanged(child) { + if (child.parent && child.parent.layout instanceof SplitLayout) { + child.parent.fit(); + } + } + })(Private$e || (Private$e = {})); + + /** + * A panel which arranges its widgets into resizable sections. + * + * #### Notes + * This class provides a convenience wrapper around a [[SplitLayout]]. + */ + var SplitPanel = /** @class */ (function (_super) { + __extends$5(SplitPanel, _super); + /** + * Construct a new split panel. + * + * @param options - The options for initializing the split panel. + */ + function SplitPanel(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this, { layout: Private$f.createLayout(options) }) || this; + _this._pressData = null; + _this.addClass('lm-SplitPanel'); + /* */ + _this.addClass('p-SplitPanel'); + return _this; + /* */ + } + /** + * Dispose of the resources held by the panel. + */ + SplitPanel.prototype.dispose = function () { + this._releaseMouse(); + _super.prototype.dispose.call(this); + }; + Object.defineProperty(SplitPanel.prototype, "orientation", { + /** + * Get the layout orientation for the split panel. + */ + get: function () { + return this.layout.orientation; + }, + /** + * Set the layout orientation for the split panel. + */ + set: function (value) { + this.layout.orientation = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SplitPanel.prototype, "alignment", { + /** + * Get the content alignment for the split panel. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire split panel. + */ + get: function () { + return this.layout.alignment; + }, + /** + * Set the content alignment for the split panel. + * + * #### Notes + * This is the alignment of the widgets in the layout direction. + * + * The alignment has no effect if the widgets can expand to fill the + * entire split panel. + */ + set: function (value) { + this.layout.alignment = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SplitPanel.prototype, "spacing", { + /** + * Get the inter-element spacing for the split panel. + */ + get: function () { + return this.layout.spacing; + }, + /** + * Set the inter-element spacing for the split panel. + */ + set: function (value) { + this.layout.spacing = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SplitPanel.prototype, "renderer", { + /** + * The renderer used by the split panel. + */ + get: function () { + return this.layout.renderer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SplitPanel.prototype, "handles", { + /** + * A read-only array of the split handles in the panel. + */ + get: function () { + return this.layout.handles; + }, + enumerable: true, + configurable: true + }); + /** + * Get the relative sizes of the widgets in the panel. + * + * @returns A new array of the relative sizes of the widgets. + * + * #### Notes + * The returned sizes reflect the sizes of the widgets normalized + * relative to their siblings. + * + * This method **does not** measure the DOM nodes. + */ + SplitPanel.prototype.relativeSizes = function () { + return this.layout.relativeSizes(); + }; + /** + * Set the relative sizes for the widgets in the panel. + * + * @param sizes - The relative sizes for the widgets in the panel. + * + * #### Notes + * Extra values are ignored, too few will yield an undefined layout. + * + * The actual geometry of the DOM nodes is updated asynchronously. + */ + SplitPanel.prototype.setRelativeSizes = function (sizes) { + this.layout.setRelativeSizes(sizes); + }; + /** + * Handle the DOM events for the split panel. + * + * @param event - The DOM event sent to the panel. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the panel's DOM node. It should + * not be called directly by user code. + */ + SplitPanel.prototype.handleEvent = function (event) { + switch (event.type) { + case 'mousedown': + this._evtMouseDown(event); + break; + case 'mousemove': + this._evtMouseMove(event); + break; + case 'mouseup': + this._evtMouseUp(event); + break; + case 'keydown': + this._evtKeyDown(event); + break; + case 'contextmenu': + event.preventDefault(); + event.stopPropagation(); + break; + } + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + SplitPanel.prototype.onBeforeAttach = function (msg) { + this.node.addEventListener('mousedown', this); + }; + /** + * A message handler invoked on an `'after-detach'` message. + */ + SplitPanel.prototype.onAfterDetach = function (msg) { + this.node.removeEventListener('mousedown', this); + this._releaseMouse(); + }; + /** + * A message handler invoked on a `'child-added'` message. + */ + SplitPanel.prototype.onChildAdded = function (msg) { + msg.child.addClass('lm-SplitPanel-child'); + /* */ + msg.child.addClass('p-SplitPanel-child'); + /* */ + this._releaseMouse(); + }; + /** + * A message handler invoked on a `'child-removed'` message. + */ + SplitPanel.prototype.onChildRemoved = function (msg) { + msg.child.removeClass('lm-SplitPanel-child'); + /* */ + msg.child.removeClass('p-SplitPanel-child'); + /* */ + this._releaseMouse(); + }; + /** + * Handle the `'keydown'` event for the split panel. + */ + SplitPanel.prototype._evtKeyDown = function (event) { + // Stop input events during drag. + event.preventDefault(); + event.stopPropagation(); + // Release the mouse if `Escape` is pressed. + if (event.keyCode === 27) { + this._releaseMouse(); + } + }; + /** + * Handle the `'mousedown'` event for the split panel. + */ + SplitPanel.prototype._evtMouseDown = function (event) { + // Do nothing if the left mouse button is not pressed. + if (event.button !== 0) { + return; + } + // Find the handle which contains the mouse target, if any. + var layout = this.layout; + var index = ArrayExt.findFirstIndex(layout.handles, function (handle) { + return handle.contains(event.target); + }); + // Bail early if the mouse press was not on a handle. + if (index === -1) { + return; + } + // Stop the event when a split handle is pressed. + event.preventDefault(); + event.stopPropagation(); + // Add the extra document listeners. + document.addEventListener('mouseup', this, true); + document.addEventListener('mousemove', this, true); + document.addEventListener('keydown', this, true); + document.addEventListener('contextmenu', this, true); + // Compute the offset delta for the handle press. + var delta; + var handle = layout.handles[index]; + var rect = handle.getBoundingClientRect(); + if (layout.orientation === 'horizontal') { + delta = event.clientX - rect.left; + } + else { + delta = event.clientY - rect.top; + } + // Override the cursor and store the press data. + var style = window.getComputedStyle(handle); + var override = Drag.overrideCursor(style.cursor); + this._pressData = { index: index, delta: delta, override: override }; + }; + /** + * Handle the `'mousemove'` event for the split panel. + */ + SplitPanel.prototype._evtMouseMove = function (event) { + // Stop the event when dragging a split handle. + event.preventDefault(); + event.stopPropagation(); + // Compute the desired offset position for the handle. + var pos; + var layout = this.layout; + var rect = this.node.getBoundingClientRect(); + if (layout.orientation === 'horizontal') { + pos = event.clientX - rect.left - this._pressData.delta; + } + else { + pos = event.clientY - rect.top - this._pressData.delta; + } + // Move the handle as close to the desired position as possible. + layout.moveHandle(this._pressData.index, pos); + }; + /** + * Handle the `'mouseup'` event for the split panel. + */ + SplitPanel.prototype._evtMouseUp = function (event) { + // Do nothing if the left mouse button is not released. + if (event.button !== 0) { + return; + } + // Stop the event when releasing a handle. + event.preventDefault(); + event.stopPropagation(); + // Finalize the mouse release. + this._releaseMouse(); + }; + /** + * Release the mouse grab for the split panel. + */ + SplitPanel.prototype._releaseMouse = function () { + // Bail early if no drag is in progress. + if (!this._pressData) { + return; + } + // Clear the override cursor. + this._pressData.override.dispose(); + this._pressData = null; + // Remove the extra document listeners. + document.removeEventListener('mouseup', this, true); + document.removeEventListener('mousemove', this, true); + document.removeEventListener('keydown', this, true); + document.removeEventListener('contextmenu', this, true); + }; + return SplitPanel; + }(Panel)); + /** + * The namespace for the `SplitPanel` class statics. + */ + (function (SplitPanel) { + /** + * The default implementation of `IRenderer`. + */ + var Renderer = /** @class */ (function () { + function Renderer() { + } + /** + * Create a new handle for use with a split panel. + * + * @returns A new handle element for a split panel. + */ + Renderer.prototype.createHandle = function () { + var handle = document.createElement('div'); + handle.className = 'lm-SplitPanel-handle'; + /* */ + handle.classList.add('p-SplitPanel-handle'); + /* */ + return handle; + }; + return Renderer; + }()); + SplitPanel.Renderer = Renderer; + /** + * The default `Renderer` instance. + */ + SplitPanel.defaultRenderer = new Renderer(); + /** + * Get the split panel stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @returns The split panel stretch factor for the widget. + */ + function getStretch(widget) { + return SplitLayout.getStretch(widget); + } + SplitPanel.getStretch = getStretch; + /** + * Set the split panel stretch factor for the given widget. + * + * @param widget - The widget of interest. + * + * @param value - The value for the stretch factor. + */ + function setStretch(widget, value) { + SplitLayout.setStretch(widget, value); + } + SplitPanel.setStretch = setStretch; + })(SplitPanel || (SplitPanel = {})); + /** + * The namespace for the module implementation details. + */ + var Private$f; + (function (Private) { + /** + * Create a split layout for the given panel options. + */ + function createLayout(options) { + return options.layout || new SplitLayout({ + renderer: options.renderer || SplitPanel.defaultRenderer, + orientation: options.orientation, + alignment: options.alignment, + spacing: options.spacing + }); + } + Private.createLayout = createLayout; + })(Private$f || (Private$f = {})); + + /** + * A layout where visible widgets are stacked atop one another. + * + * #### Notes + * The Z-order of the visible widgets follows their layout order. + */ + var StackedLayout = /** @class */ (function (_super) { + __extends$5(StackedLayout, _super); + function StackedLayout() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._dirty = false; + _this._items = []; + _this._box = null; + return _this; + } + /** + * Dispose of the resources held by the layout. + */ + StackedLayout.prototype.dispose = function () { + // Dispose of the layout items. + each$1(this._items, function (item) { item.dispose(); }); + // Clear the layout state. + this._box = null; + this._items.length = 0; + // Dispose of the rest of the layout. + _super.prototype.dispose.call(this); + }; + /** + * Attach a widget to the parent's DOM node. + * + * @param index - The current index of the widget in the layout. + * + * @param widget - The widget to attach to the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + StackedLayout.prototype.attachWidget = function (index, widget) { + // Create and add a new layout item for the widget. + ArrayExt.insert(this._items, index, new LayoutItem(widget)); + // Send a `'before-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach); + } + // Add the widget's node to the parent. + this.parent.node.appendChild(widget.node); + // Send an `'after-attach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach); + } + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * Move a widget in the parent's DOM node. + * + * @param fromIndex - The previous index of the widget in the layout. + * + * @param toIndex - The current index of the widget in the layout. + * + * @param widget - The widget to move in the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + StackedLayout.prototype.moveWidget = function (fromIndex, toIndex, widget) { + // Move the layout item for the widget. + ArrayExt.move(this._items, fromIndex, toIndex); + // Post an update request for the parent widget. + this.parent.update(); + }; + /** + * Detach a widget from the parent's DOM node. + * + * @param index - The previous index of the widget in the layout. + * + * @param widget - The widget to detach from the parent. + * + * #### Notes + * This is a reimplementation of the superclass method. + */ + StackedLayout.prototype.detachWidget = function (index, widget) { + // Remove the layout item for the widget. + var item = ArrayExt.removeAt(this._items, index); + // Send a `'before-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach); + } + // Remove the widget's node from the parent. + this.parent.node.removeChild(widget.node); + // Send an `'after-detach'` message if the parent is attached. + if (this.parent.isAttached) { + MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach); + } + // Reset the z-index for the widget. + item.widget.node.style.zIndex = ''; + // Dispose of the layout item. + item.dispose(); + // Post a fit request for the parent widget. + this.parent.fit(); + }; + /** + * A message handler invoked on a `'before-show'` message. + */ + StackedLayout.prototype.onBeforeShow = function (msg) { + _super.prototype.onBeforeShow.call(this, msg); + this.parent.update(); + }; + /** + * A message handler invoked on a `'before-attach'` message. + */ + StackedLayout.prototype.onBeforeAttach = function (msg) { + _super.prototype.onBeforeAttach.call(this, msg); + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-shown'` message. + */ + StackedLayout.prototype.onChildShown = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'child-hidden'` message. + */ + StackedLayout.prototype.onChildHidden = function (msg) { + this.parent.fit(); + }; + /** + * A message handler invoked on a `'resize'` message. + */ + StackedLayout.prototype.onResize = function (msg) { + if (this.parent.isVisible) { + this._update(msg.width, msg.height); + } + }; + /** + * A message handler invoked on an `'update-request'` message. + */ + StackedLayout.prototype.onUpdateRequest = function (msg) { + if (this.parent.isVisible) { + this._update(-1, -1); + } + }; + /** + * A message handler invoked on a `'fit-request'` message. + */ + StackedLayout.prototype.onFitRequest = function (msg) { + if (this.parent.isAttached) { + this._fit(); + } + }; + /** + * Fit the layout to the total size required by the widgets. + */ + StackedLayout.prototype._fit = function () { + // Set up the computed minimum size. + var minW = 0; + var minH = 0; + // Update the computed minimum size. + for (var i = 0, n = this._items.length; i < n; ++i) { + // Fetch the item. + var item = this._items[i]; + // Ignore hidden items. + if (item.isHidden) { + continue; + } + // Update the size limits for the item. + item.fit(); + // Update the computed minimum size. + minW = Math.max(minW, item.minWidth); + minH = Math.max(minH, item.minHeight); + } + // Update the box sizing and add it to the computed min size. + var box = this._box = ElementExt.boxSizing(this.parent.node); + minW += box.horizontalSum; + minH += box.verticalSum; + // Update the parent's min size constraints. + var style = this.parent.node.style; + style.minWidth = minW + "px"; + style.minHeight = minH + "px"; + // Set the dirty flag to ensure only a single update occurs. + this._dirty = true; + // Notify the ancestor that it should fit immediately. This may + // cause a resize of the parent, fulfilling the required update. + if (this.parent.parent) { + MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest); + } + // If the dirty flag is still set, the parent was not resized. + // Trigger the required update on the parent widget immediately. + if (this._dirty) { + MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest); + } + }; + /** + * Update the layout position and size of the widgets. + * + * The parent offset dimensions should be `-1` if unknown. + */ + StackedLayout.prototype._update = function (offsetWidth, offsetHeight) { + // Clear the dirty flag to indicate the update occurred. + this._dirty = false; + // Compute the visible item count. + var nVisible = 0; + for (var i = 0, n = this._items.length; i < n; ++i) { + nVisible += +!this._items[i].isHidden; + } + // Bail early if there are no visible items to layout. + if (nVisible === 0) { + return; + } + // Measure the parent if the offset dimensions are unknown. + if (offsetWidth < 0) { + offsetWidth = this.parent.node.offsetWidth; + } + if (offsetHeight < 0) { + offsetHeight = this.parent.node.offsetHeight; + } + // Ensure the parent box sizing data is computed. + if (!this._box) { + this._box = ElementExt.boxSizing(this.parent.node); + } + // Compute the actual layout bounds adjusted for border and padding. + var top = this._box.paddingTop; + var left = this._box.paddingLeft; + var width = offsetWidth - this._box.horizontalSum; + var height = offsetHeight - this._box.verticalSum; + // Update the widget stacking order and layout geometry. + for (var i = 0, n = this._items.length; i < n; ++i) { + // Fetch the item. + var item = this._items[i]; + // Ignore hidden items. + if (item.isHidden) { + continue; + } + // Set the z-index for the widget. + item.widget.node.style.zIndex = "" + i; + // Update the item geometry. + item.update(left, top, width, height); + } + }; + return StackedLayout; + }(PanelLayout)); + + /** + * A panel where visible widgets are stacked atop one another. + * + * #### Notes + * This class provides a convenience wrapper around a [[StackedLayout]]. + */ + var StackedPanel = /** @class */ (function (_super) { + __extends$5(StackedPanel, _super); + /** + * Construct a new stacked panel. + * + * @param options - The options for initializing the panel. + */ + function StackedPanel(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this, { layout: Private$g.createLayout(options) }) || this; + _this._widgetRemoved = new Signal(_this); + _this.addClass('lm-StackedPanel'); + /* */ + _this.addClass('p-StackedPanel'); + return _this; + /* */ + } + Object.defineProperty(StackedPanel.prototype, "widgetRemoved", { + /** + * A signal emitted when a widget is removed from a stacked panel. + */ + get: function () { + return this._widgetRemoved; + }, + enumerable: true, + configurable: true + }); + /** + * A message handler invoked on a `'child-added'` message. + */ + StackedPanel.prototype.onChildAdded = function (msg) { + msg.child.addClass('lm-StackedPanel-child'); + /* */ + msg.child.addClass('p-StackedPanel-child'); + /* */ + }; + /** + * A message handler invoked on a `'child-removed'` message. + */ + StackedPanel.prototype.onChildRemoved = function (msg) { + msg.child.removeClass('lm-StackedPanel-child'); + /* */ + msg.child.removeClass('p-StackedPanel-child'); + /* */ + this._widgetRemoved.emit(msg.child); + }; + return StackedPanel; + }(Panel)); + /** + * The namespace for the module implementation details. + */ + var Private$g; + (function (Private) { + /** + * Create a stacked layout for the given panel options. + */ + function createLayout(options) { + return options.layout || new StackedLayout(); + } + Private.createLayout = createLayout; + })(Private$g || (Private$g = {})); + + /** + * A widget which combines a `TabBar` and a `StackedPanel`. + * + * #### Notes + * This is a simple panel which handles the common case of a tab bar + * placed next to a content area. The selected tab controls the widget + * which is shown in the content area. + * + * For use cases which require more control than is provided by this + * panel, the `TabBar` widget may be used independently. + */ + var TabPanel = /** @class */ (function (_super) { + __extends$5(TabPanel, _super); + /** + * Construct a new tab panel. + * + * @param options - The options for initializing the tab panel. + */ + function TabPanel(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this) || this; + _this._currentChanged = new Signal(_this); + _this.addClass('lm-TabPanel'); + /* */ + _this.addClass('p-TabPanel'); + /* */ + // Create the tab bar and stacked panel. + _this.tabBar = new TabBar(options); + _this.tabBar.addClass('lm-TabPanel-tabBar'); + _this.stackedPanel = new StackedPanel(); + _this.stackedPanel.addClass('lm-TabPanel-stackedPanel'); + /* */ + _this.tabBar.addClass('p-TabPanel-tabBar'); + _this.stackedPanel.addClass('p-TabPanel-stackedPanel'); + /* */ + // Connect the tab bar signal handlers. + _this.tabBar.tabMoved.connect(_this._onTabMoved, _this); + _this.tabBar.currentChanged.connect(_this._onCurrentChanged, _this); + _this.tabBar.tabCloseRequested.connect(_this._onTabCloseRequested, _this); + _this.tabBar.tabActivateRequested.connect(_this._onTabActivateRequested, _this); + // Connect the stacked panel signal handlers. + _this.stackedPanel.widgetRemoved.connect(_this._onWidgetRemoved, _this); + // Get the data related to the placement. + _this._tabPlacement = options.tabPlacement || 'top'; + var direction = Private$h.directionFromPlacement(_this._tabPlacement); + var orientation = Private$h.orientationFromPlacement(_this._tabPlacement); + // Configure the tab bar for the placement. + _this.tabBar.orientation = orientation; + _this.tabBar.dataset['placement'] = _this._tabPlacement; + // Create the box layout. + var layout = new BoxLayout({ direction: direction, spacing: 0 }); + // Set the stretch factors for the child widgets. + BoxLayout.setStretch(_this.tabBar, 0); + BoxLayout.setStretch(_this.stackedPanel, 1); + // Add the child widgets to the layout. + layout.addWidget(_this.tabBar); + layout.addWidget(_this.stackedPanel); + // Install the layout on the tab panel. + _this.layout = layout; + return _this; + } + Object.defineProperty(TabPanel.prototype, "currentChanged", { + /** + * A signal emitted when the current tab is changed. + * + * #### Notes + * This signal is emitted when the currently selected tab is changed + * either through user or programmatic interaction. + * + * Notably, this signal is not emitted when the index of the current + * tab changes due to tabs being inserted, removed, or moved. It is + * only emitted when the actual current tab node is changed. + */ + get: function () { + return this._currentChanged; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "currentIndex", { + /** + * Get the index of the currently selected tab. + * + * #### Notes + * This will be `-1` if no tab is selected. + */ + get: function () { + return this.tabBar.currentIndex; + }, + /** + * Set the index of the currently selected tab. + * + * #### Notes + * If the index is out of range, it will be set to `-1`. + */ + set: function (value) { + this.tabBar.currentIndex = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "currentWidget", { + /** + * Get the currently selected widget. + * + * #### Notes + * This will be `null` if there is no selected tab. + */ + get: function () { + var title = this.tabBar.currentTitle; + return title ? title.owner : null; + }, + /** + * Set the currently selected widget. + * + * #### Notes + * If the widget is not in the panel, it will be set to `null`. + */ + set: function (value) { + this.tabBar.currentTitle = value ? value.title : null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "tabsMovable", { + /** + * Get the whether the tabs are movable by the user. + * + * #### Notes + * Tabs can always be moved programmatically. + */ + get: function () { + return this.tabBar.tabsMovable; + }, + /** + * Set the whether the tabs are movable by the user. + * + * #### Notes + * Tabs can always be moved programmatically. + */ + set: function (value) { + this.tabBar.tabsMovable = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "tabPlacement", { + /** + * Get the tab placement for the tab panel. + * + * #### Notes + * This controls the position of the tab bar relative to the content. + */ + get: function () { + return this._tabPlacement; + }, + /** + * Set the tab placement for the tab panel. + * + * #### Notes + * This controls the position of the tab bar relative to the content. + */ + set: function (value) { + // Bail if the placement does not change. + if (this._tabPlacement === value) { + return; + } + // Update the internal value. + this._tabPlacement = value; + // Get the values related to the placement. + var direction = Private$h.directionFromPlacement(value); + var orientation = Private$h.orientationFromPlacement(value); + // Configure the tab bar for the placement. + this.tabBar.orientation = orientation; + this.tabBar.dataset['placement'] = value; + // Update the layout direction. + this.layout.direction = direction; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "widgets", { + /** + * A read-only array of the widgets in the panel. + */ + get: function () { + return this.stackedPanel.widgets; + }, + enumerable: true, + configurable: true + }); + /** + * Add a widget to the end of the tab panel. + * + * @param widget - The widget to add to the tab panel. + * + * #### Notes + * If the widget is already contained in the panel, it will be moved. + * + * The widget's `title` is used to populate the tab. + */ + TabPanel.prototype.addWidget = function (widget) { + this.insertWidget(this.widgets.length, widget); + }; + /** + * Insert a widget into the tab panel at a specified index. + * + * @param index - The index at which to insert the widget. + * + * @param widget - The widget to insert into to the tab panel. + * + * #### Notes + * If the widget is already contained in the panel, it will be moved. + * + * The widget's `title` is used to populate the tab. + */ + TabPanel.prototype.insertWidget = function (index, widget) { + if (widget !== this.currentWidget) { + widget.hide(); + } + this.stackedPanel.insertWidget(index, widget); + this.tabBar.insertTab(index, widget.title); + }; + /** + * Handle the `currentChanged` signal from the tab bar. + */ + TabPanel.prototype._onCurrentChanged = function (sender, args) { + // Extract the previous and current title from the args. + var previousIndex = args.previousIndex, previousTitle = args.previousTitle, currentIndex = args.currentIndex, currentTitle = args.currentTitle; + // Extract the widgets from the titles. + var previousWidget = previousTitle ? previousTitle.owner : null; + var currentWidget = currentTitle ? currentTitle.owner : null; + // Hide the previous widget. + if (previousWidget) { + previousWidget.hide(); + } + // Show the current widget. + if (currentWidget) { + currentWidget.show(); + } + // Emit the `currentChanged` signal for the tab panel. + this._currentChanged.emit({ + previousIndex: previousIndex, previousWidget: previousWidget, currentIndex: currentIndex, currentWidget: currentWidget + }); + // Flush the message loop on IE and Edge to prevent flicker. + if (Platform.IS_EDGE || Platform.IS_IE) { + MessageLoop.flush(); + } + }; + /** + * Handle the `tabActivateRequested` signal from the tab bar. + */ + TabPanel.prototype._onTabActivateRequested = function (sender, args) { + args.title.owner.activate(); + }; + /** + * Handle the `tabCloseRequested` signal from the tab bar. + */ + TabPanel.prototype._onTabCloseRequested = function (sender, args) { + args.title.owner.close(); + }; + /** + * Handle the `tabMoved` signal from the tab bar. + */ + TabPanel.prototype._onTabMoved = function (sender, args) { + this.stackedPanel.insertWidget(args.toIndex, args.title.owner); + }; + /** + * Handle the `widgetRemoved` signal from the stacked panel. + */ + TabPanel.prototype._onWidgetRemoved = function (sender, widget) { + this.tabBar.removeTab(widget.title); + }; + return TabPanel; + }(Widget)); + /** + * The namespace for the module implementation details. + */ + var Private$h; + (function (Private) { + /** + * Convert a tab placement to tab bar orientation. + */ + function orientationFromPlacement(plc) { + return placementToOrientationMap[plc]; + } + Private.orientationFromPlacement = orientationFromPlacement; + /** + * Convert a tab placement to a box layout direction. + */ + function directionFromPlacement(plc) { + return placementToDirectionMap[plc]; + } + Private.directionFromPlacement = directionFromPlacement; + /** + * A mapping of tab placement to tab bar orientation. + */ + var placementToOrientationMap = { + 'top': 'horizontal', + 'left': 'vertical', + 'right': 'vertical', + 'bottom': 'horizontal' + }; + /** + * A mapping of tab placement to box layout direction. + */ + var placementToDirectionMap = { + 'top': 'top-to-bottom', + 'left': 'left-to-right', + 'right': 'right-to-left', + 'bottom': 'bottom-to-top' + }; + })(Private$h || (Private$h = {})); + + var index_es6 = /*#__PURE__*/Object.freeze({ + get BoxEngine () { return BoxEngine; }, + get BoxLayout () { return BoxLayout; }, + get BoxPanel () { return BoxPanel; }, + BoxSizer: BoxSizer, + get CommandPalette () { return CommandPalette; }, + ContextMenu: ContextMenu, + DockLayout: DockLayout, + get DockPanel () { return DockPanel; }, + FocusTracker: FocusTracker, + get GridLayout () { return GridLayout; }, + get Layout () { return Layout; }, + LayoutItem: LayoutItem, + get Menu () { return Menu; }, + get MenuBar () { return MenuBar; }, + Panel: Panel, + PanelLayout: PanelLayout, + ScrollBar: ScrollBar, + SingletonLayout: SingletonLayout, + get SplitLayout () { return SplitLayout; }, + get SplitPanel () { return SplitPanel; }, + StackedLayout: StackedLayout, + StackedPanel: StackedPanel, + get TabBar () { return TabBar; }, + TabPanel: TabPanel, + Title: Title, + get Widget () { return Widget; } + }); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$6 = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$4 = (undefined && undefined.__assign) || function () { + __assign$4 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$4.apply(this, arguments); + }; + /** + * Replace model ids with models recursively. + */ + function unpack_models(value, manager) { + if (Array.isArray(value)) { + var unpacked_1 = []; + value.forEach(function (sub_value, key) { + unpacked_1.push(unpack_models(sub_value, manager)); + }); + return Promise.all(unpacked_1); + } + else if (value instanceof Object) { + var unpacked_2 = {}; + Object.keys(value).forEach(function (key) { + unpacked_2[key] = unpack_models(value[key], manager); + }); + return resolvePromisesDict(unpacked_2); + } + else if (typeof value === 'string' && value.slice(0, 10) === 'IPY_MODEL_') { + // get_model returns a promise already + return manager.get_model(value.slice(10, value.length)); + } + else { + return Promise.resolve(value); + } + } + var WidgetModel = /** @class */ (function (_super) { + __extends$6(WidgetModel, _super); + function WidgetModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * The default attributes. + */ + WidgetModel.prototype.defaults = function () { + return { + _model_module: '@jupyter-widgets/base', + _model_name: 'WidgetModel', + _model_module_version: JUPYTER_WIDGETS_VERSION, + _view_module: '@jupyter-widgets/base', + _view_name: null, + _view_module_version: JUPYTER_WIDGETS_VERSION, + _view_count: null, + }; + }; + /** + * Test to see if the model has been synced with the server. + * + * #### Notes + * As of backbone 1.1, backbone ignores `patch` if it thinks the + * model has never been pushed. + */ + WidgetModel.prototype.isNew = function () { + return false; + }; + /** + * Constructor + * + * Initializes a WidgetModel instance. Called by the Backbone constructor. + * + * Parameters + * ---------- + * widget_manager : WidgetManager instance + * model_id : string + * An ID unique to this model. + * comm : Comm instance (optional) + */ + WidgetModel.prototype.initialize = function (attributes, options) { + _super.prototype.initialize.call(this, attributes, options); + // Attributes should be initialized here, since user initialization may depend on it + this.widget_manager = options.widget_manager; + this.model_id = options.model_id; + var comm = options.comm; + this.views = Object.create(null); + this.state_change = Promise.resolve(); + this._closed = false; + this._state_lock = null; + this._msg_buffer = null; + this._msg_buffer_callbacks = null; + this._pending_msgs = 0; + // _buffered_state_diff must be created *after* the super.initialize + // call above. See the note in the set() method below. + this._buffered_state_diff = {}; + if (comm) { + // Remember comm associated with the model. + this.comm = comm; + // Hook comm messages up to model. + comm.on_close(this._handle_comm_closed.bind(this)); + comm.on_msg(this._handle_comm_msg.bind(this)); + this.comm_live = true; + } + else { + this.comm_live = false; + } + }; + Object.defineProperty(WidgetModel.prototype, "comm_live", { + get: function () { + return this._comm_live; + }, + set: function (x) { + this._comm_live = x; + this.trigger('comm_live_update'); + }, + enumerable: true, + configurable: true + }); + /** + * Send a custom msg over the comm. + */ + WidgetModel.prototype.send = function (content, callbacks, buffers) { + if (this.comm !== undefined) { + var data = { method: 'custom', content: content }; + this.comm.send(data, callbacks, {}, buffers); + } + }; + /** + * Close model + * + * @param comm_closed - true if the comm is already being closed. If false, the comm will be closed. + * + * @returns - a promise that is fulfilled when all the associated views have been removed. + */ + WidgetModel.prototype.close = function (comm_closed) { + var _this = this; + if (comm_closed === void 0) { comm_closed = false; } + // can only be closed once. + if (this._closed) { + return; + } + this._closed = true; + if (this.comm && !comm_closed) { + this.comm.close(); + } + this.stopListening(); + this.trigger('destroy', this); + if (this.comm) { + delete this.comm; + } + // Delete all views of this model + var views = Object.keys(this.views).map(function (id) { + return _this.views[id].then(function (view) { return view.remove(); }); + }); + delete this.views; + return Promise.all(views).then(function () { return; }); + }; + /** + * Handle when a widget comm is closed. + */ + WidgetModel.prototype._handle_comm_closed = function (msg) { + this.trigger('comm:close'); + this.close(true); + }; + /** + * Handle incoming comm msg. + */ + WidgetModel.prototype._handle_comm_msg = function (msg) { + var _this = this; + var data = msg.content.data; + var method = data.method; + // tslint:disable-next-line:switch-default + switch (method) { + case 'update': + this.state_change = this.state_change + .then(function () { + var state = data.state; + var buffer_paths = data.buffer_paths || []; + // Make sure the buffers are DataViews + var buffers = (msg.buffers || []).map(function (b) { + if (b instanceof DataView) { + return b; + } + else { + return new DataView(b instanceof ArrayBuffer ? b : b.buffer); + } + }); + put_buffers(state, buffer_paths, buffers); + return _this.constructor._deserialize_state(state, _this.widget_manager); + }).then(function (state) { + _this.set_state(state); + }).catch(reject("Could not process update msg for model id: " + this.model_id, true)); + return this.state_change; + case 'custom': + this.trigger('msg:custom', data.content, msg.buffers); + return Promise.resolve(); + } + }; + /** + * Handle when a widget is updated from the backend. + * + * This function is meant for internal use only. Values set here will not be propagated on a sync. + */ + WidgetModel.prototype.set_state = function (state) { + this._state_lock = state; + try { + this.set(state); + } + catch (e) { + console.error("Error setting state: " + e.message); + } + finally { + this._state_lock = null; + } + }; + /** + * Get the serializable state of the model. + * + * If drop_default is truthy, attributes that are equal to their default + * values are dropped. + */ + WidgetModel.prototype.get_state = function (drop_defaults) { + var fullState = this.attributes; + if (drop_defaults) { + // if defaults is a function, call it + var d = this.defaults; + var defaults_1 = (typeof d === 'function') ? d.call(this) : d; + var state_1 = {}; + Object.keys(fullState).forEach(function (key) { + if (!(isEqual$1(fullState[key], defaults_1[key]))) { + state_1[key] = fullState[key]; + } + }); + return state_1; + } + else { + return __assign$4({}, fullState); + } + }; + /** + * Handle status msgs. + * + * execution_state : ('busy', 'idle', 'starting') + */ + WidgetModel.prototype._handle_status = function (msg) { + if (this.comm !== void 0) { + if (msg.content.execution_state === 'idle') { + this._pending_msgs--; + // Send buffer if one is waiting and we are below the throttle. + if (this._msg_buffer !== null + && this._pending_msgs < 1) { + this.send_sync_message(this._msg_buffer, this._msg_buffer_callbacks); + this._msg_buffer = null; + this._msg_buffer_callbacks = null; + } + } + } + }; + /** + * Create msg callbacks for a comm msg. + */ + WidgetModel.prototype.callbacks = function (view) { + return this.widget_manager.callbacks(view); + }; + /** + * Set one or more values. + * + * We just call the super method, in which val and options are optional. + * Handles both "key", value and {key: value} -style arguments. + */ + WidgetModel.prototype.set = function (key, val, options) { + // Call our patched backbone set. See #1642 and #1643. + var return_value = set.call(this, key, val, options); + // Backbone only remembers the diff of the most recent set() + // operation. Calling set multiple times in a row results in a + // loss of change information. Here we keep our own running diff. + // + // We don't buffer the state set in the constructor (including + // defaults), so we first check to see if we've initialized _buffered_state_diff. + // which happens after the constructor sets attributes at creation. + if (this._buffered_state_diff !== void 0) { + var attrs = this.changedAttributes() || {}; + // The state_lock lists attributes that are currently being changed + // right now from a kernel message. We don't want to send these + // non-changes back to the kernel, so we delete them out of attrs if + // they haven't changed from their state_lock value. + // The state lock could be null or undefined (if set is being called from + // the initializer). + if (this._state_lock) { + for (var _i = 0, _a = Object.keys(this._state_lock); _i < _a.length; _i++) { + var key_1 = _a[_i]; + if (attrs[key_1] === this._state_lock[key_1]) { + delete attrs[key_1]; + } + } + } + this._buffered_state_diff = assign(this._buffered_state_diff, attrs); + } + return return_value; + }; + /** + * Handle sync to the back-end. Called when a model.save() is called. + * + * Make sure a comm exists. + * + * Parameters + * ---------- + * method : create, update, patch, delete, read + * create/update always send the full attribute set + * patch - only send attributes listed in options.attrs, and if we + * are queuing up messages, combine with previous messages that have + * not been sent yet + * model : the model we are syncing + * will normally be the same as `this` + * options : dict + * the `attrs` key, if it exists, gives an {attr: value} dict that + * should be synced, otherwise, sync all attributes. + * + */ + WidgetModel.prototype.sync = function (method, model, options) { + if (options === void 0) { options = {}; } + // the typing is to return `any` since the super.sync method returns a JqXHR, but we just return false if there is an error. + if (this.comm === undefined) { + throw 'Syncing error: no comm channel defined'; + } + var attrs = (method === 'patch') ? options.attrs : model.get_state(options.drop_defaults); + // The state_lock lists attributes that are currently being changed + // right now from a kernel message. We don't want to send these + // non-changes back to the kernel, so we delete them out of attrs if + // they haven't changed from their state_lock value. + // The state lock could be null or undefined (if this is triggered + // from the initializer). + if (this._state_lock) { + for (var _i = 0, _a = Object.keys(this._state_lock); _i < _a.length; _i++) { + var key = _a[_i]; + if (attrs[key] === this._state_lock[key]) { + delete attrs[key]; + } + } + } + var msgState = this.serialize(attrs); + if (Object.keys(msgState).length > 0) { + // If this message was sent via backbone itself, it will not + // have any callbacks. It's important that we create callbacks + // so we can listen for status messages, etc... + var callbacks = options.callbacks || this.callbacks(); + // Check throttle. + if (this._pending_msgs >= 1) { + // The throttle has been exceeded, buffer the current msg so + // it can be sent once the kernel has finished processing + // some of the existing messages. + // Combine updates if it is a 'patch' sync, otherwise replace updates + switch (method) { + case 'patch': + this._msg_buffer = assign(this._msg_buffer || {}, msgState); + break; + case 'update': + case 'create': + this._msg_buffer = msgState; + break; + default: + throw 'unrecognized syncing method'; + } + this._msg_buffer_callbacks = callbacks; + } + else { + // We haven't exceeded the throttle, send the message like + // normal. + this.send_sync_message(attrs, callbacks); + // Since the comm is a one-way communication, assume the message + // arrived and was processed successfully. + // Don't call options.success since we don't have a model back from + // the server. Note that this means we don't have the Backbone + // 'sync' event. + } + } + }; + /** + * Serialize widget state. + * + * A serializer is a function which takes in a state attribute and a widget, + * and synchronously returns a JSONable object. The returned object will + * have toJSON called if possible, and the final result should be a + * primitive object that is a snapshot of the widget state that may have + * binary array buffers. + */ + WidgetModel.prototype.serialize = function (state) { + var serializers = this.constructor.serializers || {}; + for (var _i = 0, _a = Object.keys(state); _i < _a.length; _i++) { + var k = _a[_i]; + try { + if (serializers[k] && serializers[k].serialize) { + state[k] = (serializers[k].serialize)(state[k], this); + } + else { + // the default serializer just deep-copies the object + state[k] = JSON.parse(JSON.stringify(state[k])); + } + if (state[k] && state[k].toJSON) { + state[k] = state[k].toJSON(); + } + } + catch (e) { + console.error('Error serializing widget state attribute: ', k); + throw e; + } + } + return state; + }; + /** + * Send a sync message to the kernel. + */ + WidgetModel.prototype.send_sync_message = function (state, callbacks) { + var _this = this; + if (callbacks === void 0) { callbacks = {}; } + try { + callbacks.iopub = callbacks.iopub || {}; + var statuscb_1 = callbacks.iopub.status; + callbacks.iopub.status = function (msg) { + _this._handle_status(msg); + if (statuscb_1) { + statuscb_1(msg); + } + }; + // split out the binary buffers + var split = remove_buffers(state); + this.comm.send({ + method: 'update', + state: split.state, + buffer_paths: split.buffer_paths + }, callbacks, {}, split.buffers); + this._pending_msgs++; + } + catch (e) { + console.error('Could not send widget sync message', e); + } + }; + /** + * Push this model's state to the back-end + * + * This invokes a Backbone.Sync. + */ + WidgetModel.prototype.save_changes = function (callbacks) { + if (this.comm_live) { + var options = { patch: true }; + if (callbacks) { + options.callbacks = callbacks; + } + this.save(this._buffered_state_diff, options); + this._buffered_state_diff = {}; + } + }; + /** + * on_some_change(['key1', 'key2'], foo, context) differs from + * on('change:key1 change:key2', foo, context). + * If the widget attributes key1 and key2 are both modified, + * the second form will result in foo being called twice + * while the first will call foo only once. + */ + WidgetModel.prototype.on_some_change = function (keys, callback, context) { + var scope = this; + this.on('change', function () { + if (keys.some(scope.hasChanged, scope)) { + callback.apply(context, arguments); + } + }, this); + }; + /** + * Serialize the model. See the deserialization function at the top of this file + * and the kernel-side serializer/deserializer. + */ + WidgetModel.prototype.toJSON = function (options) { + return "IPY_MODEL_" + this.model_id; + }; + /** + * Returns a promise for the deserialized state. The second argument + * is an instance of widget manager, which is required for the + * deserialization of widget models. + */ + WidgetModel._deserialize_state = function (state, manager) { + var serializers = this.serializers; + var deserialized; + if (serializers) { + deserialized = {}; + for (var k in state) { + if (serializers[k] && serializers[k].deserialize) { + deserialized[k] = (serializers[k].deserialize)(state[k], manager); + } + else { + deserialized[k] = state[k]; + } + } + } + else { + deserialized = state; + } + return resolvePromisesDict(deserialized); + }; + return WidgetModel; + }(__export2)); + var DOMWidgetModel = /** @class */ (function (_super) { + __extends$6(DOMWidgetModel, _super); + function DOMWidgetModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + DOMWidgetModel.prototype.defaults = function () { + return assign(_super.prototype.defaults.call(this), { + _dom_classes: [] + // We do not declare defaults for the layout and style attributes. + // Those defaults are constructed on the kernel side and synced here + // as needed, and our code here copes with those attributes being + // undefined. See + // https://github.com/jupyter-widgets/ipywidgets/issues/1620 and + // https://github.com/jupyter-widgets/ipywidgets/pull/1621 + }); + }; + DOMWidgetModel.serializers = __assign$4(__assign$4({}, WidgetModel.serializers), { layout: { deserialize: unpack_models }, style: { deserialize: unpack_models } }); + return DOMWidgetModel; + }(WidgetModel)); + var WidgetView = /** @class */ (function (_super) { + __extends$6(WidgetView, _super); + /** + * Public constructor. + */ + function WidgetView(options) { + return _super.call(this, options) || this; + } + /** + * Initializer, called at the end of the constructor. + */ + WidgetView.prototype.initialize = function (parameters) { + var _this = this; + this.listenTo(this.model, 'change', function () { + var changed = Object.keys(_this.model.changedAttributes() || {}); + if (changed[0] === '_view_count' && changed.length === 1) { + // Just the view count was updated + return; + } + _this.update(); + }); + this.options = parameters.options; + this.once('remove', function () { + if (typeof (_this.model.get('_view_count')) === 'number') { + _this.model.set('_view_count', _this.model.get('_view_count') - 1); + _this.model.save_changes(); + } + }); + this.once('displayed', function () { + if (typeof (_this.model.get('_view_count')) === 'number') { + _this.model.set('_view_count', _this.model.get('_view_count') + 1); + _this.model.save_changes(); + } + }); + this.displayed = new Promise(function (resolve, reject) { + _this.once('displayed', resolve); + }); + }; + /** + * Triggered on model change. + * + * Update view to be consistent with this.model + */ + WidgetView.prototype.update = function (options) { + return; + }; + /** + * Render a view + * + * @returns the view or a promise to the view. + */ + WidgetView.prototype.render = function () { + return; + }; + /** + * Create and promise that resolves to a child view of a given model + */ + WidgetView.prototype.create_child_view = function (child_model, options) { + if (options === void 0) { options = {}; } + options = __assign$4({ parent: this }, options); + return this.model.widget_manager.create_view(child_model, options) + .catch(reject('Could not create child view', true)); + }; + /** + * Create msg callbacks for a comm msg. + */ + WidgetView.prototype.callbacks = function () { + return this.model.callbacks(this); + }; + /** + * Send a custom msg associated with this view. + */ + WidgetView.prototype.send = function (content, buffers) { + this.model.send(content, this.callbacks(), buffers); + }; + WidgetView.prototype.touch = function () { + this.model.save_changes(this.callbacks()); + }; + WidgetView.prototype.remove = function () { + // Raise a remove event when the view is removed. + _super.prototype.remove.call(this); + this.trigger('remove'); + return this; + }; + return WidgetView; + }(NativeView)); + var JupyterPhosphorWidget = /** @class */ (function (_super) { + __extends$6(JupyterPhosphorWidget, _super); + function JupyterPhosphorWidget(options) { + var _this = this; + var view = options.view; + delete options.view; + _this = _super.call(this, options) || this; + _this._view = view; + return _this; + } + /** + * Dispose the widget. + * + * This causes the view to be destroyed as well with 'remove' + */ + JupyterPhosphorWidget.prototype.dispose = function () { + if (this.isDisposed) { + return; + } + _super.prototype.dispose.call(this); + if (this._view) { + this._view.remove(); + } + this._view = null; + }; + /** + * Process the phosphor message. + * + * Any custom phosphor widget used inside a Jupyter widget should override + * the processMessage function like this. + */ + JupyterPhosphorWidget.prototype.processMessage = function (msg) { + _super.prototype.processMessage.call(this, msg); + this._view.processPhosphorMessage(msg); + }; + return JupyterPhosphorWidget; + }(Widget)); + var JupyterPhosphorPanelWidget = /** @class */ (function (_super) { + __extends$6(JupyterPhosphorPanelWidget, _super); + function JupyterPhosphorPanelWidget(options) { + var _this = this; + var view = options.view; + delete options.view; + _this = _super.call(this, options) || this; + _this._view = view; + return _this; + } + /** + * Process the phosphor message. + * + * Any custom phosphor widget used inside a Jupyter widget should override + * the processMessage function like this. + */ + JupyterPhosphorPanelWidget.prototype.processMessage = function (msg) { + _super.prototype.processMessage.call(this, msg); + this._view.processPhosphorMessage(msg); + }; + /** + * Dispose the widget. + * + * This causes the view to be destroyed as well with 'remove' + */ + JupyterPhosphorPanelWidget.prototype.dispose = function () { + if (this.isDisposed) { + return; + } + _super.prototype.dispose.call(this); + if (this._view) { + this._view.remove(); + } + this._view = null; + }; + return JupyterPhosphorPanelWidget; + }(Panel)); + var DOMWidgetView = /** @class */ (function (_super) { + __extends$6(DOMWidgetView, _super); + function DOMWidgetView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor + */ + DOMWidgetView.prototype.initialize = function (parameters) { + var _this = this; + _super.prototype.initialize.call(this, parameters); + this.listenTo(this.model, 'change:_dom_classes', function (model, new_classes) { + var old_classes = model.previous('_dom_classes'); + _this.update_classes(old_classes, new_classes); + }); + this.layoutPromise = Promise.resolve(); + this.listenTo(this.model, 'change:layout', function (model, value) { + _this.setLayout(value, model.previous('layout')); + }); + this.stylePromise = Promise.resolve(); + this.listenTo(this.model, 'change:style', function (model, value) { + _this.setStyle(value, model.previous('style')); + }); + this.displayed.then(function () { + _this.update_classes([], _this.model.get('_dom_classes')); + _this.setLayout(_this.model.get('layout')); + _this.setStyle(_this.model.get('style')); + }); + this._comm_live_update(); + this.listenTo(this.model, 'comm_live_update', function () { + _this._comm_live_update(); + }); + }; + DOMWidgetView.prototype.setLayout = function (layout, oldLayout) { + var _this = this; + if (layout) { + this.layoutPromise = this.layoutPromise.then(function (oldLayoutView) { + if (oldLayoutView) { + oldLayoutView.unlayout(); + _this.stopListening(oldLayoutView.model); + oldLayoutView.remove(); + } + return _this.create_child_view(layout).then(function (view) { + // Trigger the displayed event of the child view. + return _this.displayed.then(function () { + view.trigger('displayed'); + _this.listenTo(view.model, 'change', function () { + // Post (asynchronous) so layout changes can take + // effect first. + MessageLoop.postMessage(_this.pWidget, Widget.ResizeMessage.UnknownSize); + }); + MessageLoop.postMessage(_this.pWidget, Widget.ResizeMessage.UnknownSize); + return view; + }); + }).catch(reject('Could not add LayoutView to DOMWidgetView', true)); + }); + } + }; + DOMWidgetView.prototype.setStyle = function (style, oldStyle) { + var _this = this; + if (style) { + this.stylePromise = this.stylePromise.then(function (oldStyleView) { + if (oldStyleView) { + oldStyleView.unstyle(); + _this.stopListening(oldStyleView.model); + oldStyleView.remove(); + } + return _this.create_child_view(style).then(function (view) { + // Trigger the displayed event of the child view. + return _this.displayed.then(function () { + view.trigger('displayed'); + // Unlike for the layout attribute, style changes don't + // trigger phosphor resize messages. + return view; + }); + }).catch(reject('Could not add styleView to DOMWidgetView', true)); + }); + } + }; + /** + * Update the DOM classes applied to an element, default to this.el. + */ + DOMWidgetView.prototype.update_classes = function (old_classes, new_classes, el) { + if (el === undefined) { + el = this.el; + } + difference(old_classes, new_classes).map(function (c) { + if (el.classList) { // classList is not supported by IE for svg elements + el.classList.remove(c); + } + else { + el.setAttribute('class', el.getAttribute('class').replace(c, '')); + } + }); + difference(new_classes, old_classes).map(function (c) { + if (el.classList) { // classList is not supported by IE for svg elements + el.classList.add(c); + } + else { + el.setAttribute('class', el.getAttribute('class').concat(' ', c)); + } + }); + }; + /** + * Update the DOM classes applied to the widget based on a single + * trait's value. + * + * Given a trait value classes map, this function automatically + * handles applying the appropriate classes to the widget element + * and removing classes that are no longer valid. + * + * Parameters + * ---------- + * class_map: dictionary + * Dictionary of trait values to class lists. + * Example: + * { + * success: ['alert', 'alert-success'], + * info: ['alert', 'alert-info'], + * warning: ['alert', 'alert-warning'], + * danger: ['alert', 'alert-danger'] + * }; + * trait_name: string + * Name of the trait to check the value of. + * el: optional DOM element handle, defaults to this.el + * Element that the classes are applied to. + */ + DOMWidgetView.prototype.update_mapped_classes = function (class_map, trait_name, el) { + var key = this.model.previous(trait_name); + var old_classes = class_map[key] ? class_map[key] : []; + key = this.model.get(trait_name); + var new_classes = class_map[key] ? class_map[key] : []; + this.update_classes(old_classes, new_classes, el || this.el); + }; + DOMWidgetView.prototype.set_mapped_classes = function (class_map, trait_name, el) { + var key = this.model.get(trait_name); + var new_classes = class_map[key] ? class_map[key] : []; + this.update_classes([], new_classes, el || this.el); + }; + DOMWidgetView.prototype._setElement = function (el) { + if (this.pWidget) { + this.pWidget.dispose(); + } + this.$el = el instanceof $$1 ? el : $$1(el); + this.el = this.$el[0]; + this.pWidget = new JupyterPhosphorWidget({ + node: el, + view: this + }); + }; + DOMWidgetView.prototype.remove = function () { + if (this.pWidget) { + this.pWidget.dispose(); + } + return _super.prototype.remove.call(this); + }; + DOMWidgetView.prototype.processPhosphorMessage = function (msg) { + // tslint:disable-next-line:switch-default + switch (msg.type) { + case 'after-attach': + this.trigger('displayed'); + break; + } + }; + DOMWidgetView.prototype._comm_live_update = function () { + if (this.model.comm_live) { + this.pWidget.removeClass('jupyter-widgets-disconnected'); + } + else { + this.pWidget.addClass('jupyter-widgets-disconnected'); + } + }; + return DOMWidgetView; + }(WidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$7 = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + /** + * css properties exposed by the layout widget with their default values. + */ + var css_properties = { + align_content: null, + align_items: null, + align_self: null, + border: null, + bottom: null, + display: null, + flex: null, + flex_flow: null, + height: null, + justify_content: null, + justify_items: null, + left: null, + margin: null, + max_height: null, + max_width: null, + min_height: null, + min_width: null, + overflow: null, + overflow_x: null, + overflow_y: null, + order: null, + padding: null, + right: null, + top: null, + visibility: null, + width: null, + // image-specific + object_fit: null, + object_position: null, + // container + grid_auto_columns: null, + grid_auto_flow: null, + grid_auto_rows: null, + grid_gap: null, + grid_template_rows: null, + grid_template_columns: null, + grid_template_areas: null, + // items + grid_row: null, + grid_column: null, + grid_area: null + }; + var LayoutModel = /** @class */ (function (_super) { + __extends$7(LayoutModel, _super); + function LayoutModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + LayoutModel.prototype.defaults = function () { + return assign(_super.prototype.defaults.call(this), { + _model_name: 'LayoutModel', + _view_name: 'LayoutView' + }, css_properties); + }; + return LayoutModel; + }(WidgetModel)); + var LayoutView = /** @class */ (function (_super) { + __extends$7(LayoutView, _super); + function LayoutView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor + */ + LayoutView.prototype.initialize = function (parameters) { + this._traitNames = []; + _super.prototype.initialize.call(this, parameters); + // Register the traits that live on the Python side + for (var _i = 0, _a = Object.keys(css_properties); _i < _a.length; _i++) { + var key = _a[_i]; + this.registerTrait(key); + } + }; + /** + * Register a CSS trait that is known by the model + * @param trait + */ + LayoutView.prototype.registerTrait = function (trait) { + var _this = this; + this._traitNames.push(trait); + // Treat overflow_x and overflow_y as a special case since they are deprecated + // and interact in special ways with the overflow attribute. + if (trait === 'overflow_x' || trait === 'overflow_y') { + // Listen to changes, and set the value on change. + this.listenTo(this.model, 'change:' + trait, function (model, value) { + _this.handleOverflowChange(trait, value); + }); + // Set the initial value on display. + this.handleOverflowChange(trait, this.model.get(trait)); + return; + } + // Listen to changes, and set the value on change. + this.listenTo(this.model, 'change:' + trait, function (model, value) { + _this.handleChange(trait, value); + }); + // Set the initial value on display. + this.handleChange(trait, this.model.get(trait)); + }; + /** + * Get the the name of the css property from the trait name + * @param model attribute name + * @return css property name + */ + LayoutView.prototype.css_name = function (trait) { + return trait.replace(/_/g, '-'); + }; + /** + * Handles when a trait value changes + */ + LayoutView.prototype.handleChange = function (trait, value) { + // should be synchronous so that we can measure later. + var parent = this.options.parent; + if (parent) { + if (value === null) { + parent.el.style.removeProperty(this.css_name(trait)); + } + else { + parent.el.style[this.css_name(trait)] = value; + } + } + else { + console.warn('Style not applied because a parent view does not exist'); + } + }; + /** + * Handles when the value of overflow_x or overflow_y changes + */ + LayoutView.prototype.handleOverflowChange = function (trait, value) { + // This differs from the default handleChange method + // in that setting `overflow_x` or `overflow_y` to null + // when `overflow` is null removes the attribute. + var parent = this.options.parent; + if (parent) { + if (value === null) { + if (this.model.get('overflow') === null) { + parent.el.style.removeProperty(this.css_name(trait)); + } + } + else { + parent.el.style[this.css_name(trait)] = value; + } + } + else { + console.warn('Style not applied because a parent view does not exist'); + } + }; + /** + * Remove the styling from the parent view. + */ + LayoutView.prototype.unlayout = function () { + var _this = this; + var parent = this.options.parent; + this._traitNames.forEach(function (trait) { + if (parent) { + parent.el.style.removeProperty(_this.css_name(trait)); + } + else { + console.warn('Style not removed because a parent view does not exist'); + } + }, this); + }; + return LayoutView; + }(WidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$8 = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var StyleModel = /** @class */ (function (_super) { + __extends$8(StyleModel, _super); + function StyleModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + StyleModel.prototype.defaults = function () { + var Derived = this.constructor; + return assign(_super.prototype.defaults.call(this), { + _model_name: 'StyleModel', + _view_name: 'StyleView', + }, Object.keys(Derived.styleProperties).reduce(function (obj, key) { + obj[key] = Derived.styleProperties[key].default; + return obj; + }, {})); + }; + StyleModel.styleProperties = {}; + return StyleModel; + }(WidgetModel)); + var StyleView = /** @class */ (function (_super) { + __extends$8(StyleView, _super); + function StyleView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor + */ + StyleView.prototype.initialize = function (parameters) { + this._traitNames = []; + _super.prototype.initialize.call(this, parameters); + // Register the traits that live on the Python side + var ModelType = this.model.constructor; + for (var _i = 0, _a = Object.keys(ModelType.styleProperties); _i < _a.length; _i++) { + var key = _a[_i]; + this.registerTrait(key); + } + // Set the initial styles + this.style(); + }; + /** + * Register a CSS trait that is known by the model + * @param trait + */ + StyleView.prototype.registerTrait = function (trait) { + var _this = this; + this._traitNames.push(trait); + // Listen to changes, and set the value on change. + this.listenTo(this.model, 'change:' + trait, function (model, value) { + _this.handleChange(trait, value); + }); + }; + /** + * Handles when a trait value changes + */ + StyleView.prototype.handleChange = function (trait, value) { + // should be synchronous so that we can measure later. + var parent = this.options.parent; + if (parent) { + var ModelType = this.model.constructor; + var styleProperties = ModelType.styleProperties; + var attribute = styleProperties[trait].attribute; + var selector = styleProperties[trait].selector; + var elements = selector ? parent.el.querySelectorAll(selector) : [parent.el]; + if (value === null) { + for (var i = 0; i !== elements.length; ++i) { + elements[i].style.removeProperty(attribute); + } + } + else { + for (var i = 0; i !== elements.length; ++i) { + elements[i].style[attribute] = value; + } + } + } + else { + console.warn('Style not applied because a parent view does not exist'); + } + }; + /** + * Apply styles for all registered traits + */ + StyleView.prototype.style = function () { + for (var _i = 0, _a = this._traitNames; _i < _a.length; _i++) { + var trait = _a[_i]; + this.handleChange(trait, this.model.get(trait)); + } + }; + /** + * Remove the styling from the parent view. + */ + StyleView.prototype.unstyle = function () { + var parent = this.options.parent; + var ModelType = this.model.constructor; + var styleProperties = ModelType.styleProperties; + this._traitNames.forEach(function (trait) { + if (parent) { + var attribute = styleProperties[trait].attribute; + var selector = styleProperties[trait].selector; + var elements = selector ? parent.el.querySelectorAll(selector) : [parent.el]; + for (var i = 0; i !== elements.length; ++i) { + elements[i].style.removeProperty(attribute); + } + } + else { + console.warn('Style not removed because a parent view does not exist'); + } + }, this); + }; + return StyleView; + }(WidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator$1 = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + var shims; + (function (shims) { + var services; + (function (services) { + /** + * Public constructor + * @param jsServicesKernel - @jupyterlab/services Kernel.IKernel instance + */ + var CommManager = /** @class */ (function () { + function CommManager(jsServicesKernel) { + this.targets = Object.create(null); + this.comms = Object.create(null); + this.kernel = null; + this.jsServicesKernel = null; + this.init_kernel(jsServicesKernel); + } + /** + * Hookup kernel events. + * @param {Kernel.IKernel} jsServicesKernel - @jupyterlab/services Kernel.IKernel instance + */ + CommManager.prototype.init_kernel = function (jsServicesKernel) { + this.kernel = jsServicesKernel; // These aren't really the same. + this.jsServicesKernel = jsServicesKernel; + }; + /** + * Creates a new connected comm + */ + CommManager.prototype.new_comm = function (target_name, data, callbacks, metadata, comm_id, buffers) { + return __awaiter$1(this, void 0, void 0, function () { + var c, comm; + return __generator$1(this, function (_a) { + c = this.jsServicesKernel.createComm(target_name, comm_id); + comm = new Comm(c); + this.register_comm(comm); + comm.open(data, callbacks, metadata, buffers); + return [2 /*return*/, comm]; + }); + }); + }; + /** + * Register a comm target + * @param {string} target_name + * @param {(Comm, object) => void} f - callback that is called when the + * comm is made. Signature of f(comm, msg). + */ + CommManager.prototype.register_target = function (target_name, f) { + var _this = this; + var handle = this.jsServicesKernel.registerCommTarget(target_name, function (jsServicesComm, msg) { + // Create the comm. + var comm = new Comm(jsServicesComm); + _this.register_comm(comm); + // Call the callback for the comm. + try { + return f(comm, msg); + } + catch (e) { + comm.close(); + console.error(e); + console.error(new Error('Exception opening new comm')); + } + }); + this.targets[target_name] = handle; + }; + /** + * Unregisters a comm target + * @param {string} target_name + */ + CommManager.prototype.unregister_target = function (target_name, f) { + var handle = this.targets[target_name]; + handle.dispose(); + delete this.targets[target_name]; + }; + /** + * Register a comm in the mapping + */ + CommManager.prototype.register_comm = function (comm) { + this.comms[comm.comm_id] = Promise.resolve(comm); + comm.kernel = this.kernel; + return comm.comm_id; + }; + return CommManager; + }()); + services.CommManager = CommManager; + /** + * Public constructor + * @param {IComm} jsServicesComm - @jupyterlab/services IComm instance + */ + var Comm = /** @class */ (function () { + function Comm(jsServicesComm) { + this.jsServicesComm = null; + this.kernel = null; + this.jsServicesComm = jsServicesComm; + } + Object.defineProperty(Comm.prototype, "comm_id", { + /** + * Comm id + * @return {string} + */ + get: function () { + return this.jsServicesComm.commId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Comm.prototype, "target_name", { + /** + * Target name + * @return {string} + */ + get: function () { + return this.jsServicesComm.targetName; + }, + enumerable: true, + configurable: true + }); + /** + * Opens a sibling comm in the backend + * @param data + * @param callbacks + * @param metadata + * @return msg id + */ + Comm.prototype.open = function (data, callbacks, metadata, buffers) { + var future = this.jsServicesComm.open(data, metadata, buffers); + this._hookupCallbacks(future, callbacks); + return future.msg.header.msg_id; + }; + /** + * Sends a message to the sibling comm in the backend + * @param data + * @param callbacks + * @param metadata + * @param buffers + * @return message id + */ + Comm.prototype.send = function (data, callbacks, metadata, buffers) { + var future = this.jsServicesComm.send(data, metadata, buffers); + this._hookupCallbacks(future, callbacks); + return future.msg.header.msg_id; + }; + /** + * Closes the sibling comm in the backend + * @param data + * @param callbacks + * @param metadata + * @return msg id + */ + Comm.prototype.close = function (data, callbacks, metadata, buffers) { + var future = this.jsServicesComm.close(data, metadata, buffers); + this._hookupCallbacks(future, callbacks); + return future.msg.header.msg_id; + }; + /** + * Register a message handler + * @param callback, which is given a message + */ + Comm.prototype.on_msg = function (callback) { + this.jsServicesComm.onMsg = callback.bind(this); + }; + /** + * Register a handler for when the comm is closed by the backend + * @param callback, which is given a message + */ + Comm.prototype.on_close = function (callback) { + this.jsServicesComm.onClose = callback.bind(this); + }; + /** + * Hooks callback object up with @jupyterlab/services IKernelFuture + * @param @jupyterlab/services IKernelFuture instance + * @param callbacks + */ + Comm.prototype._hookupCallbacks = function (future, callbacks) { + if (callbacks) { + future.onReply = function (msg) { + if (callbacks.shell && callbacks.shell.reply) { + callbacks.shell.reply(msg); + } + // TODO: Handle payloads. See https://github.com/jupyter/notebook/blob/master/notebook/static/services/kernels/kernel.js#L923-L947 + }; + future.onStdin = function (msg) { + if (callbacks.input) { + callbacks.input(msg); + } + }; + future.onIOPub = function (msg) { + if (callbacks.iopub) { + if (callbacks.iopub.status && msg.header.msg_type === 'status') { + callbacks.iopub.status(msg); + } + else if (callbacks.iopub.clear_output && msg.header.msg_type === 'clear_output') { + callbacks.iopub.clear_output(msg); + } + else if (callbacks.iopub.output) { + switch (msg.header.msg_type) { + case 'display_data': + case 'execute_result': + case 'stream': + case 'error': + callbacks.iopub.output(msg); + break; + default: break; + } + } + } + }; + } + }; + return Comm; + }()); + services.Comm = Comm; + })(services = shims.services || (shims.services = {})); + })(shims || (shims = {})); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /** + * - create_view and remove_view are default functions called when adding or removing views + * - create_view takes a model and an index and returns a view or a promise for a view for that model + * - remove_view takes a view and destroys it (including calling `view.remove()`) + * - each time the update() function is called with a new list, the create and remove + * callbacks will be called in an order so that if you append the views created in the + * create callback and remove the views in the remove callback, you will duplicate + * the order of the list. + * - the remove callback defaults to just removing the view (e.g., pass in null for the second parameter) + * - the context defaults to the created ViewList. If you pass another context, the create and remove + * will be called in that context. + */ + var ViewList = /** @class */ (function () { + function ViewList(create_view, remove_view, context) { + this.initialize(create_view, remove_view, context); + } + ViewList.prototype.initialize = function (create_view, remove_view, context) { + this._handler_context = context || this; + this._models = []; + this.views = []; // list of promises for views + this._create_view = create_view; + this._remove_view = remove_view || function (view) { view.remove(); }; + }; + /** + * the create_view, remove_view, and context arguments override the defaults + * specified when the list is created. + * after this function, the .views attribute is a list of promises for views + * if you want to perform some action on the list of views, do something like + * `Promise.all(myviewlist.views).then(function(views) {...});` + */ + ViewList.prototype.update = function (new_models, create_view, remove_view, context) { + var remove = remove_view || this._remove_view; + var create = create_view || this._create_view; + context = context || this._handler_context; + var i = 0; + // first, skip past the beginning of the lists if they are identical + for (; i < new_models.length; i++) { + if (i >= this._models.length || new_models[i] !== this._models[i]) { + break; + } + } + var first_removed = i; + // Remove the non-matching items from the old list. + var removed = this.views.splice(first_removed, this.views.length - first_removed); + for (var j = 0; j < removed.length; j++) { + removed[j].then(function (view) { + remove.call(context, view); + }); + } + // Add the rest of the new list items. + for (; i < new_models.length; i++) { + this.views.push(Promise.resolve(create.call(context, new_models[i], i))); + } + // make a copy of the input array + this._models = new_models.slice(); + // return a promise that resolves to all of the resolved views + return Promise.all(this.views); + }; + /** + * removes every view in the list; convenience function for `.update([])` + * that should be faster + * returns a promise that resolves after this removal is done + */ + ViewList.prototype.remove = function () { + var _this = this; + return Promise.all(this.views).then(function (views) { + views.forEach(function (value) { return _this._remove_view.call(_this._handler_context, value); }); + _this.views = []; + _this._models = []; + }); + }; + /** + * Dispose this viewlist. + * + * A synchronous function which just deletes references to child views. This + * function does not call .remove() on child views because that is + * asynchronous. Use this in cases where child views will be removed in + * another way. + */ + ViewList.prototype.dispose = function () { + this.views = null; + this._models = null; + }; + return ViewList; + }()); + + // Copyright (c) Jupyter Development Team. + /** + * A runtime interface token for a widget registry. + */ + var IJupyterWidgetRegistry = new Token('jupyter.extensions.jupyterWidgetRegistry'); + + // Copyright (c) Jupyter Development Team. + + var lib$1 = /*#__PURE__*/Object.freeze({ + ManagerBase: ManagerBase, + serialize_state: serialize_state, + unpack_models: unpack_models, + WidgetModel: WidgetModel, + DOMWidgetModel: DOMWidgetModel, + WidgetView: WidgetView, + JupyterPhosphorWidget: JupyterPhosphorWidget, + JupyterPhosphorPanelWidget: JupyterPhosphorPanelWidget, + DOMWidgetView: DOMWidgetView, + LayoutModel: LayoutModel, + LayoutView: LayoutView, + StyleModel: StyleModel, + StyleView: StyleView, + get shims () { return shims; }, + ViewList: ViewList, + JUPYTER_WIDGETS_VERSION: JUPYTER_WIDGETS_VERSION, + PROTOCOL_VERSION: PROTOCOL_VERSION, + difference: difference, + isEqual: isEqual$1, + assign: assign, + uuid: uuid, + WrappedError: WrappedError, + resolvePromisesDict: resolvePromisesDict, + reject: reject, + put_buffers: put_buffers, + remove_buffers: remove_buffers, + bufferToHex: bufferToHex, + hexToBuffer: hexToBuffer, + bufferToBase64: bufferToBase64, + base64ToBuffer: base64ToBuffer, + IJupyterWidgetRegistry: IJupyterWidgetRegistry + }); + + // Copyright (c) Jupyter Development Team. + const hexTable$1 = [ + '00', + '01', + '02', + '03', + '04', + '05', + '06', + '07', + '08', + '09', + '0A', + '0B', + '0C', + '0D', + '0E', + '0F', + '10', + '11', + '12', + '13', + '14', + '15', + '16', + '17', + '18', + '19', + '1A', + '1B', + '1C', + '1D', + '1E', + '1F', + '20', + '21', + '22', + '23', + '24', + '25', + '26', + '27', + '28', + '29', + '2A', + '2B', + '2C', + '2D', + '2E', + '2F', + '30', + '31', + '32', + '33', + '34', + '35', + '36', + '37', + '38', + '39', + '3A', + '3B', + '3C', + '3D', + '3E', + '3F', + '40', + '41', + '42', + '43', + '44', + '45', + '46', + '47', + '48', + '49', + '4A', + '4B', + '4C', + '4D', + '4E', + '4F', + '50', + '51', + '52', + '53', + '54', + '55', + '56', + '57', + '58', + '59', + '5A', + '5B', + '5C', + '5D', + '5E', + '5F', + '60', + '61', + '62', + '63', + '64', + '65', + '66', + '67', + '68', + '69', + '6A', + '6B', + '6C', + '6D', + '6E', + '6F', + '70', + '71', + '72', + '73', + '74', + '75', + '76', + '77', + '78', + '79', + '7A', + '7B', + '7C', + '7D', + '7E', + '7F', + '80', + '81', + '82', + '83', + '84', + '85', + '86', + '87', + '88', + '89', + '8A', + '8B', + '8C', + '8D', + '8E', + '8F', + '90', + '91', + '92', + '93', + '94', + '95', + '96', + '97', + '98', + '99', + '9A', + '9B', + '9C', + '9D', + '9E', + '9F', + 'A0', + 'A1', + 'A2', + 'A3', + 'A4', + 'A5', + 'A6', + 'A7', + 'A8', + 'A9', + 'AA', + 'AB', + 'AC', + 'AD', + 'AE', + 'AF', + 'B0', + 'B1', + 'B2', + 'B3', + 'B4', + 'B5', + 'B6', + 'B7', + 'B8', + 'B9', + 'BA', + 'BB', + 'BC', + 'BD', + 'BE', + 'BF', + 'C0', + 'C1', + 'C2', + 'C3', + 'C4', + 'C5', + 'C6', + 'C7', + 'C8', + 'C9', + 'CA', + 'CB', + 'CC', + 'CD', + 'CE', + 'CF', + 'D0', + 'D1', + 'D2', + 'D3', + 'D4', + 'D5', + 'D6', + 'D7', + 'D8', + 'D9', + 'DA', + 'DB', + 'DC', + 'DD', + 'DE', + 'DF', + 'E0', + 'E1', + 'E2', + 'E3', + 'E4', + 'E5', + 'E6', + 'E7', + 'E8', + 'E9', + 'EA', + 'EB', + 'EC', + 'ED', + 'EE', + 'EF', + 'F0', + 'F1', + 'F2', + 'F3', + 'F4', + 'F5', + 'F6', + 'F7', + 'F8', + 'F9', + 'FA', + 'FB', + 'FC', + 'FD', + 'FE', + 'FF' + ]; + /** + * Convert an ArrayBuffer to a hex string. + */ + function bufferToHex$1(buffer) { + const x = new Uint8Array(buffer); + const s = []; + for (let i = 0; i < x.length; i++) { + s.push(hexTable$1[x[i]]); + } + return s.join(''); + } + /** + * Convert a hex string to an ArrayBuffer. + */ + function hexToBuffer$1(hex) { + const x = new Uint8Array(hex.length / 2); + for (let i = 0; i < hex.length; i += 2) { + x[i / 2] = parseInt(hex.slice(i, i + 2), 16); + } + return x.buffer; + } + /** + * Convert an ArrayBuffer to a base64 string. + */ + function bufferToBase64$1(buffer) { + return fromByteArray_1(new Uint8Array(buffer)); + } + /** + * Convert a base64 string to an ArrayBuffer. + */ + function base64ToBuffer$1(base64) { + return toByteArray_1(base64).buffer; + } + + // Copyright (c) Jupyter Development Team. + const PROTOCOL_MAJOR_VERSION$1 = PROTOCOL_VERSION.split('.', 1)[0]; + /** + * Manager abstract base class + */ + class ManagerBase$1 { + constructor() { + /** + * The comm target name to register + */ + this.comm_target_name = 'jupyter.widget'; + /** + * Dictionary of model ids and model instance promises + */ + this._models = Object.create(null); + } + /** + * Modifies view options. Generally overloaded in custom widget manager + * implementations. + */ + setViewOptions(options = {}) { + return options; + } + create_view(model, options = {}) { + const id = uuid(); + const viewPromise = (model.state_change = model.state_change.then(async () => { + try { + const ViewType = (await this.loadClass(model.get('_view_name'), model.get('_view_module'), model.get('_view_module_version'))); + const view = new ViewType({ + model: model, + options: this.setViewOptions(options) + }); + view.listenTo(model, 'destroy', view.remove); + await view.render(); + // This presumes the view is added to the list of model views below + view.once('remove', () => { + delete model.views[id]; + }); + return view; + } + catch (e) { + console.error(`Could not create a view for model id ${model.model_id}`); + throw e; + } + })); + model.views[id] = viewPromise; + return viewPromise; + } + /** + * callback handlers specific to a view + */ + callbacks(view) { + return {}; + } + /** + * Get a promise for a model by model id. + * + * #### Notes + * If a model is not found, undefined is returned (NOT a promise). However, + * the calling code should also deal with the case where a rejected promise + * is returned, and should treat that also as a model not found. + */ + get_model(model_id) { + // TODO: Perhaps we should return a Promise.reject if the model is not + // found. Right now this isn't a true async function because it doesn't + // always return a promise. + return this._models[model_id]; + } + /** + * Handle when a comm is opened. + */ + handle_comm_open(comm, msg) { + const protocolVersion = (msg.metadata || {})['version'] || ''; + if (protocolVersion.split('.', 1)[0] !== PROTOCOL_MAJOR_VERSION$1) { + const error = `Wrong widget protocol version: received protocol version '${protocolVersion}', but was expecting major version '${PROTOCOL_MAJOR_VERSION$1}'`; + console.error(error); + return Promise.reject(error); + } + const data = msg.content.data; + const buffer_paths = data.buffer_paths || []; + // Make sure the buffers are DataViews + const buffers = (msg.buffers || []).map(b => { + if (b instanceof DataView) { + return b; + } + else { + return new DataView(b instanceof ArrayBuffer ? b : b.buffer); + } + }); + put_buffers(data.state, buffer_paths, buffers); + return this.new_model({ + model_name: data.state['_model_name'], + model_module: data.state['_model_module'], + model_module_version: data.state['_model_module_version'], + comm: comm + }, data.state).catch(reject('Could not create a model.', true)); + } + /** + * Create a comm and new widget model. + * @param options - same options as new_model but comm is not + * required and additional options are available. + * @param serialized_state - serialized model attributes. + */ + new_widget(options, serialized_state = {}) { + let commPromise; + // we check to make sure the view information is provided, to help catch + // backwards incompatibility errors. + if (options.view_name === undefined || + options.view_module === undefined || + options.view_module_version === undefined) { + return Promise.reject('new_widget(...) must be given view information in the options.'); + } + // If no comm is provided, a new comm is opened for the jupyter.widget + // target. + if (options.comm) { + commPromise = Promise.resolve(options.comm); + } + else { + commPromise = this._create_comm(this.comm_target_name, options.model_id, { + state: { + _model_module: options.model_module, + _model_module_version: options.model_module_version, + _model_name: options.model_name, + _view_module: options.view_module, + _view_module_version: options.view_module_version, + _view_name: options.view_name + } + }, { version: PROTOCOL_VERSION }); + } + // The options dictionary is copied since data will be added to it. + const options_clone = Object.assign({}, options); + // Create the model. In the case where the comm promise is rejected a + // comm-less model is still created with the required model id. + return commPromise.then(comm => { + // Comm Promise Resolved. + options_clone.comm = comm; + const widget_model = this.new_model(options_clone, serialized_state); + return widget_model.then(model => { + model.sync('create', model); + return model; + }); + }, () => { + // Comm Promise Rejected. + if (!options_clone.model_id) { + options_clone.model_id = uuid(); + } + return this.new_model(options_clone, serialized_state); + }); + } + register_model(model_id, modelPromise) { + this._models[model_id] = modelPromise; + modelPromise.then(model => { + model.once('comm:close', () => { + delete this._models[model_id]; + }); + }); + } + /** + * Create and return a promise for a new widget model + * + * @param options - the options for creating the model. + * @param serialized_state - attribute values for the model. + * + * @example + * widget_manager.new_model({ + * model_name: 'IntSlider', + * model_module: '@jupyter-widgets/controls', + * model_module_version: '1.0.0', + * model_id: 'u-u-i-d' + * }).then((model) => { console.log('Create success!', model); }, + * (err) => {console.error(err)}); + * + */ + async new_model(options, serialized_state = {}) { + let model_id; + if (options.model_id) { + model_id = options.model_id; + } + else if (options.comm) { + model_id = options.model_id = options.comm.comm_id; + } + else { + throw new Error('Neither comm nor model_id provided in options object. At least one must exist.'); + } + const modelPromise = this._make_model(options, serialized_state); + // this call needs to happen before the first `await`, see note in `set_state`: + this.register_model(model_id, modelPromise); + return await modelPromise; + } + async _make_model(options, serialized_state = {}) { + const model_id = options.model_id; + const model_promise = this.loadClass(options.model_name, options.model_module, options.model_module_version); + let ModelType; + try { + ModelType = await model_promise; + } + catch (error) { + console.error('Could not instantiate widget'); + throw error; + } + if (!ModelType) { + throw new Error(`Cannot find model module ${options.model_module}@${options.model_module_version}, ${options.model_name}`); + } + const attributes = await ModelType._deserialize_state(serialized_state, this); + const modelOptions = { + widget_manager: this, + model_id: model_id, + comm: options.comm + }; + const widget_model = new ModelType(attributes, modelOptions); + widget_model.name = options.model_name; + widget_model.module = options.model_module; + return widget_model; + } + /** + * Close all widgets and empty the widget state. + * @return Promise that resolves when the widget state is cleared. + */ + clear_state() { + return resolvePromisesDict(this._models).then(models => { + Object.keys(models).forEach(id => models[id].close()); + this._models = Object.create(null); + }); + } + /** + * Asynchronously get the state of the widget manager. + * + * This includes all of the widget models, and follows the format given in + * the @jupyter-widgets/schema package. + * + * @param options - The options for what state to return. + * @returns Promise for a state dictionary + */ + get_state(options = {}) { + const modelPromises = Object.keys(this._models).map(id => this._models[id]); + return Promise.all(modelPromises).then(models => { + return serialize_state$1(models, options); + }); + } + /** + * Set the widget manager state. + * + * @param state - a Javascript object conforming to the application/vnd.jupyter.widget-state+json spec. + * + * Reconstructs all of the widget models in the state, merges that with the + * current manager state, and then attempts to redisplay the widgets in the + * state. + */ + set_state(state) { + // Check to make sure that it's the same version we are parsing. + if (!(state.version_major && state.version_major <= 2)) { + throw 'Unsupported widget state format'; + } + const models = state.state; + // Recreate all the widget models for the given widget manager state. + const all_models = this._get_comm_info().then(live_comms => { + /* Note: It is currently safe to just loop over the models in any order, + given that the following holds (does at the time of writing): + 1: any call to `new_model` with state registers the model promise (e.g. with `register_model`) + synchronously (before it's first `await` statement). + 2: any calls to a model constructor or the `set_state` method on a model, + happens asynchronously (in a `then` clause, or after an `await` statement). + + Without these assumptions, one risks trying to set model state with a reference + to another model that doesn't exist yet! + */ + return Promise.all(Object.keys(models).map(model_id => { + // First put back the binary buffers + const decode = { + base64: base64ToBuffer$1, + hex: hexToBuffer$1 + }; + const model = models[model_id]; + const modelState = model.state; + if (model.buffers) { + const bufferPaths = model.buffers.map((b) => b.path); + // put_buffers expects buffers to be DataViews + const buffers = model.buffers.map((b) => new DataView(decode[b.encoding](b.data))); + put_buffers(model.state, bufferPaths, buffers); + } + // If the model has already been created, set its state and then + // return it. + if (this._models[model_id]) { + return this._models[model_id].then(model => { + // deserialize state + return model.constructor + ._deserialize_state(modelState || {}, this) + .then(attributes => { + model.set_state(attributes); // case 2 + return model; + }); + }); + } + const modelCreate = { + model_id: model_id, + model_name: model.model_name, + model_module: model.model_module, + model_module_version: model.model_module_version + }; + if (Object.prototype.hasOwnProperty.call(live_comms, 'model_id')) { + // live comm + // This connects to an existing comm if it exists, and + // should *not* send a comm open message. + return this._create_comm(this.comm_target_name, model_id).then(comm => { + modelCreate.comm = comm; + return this.new_model(modelCreate); // No state, so safe wrt. case 1 + }); + } + else { + return this.new_model(modelCreate, modelState); // case 1 + } + })); + }); + return all_models; + } + /** + * Disconnect the widget manager from the kernel, setting each model's comm + * as dead. + */ + disconnect() { + Object.keys(this._models).forEach(i => { + this._models[i].then(model => { + model.comm_live = false; + }); + }); + } + /** + * Resolve a URL relative to the current notebook location. + * + * The default implementation just returns the original url. + */ + resolveUrl(url) { + return Promise.resolve(url); + } + /** + * Filter serialized widget state to remove any ID's already present in manager. + * + * @param {*} state Serialized state to filter + * + * @returns {*} A copy of the state, with its 'state' attribute filtered + */ + filterExistingModelState(serialized_state) { + let models = serialized_state.state; + models = Object.keys(models) + .filter(model_id => { + return !this._models[model_id]; + }) + .reduce((res, model_id) => { + res[model_id] = models[model_id]; + return res; + }, {}); + return Object.assign(Object.assign({}, serialized_state), { state: models }); + } + } + /** + * Serialize an array of widget models + * + * #### Notes + * The return value follows the format given in the + * @jupyter-widgets/schema package. + */ + function serialize_state$1(models, options = {}) { + const state = {}; + models.forEach(model => { + const model_id = model.model_id; + const split = remove_buffers(model.serialize(model.get_state(options.drop_defaults))); + const buffers = split.buffers.map((buffer, index) => { + return { + data: bufferToBase64$1(buffer), + path: split.buffer_paths[index], + encoding: 'base64' + }; + }); + state[model_id] = { + model_name: model.name, + model_module: model.module, + model_module_version: model.get('_model_module_version'), + state: split.state + }; + // To save space, only include the buffers key if we have buffers + if (buffers.length > 0) { + state[model_id].buffers = buffers; + } + }); + return { version_major: 2, version_minor: 0, state: state }; + } + + // Copyright (c) Jupyter Development Team. + + var lib$2 = /*#__PURE__*/Object.freeze({ + ManagerBase: ManagerBase$1, + serialize_state: serialize_state$1, + bufferToHex: bufferToHex$1, + hexToBuffer: hexToBuffer$1, + bufferToBase64: bufferToBase64$1, + base64ToBuffer: base64ToBuffer$1 + }); + + var author = { + name: "Project Jupyter" + }; + var bugs = { + url: "https://github.com/jupyter-widgets/ipywidgets/issues" + }; + var dependencies = { + "@jupyter-widgets/base": "^3.0.0", + "@lumino/algorithm": "^1.1.0", + "@lumino/domutils": "^1.1.0", + "@lumino/messaging": "^1.2.1", + "@lumino/signaling": "^1.2.0", + "@lumino/widgets": "^1.3.0", + "d3-format": "^1.3.0", + jquery: "^3.1.1", + "jquery-ui": "^1.12.1", + underscore: "^1.8.3" + }; + var description = "Jupyter interactive widgets"; + var devDependencies = { + "@jupyterlab/services": "^5.0.0", + "@types/d3-format": "^1.3.1", + "@types/expect.js": "^0.3.29", + "@types/mathjax": "^0.0.35", + "@types/mocha": "^5.2.7", + "@types/node": "^12.0.10", + chai: "^4.0.0", + "css-loader": "^3.4.0", + "expect.js": "^0.3.1", + "file-loader": "^5.0.2", + "istanbul-instrumenter-loader": "^3.0.1", + karma: "^4.1.0", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.2", + "karma-firefox-launcher": "^1.1.0", + "karma-ie-launcher": "^1.0.0", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", + "karma-webpack": "^4.0.2", + mocha: "^6.1.4", + "npm-run-all": "^4.1.5", + "postcss-cli": "^6.1.2", + "postcss-cssnext": "^3.1.0", + "postcss-import": "^12.0.1", + "postcss-loader": "^3.0.0", + rimraf: "^2.6.1", + sinon: "^7.3.2", + "sinon-chai": "^3.3.0", + "style-loader": "^1.1.2", + tslint: "^5.20.1", + typescript: "~3.7.4", + "url-loader": "^3.0.0", + webpack: "^4.41.5" + }; + var files = [ + "lib/**/*.d.ts", + "lib/**/*.js", + "css/*.css", + "dist/" + ]; + var gitHead = "bed7b2c0458330b1e5a427882ccfc4ea5d3b1e16"; + var homepage = "https://github.com/jupyter-widgets/ipywidgets#readme"; + var license = "BSD-3-Clause"; + var main = "lib/index.js"; + var name = "@jupyter-widgets/controls"; + var repository = { + type: "git", + url: "git+https://github.com/jupyter-widgets/ipywidgets.git" + }; + var scripts = { + build: "npm run build:src && npm run build:css", + "build:css": "postcss --use postcss-import --use postcss-cssnext -o css/widgets.built.css css/widgets.css", + "build:src": "tsc", + "build:test": "tsc --project test && webpack --config test/webpack.conf.js", + clean: "npm run clean:src", + "clean:src": "rimraf lib && rimraf tsconfig.tsbuildinfo", + lint: "tslint --project tslint.json --format stylish", + prepublish: "npm run clean && npm run build", + test: "npm run test:unit", + "test:coverage": "npm run build:test && webpack --config test/webpack-cov.conf.js && karma start test/karma-cov.conf.js", + "test:unit": "npm run test:unit:firefox && npm run test:unit:chrome", + "test:unit:chrome": "npm run test:unit:default -- --browsers=Chrome", + "test:unit:default": "npm run build:test && karma start test/karma.conf.js --log-level debug", + "test:unit:firefox": "npm run test:unit:default -- --browsers=Firefox", + "test:unit:ie": "npm run test:unit:default -- --browsers=IE" + }; + var typings = "lib/index.d.ts"; + var version = "2.0.0"; + var _package = { + author: author, + bugs: bugs, + dependencies: dependencies, + description: description, + devDependencies: devDependencies, + files: files, + gitHead: gitHead, + homepage: homepage, + license: license, + main: main, + name: name, + repository: repository, + scripts: scripts, + typings: typings, + version: version + }; + + var _package$1 = /*#__PURE__*/Object.freeze({ + author: author, + bugs: bugs, + dependencies: dependencies, + description: description, + devDependencies: devDependencies, + files: files, + gitHead: gitHead, + homepage: homepage, + license: license, + main: main, + name: name, + repository: repository, + scripts: scripts, + typings: typings, + version: version, + 'default': _package + }); + + var require$$0 = getCjsExportFromNamespace(_package$1); + + // Copyright (c) Jupyter Development Team. + /** + * Creates a wrappable Promise rejection function. + * + * Creates a function that returns a Promise.reject with a new WrappedError + * that has the provided message and wraps the original error that + * caused the promise to reject. + */ + function reject$2(message, log) { + return function promiseRejection(error) { + var wrapped_error = new WrappedError(message, error); + if (log) { + console.error(wrapped_error); + } + return Promise.reject(wrapped_error); + }; + } + /** + * Apply MathJax rendering to an element, and optionally set its text. + * + * If MathJax is not available, make no changes. + * + * Parameters + * ---------- + * element: Node + * text: optional string + */ + function typeset(element, text) { + if (text !== void 0) { + element.textContent = text; + } + if (window.MathJax !== void 0) { + MathJax.Hub.Queue(['Typeset', MathJax.Hub, element]); + } + } + /** + * escape text to HTML + */ + function escape_html(text) { + var esc = document.createElement('div'); + esc.textContent = text; + return esc.innerHTML; + } + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + /** + * The version of the Jupyter controls widget attribute spec that this package + * implements. + */ + var JUPYTER_CONTROLS_VERSION = '1.5.0'; + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$9 = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$5 = (undefined && undefined.__assign) || function () { + __assign$5 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$5.apply(this, arguments); + }; + var DescriptionStyleModel = /** @class */ (function (_super) { + __extends$9(DescriptionStyleModel, _super); + function DescriptionStyleModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + DescriptionStyleModel.prototype.defaults = function () { + return __assign$5(__assign$5({}, _super.prototype.defaults.call(this)), { _model_name: 'DescriptionStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION }); + }; + DescriptionStyleModel.styleProperties = { + description_width: { + selector: '.widget-label', + attribute: 'width', + default: null + }, + }; + return DescriptionStyleModel; + }(StyleModel)); + var DescriptionModel = /** @class */ (function (_super) { + __extends$9(DescriptionModel, _super); + function DescriptionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + DescriptionModel.prototype.defaults = function () { + return __assign$5(__assign$5({}, _super.prototype.defaults.call(this)), { _model_name: 'DescriptionModel', _view_name: 'DescriptionView', _view_module: '@jupyter-widgets/controls', _model_module: '@jupyter-widgets/controls', _view_module_version: JUPYTER_CONTROLS_VERSION, _model_module_version: JUPYTER_CONTROLS_VERSION, description: '', description_tooltip: null }); + }; + return DescriptionModel; + }(DOMWidgetModel)); + var DescriptionView = /** @class */ (function (_super) { + __extends$9(DescriptionView, _super); + function DescriptionView() { + return _super !== null && _super.apply(this, arguments) || this; + } + DescriptionView.prototype.render = function () { + this.label = document.createElement('label'); + this.el.appendChild(this.label); + this.label.className = 'widget-label'; + this.label.style.display = 'none'; + this.listenTo(this.model, 'change:description', this.updateDescription); + this.listenTo(this.model, 'change:description_tooltip', this.updateDescription); + this.updateDescription(); + }; + DescriptionView.prototype.typeset = function (element, text) { + this.displayed.then(function () { return typeset(element, text); }); + }; + DescriptionView.prototype.updateDescription = function () { + var description = this.model.get('description'); + var description_tooltip = this.model.get('description_tooltip'); + if (description_tooltip === null) { + description_tooltip = description; + } + if (description.length === 0) { + this.label.style.display = 'none'; + } + else { + this.label.innerHTML = description; + this.typeset(this.label); + this.label.style.display = ''; + } + this.label.title = description_tooltip; + }; + return DescriptionView; + }(DOMWidgetView)); + /** + * For backwards compatibility with jupyter-js-widgets 2.x. + * + * Use DescriptionModel instead. + */ + var LabeledDOMWidgetModel = /** @class */ (function (_super) { + __extends$9(LabeledDOMWidgetModel, _super); + function LabeledDOMWidgetModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return LabeledDOMWidgetModel; + }(DescriptionModel)); + /** + * For backwards compatibility with jupyter-js-widgets 2.x. + * + * Use DescriptionView instead. + */ + var LabeledDOMWidgetView = /** @class */ (function (_super) { + __extends$9(LabeledDOMWidgetView, _super); + function LabeledDOMWidgetView() { + return _super !== null && _super.apply(this, arguments) || this; + } + return LabeledDOMWidgetView; + }(DescriptionView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$a = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var CoreWidgetModel = /** @class */ (function (_super) { + __extends$a(CoreWidgetModel, _super); + function CoreWidgetModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + CoreWidgetModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'CoreWidgetModel', + _view_module: '@jupyter-widgets/controls', + _model_module: '@jupyter-widgets/controls', + _view_module_version: JUPYTER_CONTROLS_VERSION, + _model_module_version: JUPYTER_CONTROLS_VERSION, + }); + }; + return CoreWidgetModel; + }(WidgetModel)); + var CoreDOMWidgetModel = /** @class */ (function (_super) { + __extends$a(CoreDOMWidgetModel, _super); + function CoreDOMWidgetModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + CoreDOMWidgetModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'CoreDOMWidgetModel', + _view_module: '@jupyter-widgets/controls', + _model_module: '@jupyter-widgets/controls', + _view_module_version: JUPYTER_CONTROLS_VERSION, + _model_module_version: JUPYTER_CONTROLS_VERSION, + }); + }; + return CoreDOMWidgetModel; + }(DOMWidgetModel)); + var CoreDescriptionModel = /** @class */ (function (_super) { + __extends$a(CoreDescriptionModel, _super); + function CoreDescriptionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + CoreDescriptionModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'CoreDescriptionModel', + _view_module: '@jupyter-widgets/controls', + _model_module: '@jupyter-widgets/controls', + _view_module_version: JUPYTER_CONTROLS_VERSION, + _model_module_version: JUPYTER_CONTROLS_VERSION, + }); + }; + return CoreDescriptionModel; + }(DescriptionModel)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$b = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$6 = (undefined && undefined.__assign) || function () { + __assign$6 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$6.apply(this, arguments); + }; + var DirectionalLinkModel = /** @class */ (function (_super) { + __extends$b(DirectionalLinkModel, _super); + function DirectionalLinkModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + DirectionalLinkModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + target: undefined, + source: undefined, + _model_name: 'DirectionalLinkModel' + }); + }; + DirectionalLinkModel.prototype.initialize = function (attributes, options) { + _super.prototype.initialize.call(this, attributes, options); + this.on('change', this.updateBindings, this); + this.updateBindings(); + }; + DirectionalLinkModel.prototype.updateValue = function (sourceModel, sourceAttr, targetModel, targetAttr) { + if (this._updating) { + return; + } + this._updating = true; + try { + if (targetModel) { + targetModel.set(targetAttr, sourceModel.get(sourceAttr)); + targetModel.save_changes(); + } + } + finally { + this._updating = false; + } + }; + DirectionalLinkModel.prototype.updateBindings = function () { + var _a, _b; + var _this = this; + this.cleanup(); + _a = this.get('source') || [null, null], this.sourceModel = _a[0], this.sourceAttr = _a[1]; + _b = this.get('target') || [null, null], this.targetModel = _b[0], this.targetAttr = _b[1]; + if (this.sourceModel) { + this.listenTo(this.sourceModel, 'change:' + this.sourceAttr, function () { + _this.updateValue(_this.sourceModel, _this.sourceAttr, _this.targetModel, _this.targetAttr); + }); + this.updateValue(this.sourceModel, this.sourceAttr, this.targetModel, this.targetAttr); + this.listenToOnce(this.sourceModel, 'destroy', this.cleanup); + } + if (this.targetModel) { + this.listenToOnce(this.targetModel, 'destroy', this.cleanup); + } + }; + DirectionalLinkModel.prototype.cleanup = function () { + // Stop listening to 'change' and 'destroy' events of the source and target + if (this.sourceModel) { + this.stopListening(this.sourceModel, 'change:' + this.sourceAttr, null); + this.stopListening(this.sourceModel, 'destroy', null); + } + if (this.targetModel) { + this.stopListening(this.targetModel, 'destroy', null); + } + }; + DirectionalLinkModel.serializers = __assign$6(__assign$6({}, CoreWidgetModel.serializers), { target: { deserialize: unpack_models }, source: { deserialize: unpack_models } }); + return DirectionalLinkModel; + }(CoreWidgetModel)); + var LinkModel = /** @class */ (function (_super) { + __extends$b(LinkModel, _super); + function LinkModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + LinkModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'LinkModel' + }); + }; + LinkModel.prototype.updateBindings = function () { + var _this = this; + _super.prototype.updateBindings.call(this); + if (this.targetModel) { + this.listenTo(this.targetModel, 'change:' + this.targetAttr, function () { + _this.updateValue(_this.targetModel, _this.targetAttr, _this.sourceModel, _this.sourceAttr); + }); + } + }; + LinkModel.prototype.cleanup = function () { + _super.prototype.cleanup.call(this); + if (this.targetModel) { + this.stopListening(this.targetModel, 'change:' + this.targetAttr, null); + } + }; + return LinkModel; + }(DirectionalLinkModel)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$c = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var BoolModel = /** @class */ (function (_super) { + __extends$c(BoolModel, _super); + function BoolModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + BoolModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + value: false, + disabled: false, + _model_name: 'BoolModel' + }); + }; + return BoolModel; + }(CoreDescriptionModel)); + var CheckboxModel = /** @class */ (function (_super) { + __extends$c(CheckboxModel, _super); + function CheckboxModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + CheckboxModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + indent: true, + _view_name: 'CheckboxView', + _model_name: 'CheckboxModel' + }); + }; + return CheckboxModel; + }(CoreDescriptionModel)); + var CheckboxView = /** @class */ (function (_super) { + __extends$c(CheckboxView, _super); + function CheckboxView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + CheckboxView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-checkbox'); + // adding a zero-width space to the label to help + // the browser set the baseline correctly + this.label.innerHTML = '​'; + // label containing the checkbox and description span + this.checkboxLabel = document.createElement('label'); + this.checkboxLabel.classList.add('widget-label-basic'); + this.el.appendChild(this.checkboxLabel); + // checkbox + this.checkbox = document.createElement('input'); + this.checkbox.setAttribute('type', 'checkbox'); + this.checkboxLabel.appendChild(this.checkbox); + // span to the right of the checkbox that will render the description + this.descriptionSpan = document.createElement('span'); + this.checkboxLabel.appendChild(this.descriptionSpan); + this.listenTo(this.model, 'change:indent', this.updateIndent); + this.update(); // Set defaults. + this.updateDescription(); + this.updateIndent(); + }; + /** + * Overriden from super class + * + * Update the description span (rather than the label) since + * we want the description to the right of the checkbox. + */ + CheckboxView.prototype.updateDescription = function () { + // can be called before the view is fully initialized + if (this.checkboxLabel == null) { + return; + } + var description = this.model.get('description'); + this.descriptionSpan.innerHTML = description; + this.typeset(this.descriptionSpan); + this.descriptionSpan.title = description; + this.checkbox.title = description; + }; + /** + * Update the visibility of the label in the super class + * to provide the optional indent. + */ + CheckboxView.prototype.updateIndent = function () { + var indent = this.model.get('indent'); + this.label.style.display = indent ? '' : 'none'; + }; + CheckboxView.prototype.events = function () { + return { + 'click input[type="checkbox"]': '_handle_click' + }; + }; + /** + * Handles when the checkbox is clicked. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + CheckboxView.prototype._handle_click = function () { + var value = this.model.get('value'); + this.model.set('value', !value, { updated_view: this }); + this.touch(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + CheckboxView.prototype.update = function (options) { + this.checkbox.checked = this.model.get('value'); + if (options === undefined || options.updated_view != this) { + this.checkbox.disabled = this.model.get('disabled'); + } + return _super.prototype.update.call(this); + }; + return CheckboxView; + }(DescriptionView)); + var ToggleButtonModel = /** @class */ (function (_super) { + __extends$c(ToggleButtonModel, _super); + function ToggleButtonModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ToggleButtonModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'ToggleButtonView', + _model_name: 'ToggleButtonModel', + tooltip: '', + icon: '', + button_style: '' + }); + }; + return ToggleButtonModel; + }(BoolModel)); + var ToggleButtonView = /** @class */ (function (_super) { + __extends$c(ToggleButtonView, _super); + function ToggleButtonView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + ToggleButtonView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('jupyter-button'); + this.el.classList.add('widget-toggle-button'); + this.listenTo(this.model, 'change:button_style', this.update_button_style); + this.set_button_style(); + this.update(); // Set defaults. + }; + ToggleButtonView.prototype.update_button_style = function () { + this.update_mapped_classes(ToggleButtonView.class_map, 'button_style'); + }; + ToggleButtonView.prototype.set_button_style = function () { + this.set_mapped_classes(ToggleButtonView.class_map, 'button_style'); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + ToggleButtonView.prototype.update = function (options) { + if (this.model.get('value')) { + this.el.classList.add('mod-active'); + } + else { + this.el.classList.remove('mod-active'); + } + if (options === undefined || options.updated_view !== this) { + this.el.disabled = this.model.get('disabled'); + this.el.setAttribute('title', this.model.get('tooltip')); + var description = this.model.get('description'); + var icon = this.model.get('icon'); + if (description.trim().length === 0 && icon.trim().length === 0) { + this.el.innerHTML = ' '; // Preserve button height + } + else { + this.el.textContent = ''; + if (icon.trim().length) { + var i = document.createElement('i'); + this.el.appendChild(i); + i.classList.add('fa'); + i.classList.add('fa-' + icon); + } + this.el.appendChild(document.createTextNode(description)); + } + } + return _super.prototype.update.call(this); + }; + ToggleButtonView.prototype.events = function () { + return { + // Dictionary of events and their handlers. + 'click': '_handle_click' + }; + }; + /** + * Handles and validates user input. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + ToggleButtonView.prototype._handle_click = function (event) { + event.preventDefault(); + var value = this.model.get('value'); + this.model.set('value', !value, { updated_view: this }); + this.touch(); + }; + Object.defineProperty(ToggleButtonView.prototype, "tagName", { + /** + * The default tag name. + * + * #### Notes + * This is a read-only attribute. + */ + get: function () { + // We can't make this an attribute with a default value + // since it would be set after it is needed in the + // constructor. + return 'button'; + }, + enumerable: true, + configurable: true + }); + ToggleButtonView.class_map = { + primary: ['mod-primary'], + success: ['mod-success'], + info: ['mod-info'], + warning: ['mod-warning'], + danger: ['mod-danger'] + }; + return ToggleButtonView; + }(DOMWidgetView)); + var ValidModel = /** @class */ (function (_super) { + __extends$c(ValidModel, _super); + function ValidModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ValidModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + readout: 'Invalid', + _view_name: 'ValidView', + _model_name: 'ValidModel' + }); + }; + return ValidModel; + }(BoolModel)); + var ValidView = /** @class */ (function (_super) { + __extends$c(ValidView, _super); + function ValidView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + ValidView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-valid'); + this.el.classList.add('widget-inline-hbox'); + this.icon = document.createElement('i'); + this.icon.classList.add('fa', 'fa-fw'); + this.el.appendChild(this.icon); + this.readout = document.createElement('span'); + this.readout.classList.add('widget-valid-readout'); + this.readout.classList.add('widget-readout'); + this.el.appendChild(this.readout); + this.update(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + ValidView.prototype.update = function () { + this.el.classList.remove('mod-valid'); + this.el.classList.remove('mod-invalid'); + this.icon.classList.remove('fa-check'); + this.icon.classList.remove('fa-times'); + this.readout.textContent = this.model.get('readout'); + if (this.model.get('value')) { + this.el.classList.add('mod-valid'); + this.icon.classList.add('fa-check'); + } + else { + this.el.classList.add('mod-invalid'); + this.icon.classList.add('fa-times'); + } + }; + return ValidView; + }(DescriptionView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$d = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var ButtonStyleModel = /** @class */ (function (_super) { + __extends$d(ButtonStyleModel, _super); + function ButtonStyleModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ButtonStyleModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'ButtonStyleModel', + _model_module: '@jupyter-widgets/controls', + _model_module_version: JUPYTER_CONTROLS_VERSION, + }); + }; + ButtonStyleModel.styleProperties = { + button_color: { + selector: '', + attribute: 'background-color', + default: null + }, + font_weight: { + selector: '', + attribute: 'font-weight', + default: '' + } + }; + return ButtonStyleModel; + }(StyleModel)); + var ButtonModel = /** @class */ (function (_super) { + __extends$d(ButtonModel, _super); + function ButtonModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ButtonModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + description: '', + tooltip: '', + disabled: false, + icon: '', + button_style: '', + _view_name: 'ButtonView', + _model_name: 'ButtonModel', + style: null + }); + }; + return ButtonModel; + }(CoreDOMWidgetModel)); + var ButtonView = /** @class */ (function (_super) { + __extends$d(ButtonView, _super); + function ButtonView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + ButtonView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('jupyter-button'); + this.el.classList.add('widget-button'); + this.listenTo(this.model, 'change:button_style', this.update_button_style); + this.set_button_style(); + this.update(); // Set defaults. + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + ButtonView.prototype.update = function () { + this.el.disabled = this.model.get('disabled'); + this.el.setAttribute('title', this.model.get('tooltip')); + var description = this.model.get('description'); + var icon = this.model.get('icon'); + if (description.length || icon.length) { + this.el.textContent = ''; + if (icon.length) { + var i = document.createElement('i'); + i.classList.add('fa'); + i.classList.add('fa-' + icon); + if (description.length === 0) { + i.classList.add('center'); + } + this.el.appendChild(i); + } + this.el.appendChild(document.createTextNode(description)); + } + return _super.prototype.update.call(this); + }; + ButtonView.prototype.update_button_style = function () { + this.update_mapped_classes(ButtonView.class_map, 'button_style'); + }; + ButtonView.prototype.set_button_style = function () { + this.set_mapped_classes(ButtonView.class_map, 'button_style'); + }; + /** + * Dictionary of events and handlers + */ + ButtonView.prototype.events = function () { + // TODO: return typing not needed in Typescript later than 1.8.x + // See http://stackoverflow.com/questions/22077023/why-cant-i-indirectly-return-an-object-literal-to-satisfy-an-index-signature-re and https://github.com/Microsoft/TypeScript/pull/7029 + return { 'click': '_handle_click' }; + }; + /** + * Handles when the button is clicked. + */ + ButtonView.prototype._handle_click = function (event) { + event.preventDefault(); + this.send({ event: 'click' }); + }; + Object.defineProperty(ButtonView.prototype, "tagName", { + /** + * The default tag name. + * + * #### Notes + * This is a read-only attribute. + */ + get: function () { + // We can't make this an attribute with a default value + // since it would be set after it is needed in the + // constructor. + return 'button'; + }, + enumerable: true, + configurable: true + }); + ButtonView.class_map = { + primary: ['mod-primary'], + success: ['mod-success'], + info: ['mod-info'], + warning: ['mod-warning'], + danger: ['mod-danger'] + }; + return ButtonView; + }(DOMWidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$e = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$7 = (undefined && undefined.__assign) || function () { + __assign$7 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$7.apply(this, arguments); + }; + var BoxModel = /** @class */ (function (_super) { + __extends$e(BoxModel, _super); + function BoxModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + BoxModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'BoxView', + _model_name: 'BoxModel', + children: [], + box_style: '' + }); + }; + BoxModel.serializers = __assign$7(__assign$7({}, CoreDOMWidgetModel.serializers), { children: { deserialize: unpack_models } }); + return BoxModel; + }(CoreDOMWidgetModel)); + var HBoxModel = /** @class */ (function (_super) { + __extends$e(HBoxModel, _super); + function HBoxModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + HBoxModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'HBoxView', + _model_name: 'HBoxModel', + }); + }; + return HBoxModel; + }(BoxModel)); + var VBoxModel = /** @class */ (function (_super) { + __extends$e(VBoxModel, _super); + function VBoxModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + VBoxModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'VBoxView', + _model_name: 'VBoxModel', + }); + }; + return VBoxModel; + }(BoxModel)); + var BoxView = /** @class */ (function (_super) { + __extends$e(BoxView, _super); + function BoxView() { + return _super !== null && _super.apply(this, arguments) || this; + } + BoxView.prototype._createElement = function (tagName) { + this.pWidget = new JupyterPhosphorPanelWidget({ view: this }); + return this.pWidget.node; + }; + BoxView.prototype._setElement = function (el) { + if (this.el || el !== this.pWidget.node) { + // Boxes don't allow setting the element beyond the initial creation. + throw new Error('Cannot reset the DOM element.'); + } + this.el = this.pWidget.node; + this.$el = $$1(this.pWidget.node); + }; + BoxView.prototype.initialize = function (parameters) { + _super.prototype.initialize.call(this, parameters); + this.children_views = new ViewList(this.add_child_model, null, this); + this.listenTo(this.model, 'change:children', this.update_children); + this.listenTo(this.model, 'change:box_style', this.update_box_style); + this.pWidget.addClass('jupyter-widgets'); + this.pWidget.addClass('widget-container'); + this.pWidget.addClass('widget-box'); + }; + BoxView.prototype.render = function () { + _super.prototype.render.call(this); + this.update_children(); + this.set_box_style(); + }; + BoxView.prototype.update_children = function () { + this.children_views.update(this.model.get('children')).then(function (views) { + // Notify all children that their sizes may have changed. + views.forEach(function (view) { + MessageLoop.postMessage(view.pWidget, Widget.ResizeMessage.UnknownSize); + }); + }); + }; + BoxView.prototype.update_box_style = function () { + this.update_mapped_classes(BoxView.class_map, 'box_style'); + }; + BoxView.prototype.set_box_style = function () { + this.set_mapped_classes(BoxView.class_map, 'box_style'); + }; + BoxView.prototype.add_child_model = function (model) { + var _this = this; + // we insert a dummy element so the order is preserved when we add + // the rendered content later. + var dummy = new Widget(); + this.pWidget.addWidget(dummy); + return this.create_child_view(model).then(function (view) { + // replace the dummy widget with the new one. + var i = ArrayExt.firstIndexOf(_this.pWidget.widgets, dummy); + _this.pWidget.insertWidget(i, view.pWidget); + dummy.dispose(); + return view; + }).catch(reject$2('Could not add child view to box', true)); + }; + BoxView.prototype.remove = function () { + this.children_views = null; + _super.prototype.remove.call(this); + }; + BoxView.class_map = { + success: ['alert', 'alert-success'], + info: ['alert', 'alert-info'], + warning: ['alert', 'alert-warning'], + danger: ['alert', 'alert-danger'] + }; + return BoxView; + }(DOMWidgetView)); + var HBoxView = /** @class */ (function (_super) { + __extends$e(HBoxView, _super); + function HBoxView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor + */ + HBoxView.prototype.initialize = function (parameters) { + _super.prototype.initialize.call(this, parameters); + this.pWidget.addClass('widget-hbox'); + }; + return HBoxView; + }(BoxView)); + var VBoxView = /** @class */ (function (_super) { + __extends$e(VBoxView, _super); + function VBoxView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor + */ + VBoxView.prototype.initialize = function (parameters) { + _super.prototype.initialize.call(this, parameters); + this.pWidget.addClass('widget-vbox'); + }; + return VBoxView; + }(BoxView)); + var GridBoxView = /** @class */ (function (_super) { + __extends$e(GridBoxView, _super); + function GridBoxView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor + */ + GridBoxView.prototype.initialize = function (parameters) { + _super.prototype.initialize.call(this, parameters); + this.pWidget.addClass('widget-gridbox'); + // display needn't be set to flex and grid + this.pWidget.removeClass('widget-box'); + }; + return GridBoxView; + }(BoxView)); + var GridBoxModel = /** @class */ (function (_super) { + __extends$e(GridBoxModel, _super); + function GridBoxModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + GridBoxModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'GridBoxView', + _model_name: 'GridBoxModel', + }); + }; + return GridBoxModel; + }(BoxModel)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$f = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$8 = (undefined && undefined.__assign) || function () { + __assign$8 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$8.apply(this, arguments); + }; + var ImageModel = /** @class */ (function (_super) { + __extends$f(ImageModel, _super); + function ImageModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ImageModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'ImageModel', + _view_name: 'ImageView', + format: 'png', + width: '', + height: '', + value: new DataView(new ArrayBuffer(0)) + }); + }; + ImageModel.serializers = __assign$8(__assign$8({}, CoreDOMWidgetModel.serializers), { value: { serialize: function (value) { + return new DataView(value.buffer.slice(0)); + } } }); + return ImageModel; + }(CoreDOMWidgetModel)); + var ImageView = /** @class */ (function (_super) { + __extends$f(ImageView, _super); + function ImageView() { + return _super !== null && _super.apply(this, arguments) || this; + } + ImageView.prototype.render = function () { + /** + * Called when view is rendered. + */ + _super.prototype.render.call(this); + this.pWidget.addClass('jupyter-widgets'); + this.pWidget.addClass('widget-image'); + this.update(); // Set defaults. + }; + ImageView.prototype.update = function () { + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + var url; + var format = this.model.get('format'); + var value = this.model.get('value'); + if (format !== 'url') { + var blob = new Blob([value], { type: "image/" + this.model.get('format') }); + url = URL.createObjectURL(blob); + } + else { + url = (new TextDecoder('utf-8')).decode(value.buffer); + } + // Clean up the old objectURL + var oldurl = this.el.src; + this.el.src = url; + if (oldurl && typeof oldurl !== 'string') { + URL.revokeObjectURL(oldurl); + } + var width = this.model.get('width'); + if (width !== undefined && width.length > 0) { + this.el.setAttribute('width', width); + } + else { + this.el.removeAttribute('width'); + } + var height = this.model.get('height'); + if (height !== undefined && height.length > 0) { + this.el.setAttribute('height', height); + } + else { + this.el.removeAttribute('height'); + } + return _super.prototype.update.call(this); + }; + ImageView.prototype.remove = function () { + if (this.el.src) { + URL.revokeObjectURL(this.el.src); + } + _super.prototype.remove.call(this); + }; + Object.defineProperty(ImageView.prototype, "tagName", { + /** + * The default tag name. + * + * #### Notes + * This is a read-only attribute. + */ + get: function () { + // We can't make this an attribute with a default value + // since it would be set after it is needed in the + // constructor. + return 'img'; + }, + enumerable: true, + configurable: true + }); + return ImageView; + }(DOMWidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$g = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$9 = (undefined && undefined.__assign) || function () { + __assign$9 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$9.apply(this, arguments); + }; + var VideoModel = /** @class */ (function (_super) { + __extends$g(VideoModel, _super); + function VideoModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + VideoModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'VideoModel', + _view_name: 'VideoView', + format: 'mp4', + width: '', + height: '', + autoplay: true, + loop: true, + controls: true, + value: new DataView(new ArrayBuffer(0)) + }); + }; + VideoModel.serializers = __assign$9(__assign$9({}, CoreDOMWidgetModel.serializers), { value: { serialize: function (value) { + return new DataView(value.buffer.slice(0)); + } } }); + return VideoModel; + }(CoreDOMWidgetModel)); + var VideoView = /** @class */ (function (_super) { + __extends$g(VideoView, _super); + function VideoView() { + return _super !== null && _super.apply(this, arguments) || this; + } + VideoView.prototype.render = function () { + /** + * Called when view is rendered. + */ + _super.prototype.render.call(this); + this.pWidget.addClass('jupyter-widgets'); + this.pWidget.addClass('widget-image'); + this.update(); // Set defaults. + }; + VideoView.prototype.update = function () { + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + var url; + var format = this.model.get('format'); + var value = this.model.get('value'); + if (format !== 'url') { + var blob = new Blob([value], { type: "video/" + this.model.get('format') }); + url = URL.createObjectURL(blob); + } + else { + url = (new TextDecoder('utf-8')).decode(value.buffer); + } + // Clean up the old objectURL + var oldurl = this.el.src; + this.el.src = url; + if (oldurl && typeof oldurl !== 'string') { + URL.revokeObjectURL(oldurl); + } + // Height and width + var width = this.model.get('width'); + if (width !== undefined && width.length > 0) { + this.el.setAttribute('width', width); + } + else { + this.el.removeAttribute('width'); + } + var height = this.model.get('height'); + if (height !== undefined && height.length > 0) { + this.el.setAttribute('height', height); + } + else { + this.el.removeAttribute('height'); + } + // Video attributes + this.el.loop = this.model.get('loop'); + this.el.autoplay = this.model.get('autoplay'); + this.el.controls = this.model.get('controls'); + return _super.prototype.update.call(this); + }; + VideoView.prototype.remove = function () { + if (this.el.src) { + URL.revokeObjectURL(this.el.src); + } + _super.prototype.remove.call(this); + }; + Object.defineProperty(VideoView.prototype, "tagName", { + /** + * The default tag name. + * + * #### Notes + * This is a read-only attribute. + */ + get: function () { + // We can't make this an attribute with a default value + // since it would be set after it is needed in the + // constructor. + return 'video'; + }, + enumerable: true, + configurable: true + }); + return VideoView; + }(DOMWidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$h = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$a = (undefined && undefined.__assign) || function () { + __assign$a = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$a.apply(this, arguments); + }; + var AudioModel = /** @class */ (function (_super) { + __extends$h(AudioModel, _super); + function AudioModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + AudioModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'AudioModel', + _view_name: 'AudioView', + format: 'mp3', + autoplay: true, + loop: true, + controls: true, + value: new DataView(new ArrayBuffer(0)) + }); + }; + AudioModel.serializers = __assign$a(__assign$a({}, CoreDOMWidgetModel.serializers), { value: { serialize: function (value) { + return new DataView(value.buffer.slice(0)); + } } }); + return AudioModel; + }(CoreDOMWidgetModel)); + var AudioView = /** @class */ (function (_super) { + __extends$h(AudioView, _super); + function AudioView() { + return _super !== null && _super.apply(this, arguments) || this; + } + AudioView.prototype.render = function () { + /** + * Called when view is rendered. + */ + _super.prototype.render.call(this); + this.pWidget.addClass('jupyter-widgets'); + this.update(); // Set defaults. + }; + AudioView.prototype.update = function () { + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + var url; + var format = this.model.get('format'); + var value = this.model.get('value'); + if (format !== 'url') { + var blob = new Blob([value], { type: "audio/" + this.model.get('format') }); + url = URL.createObjectURL(blob); + } + else { + url = (new TextDecoder('utf-8')).decode(value.buffer); + } + // Clean up the old objectURL + var oldurl = this.el.src; + this.el.src = url; + if (oldurl && typeof oldurl !== 'string') { + URL.revokeObjectURL(oldurl); + } + // Audio attributes + this.el.loop = this.model.get('loop'); + this.el.autoplay = this.model.get('autoplay'); + this.el.controls = this.model.get('controls'); + return _super.prototype.update.call(this); + }; + AudioView.prototype.remove = function () { + if (this.el.src) { + URL.revokeObjectURL(this.el.src); + } + _super.prototype.remove.call(this); + }; + Object.defineProperty(AudioView.prototype, "tagName", { + /** + * The default tag name. + * + * #### Notes + * This is a read-only attribute. + */ + get: function () { + // We can't make this an attribute with a default value + // since it would be set after it is needed in the + // constructor. + return 'audio'; + }, + enumerable: true, + configurable: true + }); + return AudioView; + }(DOMWidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$i = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var ColorPickerModel = /** @class */ (function (_super) { + __extends$i(ColorPickerModel, _super); + function ColorPickerModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ColorPickerModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + value: 'black', + concise: false, + _model_name: 'ColorPickerModel', + _view_name: 'ColorPickerView' + }); + }; + return ColorPickerModel; + }(CoreDescriptionModel)); + var ColorPickerView = /** @class */ (function (_super) { + __extends$i(ColorPickerView, _super); + function ColorPickerView() { + return _super !== null && _super.apply(this, arguments) || this; + } + ColorPickerView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-colorpicker'); + this._color_container = document.createElement('div'); + this._color_container.className = 'widget-inline-hbox widget-colorpicker-input'; + this.el.appendChild(this._color_container); + this._textbox = document.createElement('input'); + this._textbox.setAttribute('type', 'text'); + this._textbox.id = this.label.htmlFor = uuid(); + this._color_container.appendChild(this._textbox); + this._textbox.value = this.model.get('value'); + this._colorpicker = document.createElement('input'); + this._colorpicker.setAttribute('type', 'color'); + this._color_container.appendChild(this._colorpicker); + this.listenTo(this.model, 'change:value', this._update_value); + this.listenTo(this.model, 'change:concise', this._update_concise); + this._update_concise(); + this._update_value(); + this.update(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + ColorPickerView.prototype.update = function (options) { + if (options === undefined || options.updated_view != this) { + var disabled = this.model.get('disabled'); + this._textbox.disabled = disabled; + this._colorpicker.disabled = disabled; + } + return _super.prototype.update.call(this); + }; + ColorPickerView.prototype.events = function () { + // Typescript doesn't understand that these functions are called, so we + // specifically use them here so it knows they are being used. + void this._picker_change; + void this._text_change; + return { + 'change [type="color"]': '_picker_change', + 'change [type="text"]': '_text_change' + }; + }; + ColorPickerView.prototype._update_value = function () { + var value = this.model.get('value'); + this._colorpicker.value = color2hex(value); + this._textbox.value = value; + }; + ColorPickerView.prototype._update_concise = function () { + var concise = this.model.get('concise'); + if (concise) { + this.el.classList.add('concise'); + this._textbox.style.display = 'none'; + } + else { + this.el.classList.remove('concise'); + this._textbox.style.display = ''; + } + }; + ColorPickerView.prototype._picker_change = function () { + this.model.set('value', this._colorpicker.value); + this.touch(); + }; + ColorPickerView.prototype._text_change = function () { + var value = this._validate_color(this._textbox.value, this.model.get('value')); + this.model.set('value', value); + this.touch(); + }; + ColorPickerView.prototype._validate_color = function (color, fallback) { + return color.match(/#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?$/) || + named_colors[color.toLowerCase()] ? color : fallback; + }; + return ColorPickerView; + }(DescriptionView)); + var named_colors = { aliceblue: '#f0f8ff', antiquewhite: '#faebd7', aqua: '#00ffff', aquamarine: '#7fffd4', azure: '#f0ffff', beige: '#f5f5dc', bisque: '#ffe4c4', black: '#000000', blanchedalmond: '#ffebcd', blue: '#0000ff', blueviolet: '#8a2be2', brown: '#a52a2a', burlywood: '#deb887', cadetblue: '#5f9ea0', chartreuse: '#7fff00', chocolate: '#d2691e', coral: '#ff7f50', cornflowerblue: '#6495ed', cornsilk: '#fff8dc', crimson: '#dc143c', cyan: '#00ffff', darkblue: '#00008b', darkcyan: '#008b8b', darkgoldenrod: '#b8860b', darkgray: '#a9a9a9', darkgrey: '#a9a9a9', darkgreen: '#006400', darkkhaki: '#bdb76b', darkmagenta: '#8b008b', darkolivegreen: '#556b2f', darkorange: '#ff8c00', darkorchid: '#9932cc', darkred: '#8b0000', darksalmon: '#e9967a', darkseagreen: '#8fbc8f', darkslateblue: '#483d8b', darkslategray: '#2f4f4f', darkslategrey: '#2f4f4f', darkturquoise: '#00ced1', darkviolet: '#9400d3', deeppink: '#ff1493', deepskyblue: '#00bfff', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1e90ff', firebrick: '#b22222', floralwhite: '#fffaf0', forestgreen: '#228b22', fuchsia: '#ff00ff', gainsboro: '#dcdcdc', ghostwhite: '#f8f8ff', gold: '#ffd700', goldenrod: '#daa520', gray: '#808080', grey: '#808080', green: '#008000', greenyellow: '#adff2f', honeydew: '#f0fff0', hotpink: '#ff69b4', indianred: '#cd5c5c', indigo: '#4b0082', ivory: '#fffff0', khaki: '#f0e68c', lavender: '#e6e6fa', lavenderblush: '#fff0f5', lawngreen: '#7cfc00', lemonchiffon: '#fffacd', lightblue: '#add8e6', lightcoral: '#f08080', lightcyan: '#e0ffff', lightgoldenrodyellow: '#fafad2', lightgreen: '#90ee90', lightgray: '#d3d3d3', lightgrey: '#d3d3d3', lightpink: '#ffb6c1', lightsalmon: '#ffa07a', lightseagreen: '#20b2aa', lightskyblue: '#87cefa', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#b0c4de', lightyellow: '#ffffe0', lime: '#00ff00', limegreen: '#32cd32', linen: '#faf0e6', magenta: '#ff00ff', maroon: '#800000', mediumaquamarine: '#66cdaa', mediumblue: '#0000cd', mediumorchid: '#ba55d3', mediumpurple: '#9370db', mediumseagreen: '#3cb371', mediumslateblue: '#7b68ee', mediumspringgreen: '#00fa9a', mediumturquoise: '#48d1cc', mediumvioletred: '#c71585', midnightblue: '#191970', mintcream: '#f5fffa', mistyrose: '#ffe4e1', moccasin: '#ffe4b5', navajowhite: '#ffdead', navy: '#000080', oldlace: '#fdf5e6', olive: '#808000', olivedrab: '#6b8e23', orange: '#ffa500', orangered: '#ff4500', orchid: '#da70d6', palegoldenrod: '#eee8aa', palegreen: '#98fb98', paleturquoise: '#afeeee', palevioletred: '#db7093', papayawhip: '#ffefd5', peachpuff: '#ffdab9', peru: '#cd853f', pink: '#ffc0cb', plum: '#dda0dd', powderblue: '#b0e0e6', purple: '#800080', red: '#ff0000', rosybrown: '#bc8f8f', royalblue: '#4169e1', saddlebrown: '#8b4513', salmon: '#fa8072', sandybrown: '#f4a460', seagreen: '#2e8b57', seashell: '#fff5ee', sienna: '#a0522d', silver: '#c0c0c0', skyblue: '#87ceeb', slateblue: '#6a5acd', slategray: '#708090', slategrey: '#708090', snow: '#fffafa', springgreen: '#00ff7f', steelblue: '#4682b4', tan: '#d2b48c', teal: '#008080', thistle: '#d8bfd8', tomato: '#ff6347', turquoise: '#40e0d0', violet: '#ee82ee', wheat: '#f5deb3', white: '#ffffff', whitesmoke: '#f5f5f5', yellow: '#ffff00', yellowgreen: '#9acd32', }; + /* + * From a valid html color (named color, 6-digits or 3-digits hex format) + * return a 6-digits hexadecimal color #rrggbb. + */ + function color2hex(color) { + return named_colors[color.toLowerCase()] || rgb3_to_rgb6(color); + } + function rgb3_to_rgb6(rgb) { + if (rgb.length === 7) { + return rgb; + } + else { + return '#' + rgb.charAt(1) + rgb.charAt(1) + + rgb.charAt(2) + rgb.charAt(2) + + rgb.charAt(3) + rgb.charAt(3); + } + } + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$j = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$b = (undefined && undefined.__assign) || function () { + __assign$b = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$b.apply(this, arguments); + }; + function serialize_date(value) { + if (value === null) { + return null; + } + else { + return { + year: value.getUTCFullYear(), + month: value.getUTCMonth(), + date: value.getUTCDate() + }; + } + } + function deserialize_date(value) { + if (value === null) { + return null; + } + else { + var date = new Date(); + date.setUTCFullYear(value.year, value.month, value.date); + date.setUTCHours(0, 0, 0, 0); + return date; + } + } + var DatePickerModel = /** @class */ (function (_super) { + __extends$j(DatePickerModel, _super); + function DatePickerModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + DatePickerModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + value: null, + _model_name: 'DatePickerModel', + _view_name: 'DatePickerView' + }); + }; + DatePickerModel.serializers = __assign$b(__assign$b({}, CoreDescriptionModel.serializers), { value: { + serialize: serialize_date, + deserialize: deserialize_date + } }); + return DatePickerModel; + }(CoreDescriptionModel)); + var DatePickerView = /** @class */ (function (_super) { + __extends$j(DatePickerView, _super); + function DatePickerView() { + return _super !== null && _super.apply(this, arguments) || this; + } + DatePickerView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-datepicker'); + this._datepicker = document.createElement('input'); + this._datepicker.setAttribute('type', 'date'); + this._datepicker.id = this.label.htmlFor = uuid(); + this.el.appendChild(this._datepicker); + this.listenTo(this.model, 'change:value', this._update_value); + this._update_value(); + this.update(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + DatePickerView.prototype.update = function (options) { + if (options === undefined || options.updated_view !== this) { + this._datepicker.disabled = this.model.get('disabled'); + } + return _super.prototype.update.call(this); + }; + DatePickerView.prototype.events = function () { + // Typescript doesn't understand that these functions are called, so we + // specifically use them here so it knows they are being used. + void this._picker_change; + void this._picker_focusout; + return { + 'change [type="date"]': '_picker_change', + 'focusout [type="date"]': '_picker_focusout' + }; + }; + DatePickerView.prototype._update_value = function () { + var value = this.model.get('value'); + this._datepicker.valueAsDate = value; + }; + DatePickerView.prototype._picker_change = function () { + if (!this._datepicker.validity.badInput) { + this.model.set('value', this._datepicker.valueAsDate); + this.touch(); + } + }; + DatePickerView.prototype._picker_focusout = function () { + if (this._datepicker.validity.badInput) { + this.model.set('value', null); + this.touch(); + } + }; + return DatePickerView; + }(DescriptionView)); + + // Computes the decimal coefficient and exponent of the specified number x with + // significant digits p, where x is positive and p is in [1, 21] or undefined. + // For example, formatDecimal(1.23) returns ["123", 0]. + function formatDecimal(x, p) { + if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity + var i, coefficient = x.slice(0, i); + + // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ + // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). + return [ + coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, + +x.slice(i + 1) + ]; + } + + function exponent(x) { + return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; + } + + function formatGroup(grouping, thousands) { + return function(value, width) { + var i = value.length, + t = [], + j = 0, + g = grouping[0], + length = 0; + + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = grouping[j = (j + 1) % grouping.length]; + } + + return t.reverse().join(thousands); + }; + } + + function formatNumerals(numerals) { + return function(value) { + return value.replace(/[0-9]/g, function(i) { + return numerals[+i]; + }); + }; + } + + // [[fill]align][sign][symbol][0][width][,][.precision][~][type] + var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; + + function formatSpecifier(specifier) { + if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); + var match; + return new FormatSpecifier({ + fill: match[1], + align: match[2], + sign: match[3], + symbol: match[4], + zero: match[5], + width: match[6], + comma: match[7], + precision: match[8] && match[8].slice(1), + trim: match[9], + type: match[10] + }); + } + + formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof + + function FormatSpecifier(specifier) { + this.fill = specifier.fill === undefined ? " " : specifier.fill + ""; + this.align = specifier.align === undefined ? ">" : specifier.align + ""; + this.sign = specifier.sign === undefined ? "-" : specifier.sign + ""; + this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + ""; + this.zero = !!specifier.zero; + this.width = specifier.width === undefined ? undefined : +specifier.width; + this.comma = !!specifier.comma; + this.precision = specifier.precision === undefined ? undefined : +specifier.precision; + this.trim = !!specifier.trim; + this.type = specifier.type === undefined ? "" : specifier.type + ""; + } + + FormatSpecifier.prototype.toString = function() { + return this.fill + + this.align + + this.sign + + this.symbol + + (this.zero ? "0" : "") + + (this.width === undefined ? "" : Math.max(1, this.width | 0)) + + (this.comma ? "," : "") + + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) + + (this.trim ? "~" : "") + + this.type; + }; + + // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. + function formatTrim(s) { + out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { + switch (s[i]) { + case ".": i0 = i1 = i; break; + case "0": if (i0 === 0) i0 = i; i1 = i; break; + default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break; + } + } + return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; + } + + var prefixExponent; + + function formatPrefixAuto(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1], + i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, + n = coefficient.length; + return i === n ? coefficient + : i > n ? coefficient + new Array(i - n + 1).join("0") + : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) + : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! + } + + function formatRounded(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1]; + return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient + : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) + : coefficient + new Array(exponent - coefficient.length + 2).join("0"); + } + + var formatTypes = { + "%": function(x, p) { return (x * 100).toFixed(p); }, + "b": function(x) { return Math.round(x).toString(2); }, + "c": function(x) { return x + ""; }, + "d": function(x) { return Math.round(x).toString(10); }, + "e": function(x, p) { return x.toExponential(p); }, + "f": function(x, p) { return x.toFixed(p); }, + "g": function(x, p) { return x.toPrecision(p); }, + "o": function(x) { return Math.round(x).toString(8); }, + "p": function(x, p) { return formatRounded(x * 100, p); }, + "r": formatRounded, + "s": formatPrefixAuto, + "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, + "x": function(x) { return Math.round(x).toString(16); } + }; + + function identity$1(x) { + return x; + } + + var map$2 = Array.prototype.map, + prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; + + function formatLocale(locale) { + var group = locale.grouping === undefined || locale.thousands === undefined ? identity$1 : formatGroup(map$2.call(locale.grouping, Number), locale.thousands + ""), + currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "", + currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "", + decimal = locale.decimal === undefined ? "." : locale.decimal + "", + numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map$2.call(locale.numerals, String)), + percent = locale.percent === undefined ? "%" : locale.percent + "", + minus = locale.minus === undefined ? "-" : locale.minus + "", + nan = locale.nan === undefined ? "NaN" : locale.nan + ""; + + function newFormat(specifier) { + specifier = formatSpecifier(specifier); + + var fill = specifier.fill, + align = specifier.align, + sign = specifier.sign, + symbol = specifier.symbol, + zero = specifier.zero, + width = specifier.width, + comma = specifier.comma, + precision = specifier.precision, + trim = specifier.trim, + type = specifier.type; + + // The "n" type is an alias for ",g". + if (type === "n") comma = true, type = "g"; + + // The "" type, and any invalid type, is an alias for ".12~g". + else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g"; + + // If zero fill is specified, padding goes after sign and before digits. + if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; + + // Compute the prefix and suffix. + // For SI-prefix, the suffix is lazily computed. + var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", + suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : ""; + + // What format function should we use? + // Is this an integer type? + // Can this type generate exponential notation? + var formatType = formatTypes[type], + maybeSuffix = /[defgprs%]/.test(type); + + // Set the default precision if not specified, + // or clamp the specified precision to the supported range. + // For significant precision, it must be in [1, 21]. + // For fixed precision, it must be in [0, 20]. + precision = precision === undefined ? 6 + : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) + : Math.max(0, Math.min(20, precision)); + + function format(value) { + var valuePrefix = prefix, + valueSuffix = suffix, + i, n, c; + + if (type === "c") { + valueSuffix = formatType(value) + valueSuffix; + value = ""; + } else { + value = +value; + + // Determine the sign. -0 is not less than 0, but 1 / -0 is! + var valueNegative = value < 0 || 1 / value < 0; + + // Perform the initial formatting. + value = isNaN(value) ? nan : formatType(Math.abs(value), precision); + + // Trim insignificant zeros. + if (trim) value = formatTrim(value); + + // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign. + if (valueNegative && +value === 0 && sign !== "+") valueNegative = false; + + // Compute the prefix and suffix. + valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; + valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); + + // Break the formatted value into the integer “value” part that can be + // grouped, and fractional or exponential “suffix” part that is not. + if (maybeSuffix) { + i = -1, n = value.length; + while (++i < n) { + if (c = value.charCodeAt(i), 48 > c || c > 57) { + valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; + value = value.slice(0, i); + break; + } + } + } + } + + // If the fill character is not "0", grouping is applied before padding. + if (comma && !zero) value = group(value, Infinity); + + // Compute the padding. + var length = valuePrefix.length + value.length + valueSuffix.length, + padding = length < width ? new Array(width - length + 1).join(fill) : ""; + + // If the fill character is "0", grouping is applied after padding. + if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; + + // Reconstruct the final output based on the desired alignment. + switch (align) { + case "<": value = valuePrefix + value + valueSuffix + padding; break; + case "=": value = valuePrefix + padding + value + valueSuffix; break; + case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; + default: value = padding + valuePrefix + value + valueSuffix; break; + } + + return numerals(value); + } + + format.toString = function() { + return specifier + ""; + }; + + return format; + } + + function formatPrefix(specifier, value) { + var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), + e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, + k = Math.pow(10, -e), + prefix = prefixes[8 + e / 3]; + return function(value) { + return f(k * value) + prefix; + }; + } + + return { + format: newFormat, + formatPrefix: formatPrefix + }; + } + + var locale; + var format; + var formatPrefix; + + defaultLocale({ + decimal: ".", + thousands: ",", + grouping: [3], + currency: ["$", ""], + minus: "-" + }); + + function defaultLocale(definition) { + locale = formatLocale(definition); + format = locale.format; + formatPrefix = locale.formatPrefix; + return locale; + } + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$k = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$c = (undefined && undefined.__assign) || function () { + __assign$c = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$c.apply(this, arguments); + }; + + var IntModel = /** @class */ (function (_super) { + __extends$k(IntModel, _super); + function IntModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + IntModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'IntModel', + value: 0, + }); + }; + return IntModel; + }(CoreDescriptionModel)); + var BoundedIntModel = /** @class */ (function (_super) { + __extends$k(BoundedIntModel, _super); + function BoundedIntModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + BoundedIntModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'BoundedIntModel', + max: 100, + min: 0 + }); + }; + return BoundedIntModel; + }(IntModel)); + var SliderStyleModel = /** @class */ (function (_super) { + __extends$k(SliderStyleModel, _super); + function SliderStyleModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + SliderStyleModel.prototype.defaults = function () { + return __assign$c(__assign$c({}, _super.prototype.defaults.call(this)), { _model_name: 'SliderStyleModel' }); + }; + SliderStyleModel.styleProperties = __assign$c(__assign$c({}, DescriptionStyleModel.styleProperties), { handle_color: { + selector: '.ui-slider-handle', + attribute: 'background-color', + default: null + } }); + return SliderStyleModel; + }(DescriptionStyleModel)); + var IntSliderModel = /** @class */ (function (_super) { + __extends$k(IntSliderModel, _super); + function IntSliderModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + IntSliderModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'IntSliderModel', + _view_name: 'IntSliderView', + step: 1, + orientation: 'horizontal', + readout: true, + readout_format: 'd', + continuous_update: true, + style: null, + disabled: false, + }); + }; + IntSliderModel.prototype.initialize = function (attributes, options) { + _super.prototype.initialize.call(this, attributes, options); + this.on('change:readout_format', this.update_readout_format, this); + this.update_readout_format(); + }; + IntSliderModel.prototype.update_readout_format = function () { + this.readout_formatter = format(this.get('readout_format')); + }; + return IntSliderModel; + }(BoundedIntModel)); + var IntRangeSliderModel = /** @class */ (function (_super) { + __extends$k(IntRangeSliderModel, _super); + function IntRangeSliderModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return IntRangeSliderModel; + }(IntSliderModel)); + var BaseIntSliderView = /** @class */ (function (_super) { + __extends$k(BaseIntSliderView, _super); + function BaseIntSliderView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._parse_value = parseInt; + return _this; + } + BaseIntSliderView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-slider'); + this.el.classList.add('widget-hslider'); + (this.$slider = $$1('
    ')) + .slider({ + slide: this.handleSliderChange.bind(this), + stop: this.handleSliderChanged.bind(this) + }) + .addClass('slider'); + // Put the slider in a container + this.slider_container = document.createElement('div'); + this.slider_container.classList.add('slider-container'); + this.slider_container.appendChild(this.$slider[0]); + this.el.appendChild(this.slider_container); + this.readout = document.createElement('div'); + this.el.appendChild(this.readout); + this.readout.classList.add('widget-readout'); + this.readout.contentEditable = 'true'; + this.readout.style.display = 'none'; + // Set defaults. + this.update(); + }; + BaseIntSliderView.prototype.update = function (options) { + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + if (options === undefined || options.updated_view !== this) { + // JQuery slider option keys. These keys happen to have a + // one-to-one mapping with the corresponding keys of the model. + var jquery_slider_keys = ['step', 'disabled']; + var that_1 = this; + that_1.$slider.slider({}); + jquery_slider_keys.forEach(function (key) { + var model_value = that_1.model.get(key); + if (model_value !== undefined) { + that_1.$slider.slider('option', key, model_value); + } + }); + if (this.model.get('disabled')) { + this.readout.contentEditable = 'false'; + } + else { + this.readout.contentEditable = 'true'; + } + var max = this.model.get('max'); + var min = this.model.get('min'); + if (min <= max) { + if (max !== undefined) { + this.$slider.slider('option', 'max', max); + } + if (min !== undefined) { + this.$slider.slider('option', 'min', min); + } + } + // WORKAROUND FOR JQUERY SLIDER BUG. + // The horizontal position of the slider handle + // depends on the value of the slider at the time + // of orientation change. Before applying the new + // workaround, we set the value to the minimum to + // make sure that the horizontal placement of the + // handle in the vertical slider is always + // consistent. + var orientation_1 = this.model.get('orientation'); + this.$slider.slider('option', 'orientation', orientation_1); + // Use the right CSS classes for vertical & horizontal sliders + if (orientation_1 === 'vertical') { + this.el.classList.remove('widget-hslider'); + this.el.classList.add('widget-vslider'); + this.el.classList.remove('widget-inline-hbox'); + this.el.classList.add('widget-inline-vbox'); + } + else { + this.el.classList.remove('widget-vslider'); + this.el.classList.add('widget-hslider'); + this.el.classList.remove('widget-inline-vbox'); + this.el.classList.add('widget-inline-hbox'); + } + var readout = this.model.get('readout'); + if (readout) { + this.readout.style.display = ''; + this.displayed.then(function () { + if (that_1.readout_overflow()) { + that_1.readout.classList.add('overflow'); + } + else { + that_1.readout.classList.remove('overflow'); + } + }); + } + else { + this.readout.style.display = 'none'; + } + } + return _super.prototype.update.call(this); + }; + /** + * Returns true if the readout box content overflows. + */ + BaseIntSliderView.prototype.readout_overflow = function () { + return this.readout.scrollWidth > this.readout.clientWidth; + }; + BaseIntSliderView.prototype.events = function () { + return { + // Dictionary of events and their handlers. + 'slide': 'handleSliderChange', + 'slidestop': 'handleSliderChanged', + 'blur [contentEditable=true]': 'handleTextChange', + 'keydown [contentEditable=true]': 'handleKeyDown' + }; + }; + BaseIntSliderView.prototype.handleKeyDown = function (e) { + if (e.keyCode === 13) { /* keyboard keycodes `enter` */ + e.preventDefault(); + this.handleTextChange(); + } + }; + /** + * Validate the value of the slider before sending it to the back-end + * and applying it to the other views on the page. + */ + BaseIntSliderView.prototype._validate_slide_value = function (x) { + return Math.floor(x); + }; + return BaseIntSliderView; + }(DescriptionView)); + var IntRangeSliderView = /** @class */ (function (_super) { + __extends$k(IntRangeSliderView, _super); + function IntRangeSliderView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // range numbers can be separated by a hyphen, colon, or an en-dash + _this._range_regex = /^\s*([+-]?\d+)\s*[-:–]\s*([+-]?\d+)/; + return _this; + } + IntRangeSliderView.prototype.update = function (options) { + _super.prototype.update.call(this, options); + this.$slider.slider('option', 'range', true); + // values for the range case are validated python-side in + // _Bounded{Int,Float}RangeWidget._validate + var value = this.model.get('value'); + this.$slider.slider('option', 'values', value.slice()); + this.readout.textContent = this.valueToString(value); + if (this.model.get('value') !== value) { + this.model.set('value', value, { updated_view: this }); + this.touch(); + } + }; + /** + * Write value to a string + */ + IntRangeSliderView.prototype.valueToString = function (value) { + var format = this.model.readout_formatter; + return value.map(function (v) { + return format(v); + }).join(' – '); + }; + /** + * Parse value from a string + */ + IntRangeSliderView.prototype.stringToValue = function (text) { + // ranges can be expressed either 'val-val' or 'val:val' (+spaces) + var match = this._range_regex.exec(text); + if (match) { + return [this._parse_value(match[1]), this._parse_value(match[2])]; + } + else { + return null; + } + }; + /** + * this handles the entry of text into the contentEditable label first, the + * value is checked if it contains a parseable value then it is clamped + * within the min-max range of the slider finally, the model is updated if + * the value is to be changed + * + * if any of these conditions are not met, the text is reset + */ + IntRangeSliderView.prototype.handleTextChange = function () { + var value = this.stringToValue(this.readout.textContent); + var vmin = this.model.get('min'); + var vmax = this.model.get('max'); + // reject input where NaN or lower > upper + if (value === null || + isNaN(value[0]) || + isNaN(value[1]) || + (value[0] > value[1])) { + this.readout.textContent = this.valueToString(this.model.get('value')); + } + else { + // clamp to range + value = [Math.max(Math.min(value[0], vmax), vmin), + Math.max(Math.min(value[1], vmax), vmin)]; + if ((value[0] !== this.model.get('value')[0]) || + (value[1] !== this.model.get('value')[1])) { + this.readout.textContent = this.valueToString(value); + this.model.set('value', value, { updated_view: this }); + this.touch(); + } + else { + this.readout.textContent = this.valueToString(this.model.get('value')); + } + } + }; + /** + * Called when the slider value is changing. + */ + IntRangeSliderView.prototype.handleSliderChange = function (e, ui) { + var actual_value = ui.values.map(this._validate_slide_value); + this.readout.textContent = this.valueToString(actual_value); + // Only persist the value while sliding if the continuous_update + // trait is set to true. + if (this.model.get('continuous_update')) { + this.handleSliderChanged(e, ui); + } + }; + /** + * Called when the slider value has changed. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + IntRangeSliderView.prototype.handleSliderChanged = function (e, ui) { + var actual_value = ui.values.map(this._validate_slide_value); + this.model.set('value', actual_value, { updated_view: this }); + this.touch(); + }; + return IntRangeSliderView; + }(BaseIntSliderView)); + var IntSliderView = /** @class */ (function (_super) { + __extends$k(IntSliderView, _super); + function IntSliderView() { + return _super !== null && _super.apply(this, arguments) || this; + } + IntSliderView.prototype.update = function (options) { + _super.prototype.update.call(this, options); + var min = this.model.get('min'); + var max = this.model.get('max'); + var value = this.model.get('value'); + if (value > max) { + value = max; + } + else if (value < min) { + value = min; + } + this.$slider.slider('option', 'value', value); + this.readout.textContent = this.valueToString(value); + if (this.model.get('value') !== value) { + this.model.set('value', value, { updated_view: this }); + this.touch(); + } + }; + /** + * Write value to a string + */ + IntSliderView.prototype.valueToString = function (value) { + var format = this.model.readout_formatter; + return format(value); + }; + /** + * Parse value from a string + */ + IntSliderView.prototype.stringToValue = function (text) { + return this._parse_value(text); + }; + /** + * this handles the entry of text into the contentEditable label first, the + * value is checked if it contains a parseable value then it is clamped + * within the min-max range of the slider finally, the model is updated if + * the value is to be changed + * + * if any of these conditions are not met, the text is reset + */ + IntSliderView.prototype.handleTextChange = function () { + var value = this.stringToValue(this.readout.textContent); + var vmin = this.model.get('min'); + var vmax = this.model.get('max'); + if (isNaN(value)) { + this.readout.textContent = this.valueToString(this.model.get('value')); + } + else { + value = Math.max(Math.min(value, vmax), vmin); + if (value !== this.model.get('value')) { + this.readout.textContent = this.valueToString(value); + this.model.set('value', value, { updated_view: this }); + this.touch(); + } + else { + this.readout.textContent = this.valueToString(this.model.get('value')); + } + } + }; + /** + * Called when the slider value is changing. + */ + IntSliderView.prototype.handleSliderChange = function (e, ui) { + var actual_value = this._validate_slide_value(ui.value); + this.readout.textContent = this.valueToString(actual_value); + // Only persist the value while sliding if the continuous_update + // trait is set to true. + if (this.model.get('continuous_update')) { + this.handleSliderChanged(e, ui); + } + }; + /** + * Called when the slider value has changed. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + IntSliderView.prototype.handleSliderChanged = function (e, ui) { + var actual_value = this._validate_slide_value(ui.value); + this.model.set('value', actual_value, { updated_view: this }); + this.touch(); + }; + return IntSliderView; + }(BaseIntSliderView)); + var IntTextModel = /** @class */ (function (_super) { + __extends$k(IntTextModel, _super); + function IntTextModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + IntTextModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'IntTextModel', + _view_name: 'IntTextView', + disabled: false, + continuous_update: false, + }); + }; + return IntTextModel; + }(IntModel)); + var BoundedIntTextModel = /** @class */ (function (_super) { + __extends$k(BoundedIntTextModel, _super); + function BoundedIntTextModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + BoundedIntTextModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'BoundedIntTextModel', + _view_name: 'IntTextView', + disabled: false, + continuous_update: false, + step: 1, + }); + }; + return BoundedIntTextModel; + }(BoundedIntModel)); + var IntTextView = /** @class */ (function (_super) { + __extends$k(IntTextView, _super); + function IntTextView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._parse_value = parseInt; + _this._default_step = '1'; + return _this; + } + IntTextView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-text'); + this.textbox = document.createElement('input'); + this.textbox.type = 'number'; + this.textbox.required = true; + this.textbox.id = this.label.htmlFor = uuid(); + this.el.appendChild(this.textbox); + this.update(); // Set defaults. + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + IntTextView.prototype.update = function (options) { + if (options === undefined || options.updated_view !== this) { + var value = this.model.get('value'); + if (this._parse_value(this.textbox.value) !== value) { + this.textbox.value = value.toString(); + } + if (this.model.get('min') !== undefined) { + this.textbox.min = this.model.get('min'); + } + if (this.model.get('max') !== undefined) { + this.textbox.max = this.model.get('max'); + } + if (this.model.get('step') !== undefined + && this.model.get('step') !== null) { + this.textbox.step = this.model.get('step'); + } + else { + this.textbox.step = this._default_step; + } + this.textbox.disabled = this.model.get('disabled'); + } + return _super.prototype.update.call(this); + }; + IntTextView.prototype.events = function () { + return { + 'keydown input': 'handleKeyDown', + 'keypress input': 'handleKeypress', + 'keyup input': 'handleKeyUp', + 'input input': 'handleChanging', + 'change input': 'handleChanged' + }; + }; + /** + * Handle key down + * + * Stop propagation so the event isn't sent to the application. + */ + IntTextView.prototype.handleKeyDown = function (e) { + e.stopPropagation(); + }; + /** + * Handles key press + */ + IntTextView.prototype.handleKeypress = function (e) { + if (/[e,.\s]/.test(String.fromCharCode(e.keyCode))) { + e.preventDefault(); + } + }; + /** + * Handle key up + */ + IntTextView.prototype.handleKeyUp = function (e) { + if (e.altKey || e.ctrlKey) { + return; + } + var target = e.target; + /* remove invalid characters */ + var value = target.value; + value = value.replace(/[e,.\s]/g, ""); + if (value.length >= 1) { + var subvalue = value.substr(1); + value = value[0] + subvalue.replace(/[+-]/g, ""); + } + if (target.value != value) { + e.preventDefault(); + target.value = value; + } + }; + /** + * Call the submit handler if continuous update is true and we are not + * obviously incomplete. + */ + IntTextView.prototype.handleChanging = function (e) { + var target = e.target; + var trimmed = target.value.trim(); + if (trimmed === '' || (['-', '-.', '.', '+.', '+'].indexOf(trimmed) >= 0)) { + // incomplete number + return; + } + if (this.model.get('continuous_update')) { + this.handleChanged(e); + } + }; + /** + * Applies validated input. + */ + IntTextView.prototype.handleChanged = function (e) { + var target = e.target; + var numericalValue = this._parse_value(target.value); + // If parse failed, reset value to value stored in model. + if (isNaN(numericalValue)) { + target.value = this.model.get('value'); + } + else { + // Handle both the unbounded and bounded case by + // checking to see if the max/min properties are defined + var boundedValue = numericalValue; + if (this.model.get('max') !== undefined) { + boundedValue = Math.min(this.model.get('max'), boundedValue); + } + if (this.model.get('min') !== undefined) { + boundedValue = Math.max(this.model.get('min'), boundedValue); + } + if (boundedValue !== numericalValue) { + target.value = boundedValue; + numericalValue = boundedValue; + } + // Apply the value if it has changed. + if (numericalValue !== this.model.get('value')) { + this.model.set('value', numericalValue, { updated_view: this }); + this.touch(); + } + } + }; + return IntTextView; + }(DescriptionView)); + var ProgressStyleModel = /** @class */ (function (_super) { + __extends$k(ProgressStyleModel, _super); + function ProgressStyleModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ProgressStyleModel.prototype.defaults = function () { + return __assign$c(__assign$c({}, _super.prototype.defaults.call(this)), { _model_name: 'ProgressStyleModel' }); + }; + ProgressStyleModel.styleProperties = __assign$c(__assign$c({}, DescriptionStyleModel.styleProperties), { bar_color: { + selector: '.progress-bar', + attribute: 'background-color', + default: null + } }); + return ProgressStyleModel; + }(DescriptionStyleModel)); + var IntProgressModel = /** @class */ (function (_super) { + __extends$k(IntProgressModel, _super); + function IntProgressModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + IntProgressModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'IntProgressModel', + _view_name: 'ProgressView', + orientation: 'horizontal', + bar_style: '', + style: null + }); + }; + return IntProgressModel; + }(BoundedIntModel)); + var ProgressView = /** @class */ (function (_super) { + __extends$k(ProgressView, _super); + function ProgressView() { + return _super !== null && _super.apply(this, arguments) || this; + } + ProgressView.prototype.initialize = function (parameters) { + _super.prototype.initialize.call(this, parameters); + this.listenTo(this.model, 'change:bar_style', this.update_bar_style); + this.pWidget.addClass('jupyter-widgets'); + }; + ProgressView.prototype.render = function () { + _super.prototype.render.call(this); + var orientation = this.model.get('orientation'); + var className = orientation === 'horizontal' ? + 'widget-hprogress' : 'widget-vprogress'; + this.el.classList.add(className); + this.progress = document.createElement('div'); + this.progress.classList.add('progress'); + this.progress.style.position = 'relative'; + this.el.appendChild(this.progress); + this.bar = document.createElement('div'); + this.bar.classList.add('progress-bar'); + this.bar.style.position = 'absolute'; + this.bar.style.bottom = '0px'; + this.bar.style.left = '0px'; + this.progress.appendChild(this.bar); + // Set defaults. + this.update(); + this.set_bar_style(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + ProgressView.prototype.update = function () { + var value = this.model.get('value'); + var max = this.model.get('max'); + var min = this.model.get('min'); + var orientation = this.model.get('orientation'); + var percent = 100.0 * (value - min) / (max - min); + if (orientation === 'horizontal') { + this.el.classList.remove('widget-inline-vbox'); + this.el.classList.remove('widget-vprogress'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-hprogress'); + this.bar.style.width = percent + '%'; + this.bar.style.height = '100%'; + } + else { + this.el.classList.remove('widget-inline-hbox'); + this.el.classList.remove('widget-hprogress'); + this.el.classList.add('widget-inline-vbox'); + this.el.classList.add('widget-vprogress'); + this.bar.style.width = '100%'; + this.bar.style.height = percent + '%'; + } + return _super.prototype.update.call(this); + }; + ProgressView.prototype.update_bar_style = function () { + this.update_mapped_classes(ProgressView.class_map, 'bar_style', this.bar); + }; + ProgressView.prototype.set_bar_style = function () { + this.set_mapped_classes(ProgressView.class_map, 'bar_style', this.bar); + }; + ProgressView.class_map = { + success: ['progress-bar-success'], + info: ['progress-bar-info'], + warning: ['progress-bar-warning'], + danger: ['progress-bar-danger'] + }; + return ProgressView; + }(DescriptionView)); + var PlayModel = /** @class */ (function (_super) { + __extends$k(PlayModel, _super); + function PlayModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + PlayModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'PlayModel', + _view_name: 'PlayView', + _playing: false, + _repeat: false, + show_repeat: true, + interval: 100, + step: 1, + disabled: false, + }); + }; + PlayModel.prototype.initialize = function (attributes, options) { + _super.prototype.initialize.call(this, attributes, options); + }; + PlayModel.prototype.loop = function () { + if (this.get('_playing')) { + var next_value = this.get('value') + this.get('step'); + if (next_value <= this.get('max')) { + this.set('value', next_value); + this.schedule_next(); + } + else { + if (this.get('_repeat')) { + this.set('value', this.get('min')); + this.schedule_next(); + } + else { + this.set('_playing', false); + } + } + this.save_changes(); + } + }; + PlayModel.prototype.schedule_next = function () { + window.setTimeout(this.loop.bind(this), this.get('interval')); + }; + PlayModel.prototype.stop = function () { + this.set('_playing', false); + this.set('value', this.get('min')); + this.save_changes(); + }; + PlayModel.prototype.pause = function () { + this.set('_playing', false); + this.save_changes(); + }; + PlayModel.prototype.play = function () { + this.set('_playing', true); + if (this.get('value') == this.get('max')) { + // if the value is at the end, reset if first, and then schedule the next + this.set('value', this.get('min')); + this.schedule_next(); + this.save_changes(); + } + else { + // otherwise directly start with the next value + // loop will call save_changes in this case + this.loop(); + } + }; + PlayModel.prototype.repeat = function () { + this.set('_repeat', !this.get('_repeat')); + this.save_changes(); + }; + return PlayModel; + }(BoundedIntModel)); + var PlayView = /** @class */ (function (_super) { + __extends$k(PlayView, _super); + function PlayView() { + return _super !== null && _super.apply(this, arguments) || this; + } + PlayView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-play'); + this.playButton = document.createElement('button'); + this.pauseButton = document.createElement('button'); + this.stopButton = document.createElement('button'); + this.repeatButton = document.createElement('button'); + this.playButton.className = 'jupyter-button'; + this.pauseButton.className = 'jupyter-button'; + this.stopButton.className = 'jupyter-button'; + this.repeatButton.className = 'jupyter-button'; + this.el.appendChild(this.playButton); // Toggle button with playing + this.el.appendChild(this.pauseButton); // Disable if not playing + this.el.appendChild(this.stopButton); // Disable if not playing + this.el.appendChild(this.repeatButton); // Always enabled, but may be hidden + var playIcon = document.createElement('i'); + playIcon.className = 'fa fa-play'; + this.playButton.appendChild(playIcon); + var pauseIcon = document.createElement('i'); + pauseIcon.className = 'fa fa-pause'; + this.pauseButton.appendChild(pauseIcon); + var stopIcon = document.createElement('i'); + stopIcon.className = 'fa fa-stop'; + this.stopButton.appendChild(stopIcon); + var repeatIcon = document.createElement('i'); + repeatIcon.className = 'fa fa-retweet'; + this.repeatButton.appendChild(repeatIcon); + this.playButton.onclick = this.model.play.bind(this.model); + this.pauseButton.onclick = this.model.pause.bind(this.model); + this.stopButton.onclick = this.model.stop.bind(this.model); + this.repeatButton.onclick = this.model.repeat.bind(this.model); + this.listenTo(this.model, 'change:_playing', this.update_playing); + this.listenTo(this.model, 'change:_repeat', this.update_repeat); + this.listenTo(this.model, 'change:show_repeat', this.update_repeat); + this.update_playing(); + this.update_repeat(); + this.update(); + }; + PlayView.prototype.update = function () { + var disabled = this.model.get('disabled'); + this.playButton.disabled = disabled; + this.pauseButton.disabled = disabled; + this.stopButton.disabled = disabled; + this.repeatButton.disabled = disabled; + this.update_playing(); + }; + PlayView.prototype.update_playing = function () { + var playing = this.model.get('_playing'); + var disabled = this.model.get('disabled'); + if (playing) { + if (!disabled) { + this.pauseButton.disabled = false; + } + this.playButton.classList.add('mod-active'); + } + else { + if (!disabled) { + this.pauseButton.disabled = true; + } + this.playButton.classList.remove('mod-active'); + } + }; + PlayView.prototype.update_repeat = function () { + var repeat = this.model.get('_repeat'); + this.repeatButton.style.display = this.model.get('show_repeat') ? this.playButton.style.display : 'none'; + if (repeat) { + this.repeatButton.classList.add('mod-active'); + } + else { + this.repeatButton.classList.remove('mod-active'); + } + }; + return PlayView; + }(DOMWidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$l = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var FloatModel = /** @class */ (function (_super) { + __extends$l(FloatModel, _super); + function FloatModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + FloatModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'FloatModel', + value: 0, + }); + }; + return FloatModel; + }(CoreDescriptionModel)); + var BoundedFloatModel = /** @class */ (function (_super) { + __extends$l(BoundedFloatModel, _super); + function BoundedFloatModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + BoundedFloatModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'BoundedFloatModel', + max: 100.0, + min: 0.0 + }); + }; + return BoundedFloatModel; + }(FloatModel)); + var FloatSliderModel = /** @class */ (function (_super) { + __extends$l(FloatSliderModel, _super); + function FloatSliderModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + FloatSliderModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'FloatSliderModel', + _view_name: 'FloatSliderView', + step: 1.0, + orientation: 'horizontal', + _range: false, + readout: true, + readout_format: '.2f', + slider_color: null, + continuous_update: true, + disabled: false, + }); + }; + FloatSliderModel.prototype.initialize = function (attributes, options) { + _super.prototype.initialize.call(this, attributes, options); + this.on('change:readout_format', this.update_readout_format, this); + this.update_readout_format(); + }; + FloatSliderModel.prototype.update_readout_format = function () { + this.readout_formatter = format(this.get('readout_format')); + }; + return FloatSliderModel; + }(BoundedFloatModel)); + var FloatLogSliderModel = /** @class */ (function (_super) { + __extends$l(FloatLogSliderModel, _super); + function FloatLogSliderModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + FloatLogSliderModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'FloatLogSliderModel', + _view_name: 'FloatLogSliderView', + step: 0.1, + orientation: 'horizontal', + _range: false, + readout: true, + readout_format: '.3g', + slider_color: null, + continuous_update: true, + disabled: false, + base: 10., + value: 1.0, + min: 0, + max: 4 + }); + }; + FloatLogSliderModel.prototype.initialize = function (attributes, options) { + _super.prototype.initialize.call(this, attributes, options); + this.on('change:readout_format', this.update_readout_format, this); + this.update_readout_format(); + }; + FloatLogSliderModel.prototype.update_readout_format = function () { + this.readout_formatter = format(this.get('readout_format')); + }; + return FloatLogSliderModel; + }(BoundedFloatModel)); + var FloatRangeSliderModel = /** @class */ (function (_super) { + __extends$l(FloatRangeSliderModel, _super); + function FloatRangeSliderModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return FloatRangeSliderModel; + }(FloatSliderModel)); + var FloatSliderView = /** @class */ (function (_super) { + __extends$l(FloatSliderView, _super); + function FloatSliderView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._parse_value = parseFloat; + return _this; + } + /** + * Validate the value of the slider before sending it to the back-end + * and applying it to the other views on the page. + */ + FloatSliderView.prototype._validate_slide_value = function (x) { + return x; + }; + return FloatSliderView; + }(IntSliderView)); + var FloatLogSliderView = /** @class */ (function (_super) { + __extends$l(FloatLogSliderView, _super); + function FloatLogSliderView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._parse_value = parseFloat; + return _this; + } + FloatLogSliderView.prototype.update = function (options) { + _super.prototype.update.call(this, options); + var min = this.model.get('min'); + var max = this.model.get('max'); + var value = this.model.get('value'); + var base = this.model.get('base'); + var log_value = Math.log(value) / Math.log(base); + if (log_value > max) { + log_value = max; + } + else if (log_value < min) { + log_value = min; + } + this.$slider.slider('option', 'value', log_value); + this.readout.textContent = this.valueToString(value); + if (this.model.get('value') !== value) { + this.model.set('value', value, { updated_view: this }); + this.touch(); + } + }; + /** + * Write value to a string + */ + FloatLogSliderView.prototype.valueToString = function (value) { + var format = this.model.readout_formatter; + return format(value); + }; + /** + * Parse value from a string + */ + FloatLogSliderView.prototype.stringToValue = function (text) { + return this._parse_value(text); + }; + /** + * this handles the entry of text into the contentEditable label first, the + * value is checked if it contains a parseable value then it is clamped + * within the min-max range of the slider finally, the model is updated if + * the value is to be changed + * + * if any of these conditions are not met, the text is reset + */ + FloatLogSliderView.prototype.handleTextChange = function () { + var value = this.stringToValue(this.readout.textContent); + var vmin = this.model.get('min'); + var vmax = this.model.get('max'); + var base = this.model.get('base'); + if (isNaN(value)) { + this.readout.textContent = this.valueToString(this.model.get('value')); + } + else { + value = Math.max(Math.min(value, Math.pow(base, vmax)), Math.pow(base, vmin)); + if (value !== this.model.get('value')) { + this.readout.textContent = this.valueToString(value); + this.model.set('value', value, { updated_view: this }); + this.touch(); + } + else { + this.readout.textContent = this.valueToString(this.model.get('value')); + } + } + }; + /** + * Called when the slider value is changing. + */ + FloatLogSliderView.prototype.handleSliderChange = function (e, ui) { + var base = this.model.get('base'); + var actual_value = Math.pow(base, this._validate_slide_value(ui.value)); + this.readout.textContent = this.valueToString(actual_value); + // Only persist the value while sliding if the continuous_update + // trait is set to true. + if (this.model.get('continuous_update')) { + this.handleSliderChanged(e, ui); + } + }; + /** + * Called when the slider value has changed. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + FloatLogSliderView.prototype.handleSliderChanged = function (e, ui) { + var base = this.model.get('base'); + var actual_value = Math.pow(base, this._validate_slide_value(ui.value)); + this.model.set('value', actual_value, { updated_view: this }); + this.touch(); + }; + FloatLogSliderView.prototype._validate_slide_value = function (x) { + return x; + }; + return FloatLogSliderView; + }(BaseIntSliderView)); + var FloatRangeSliderView = /** @class */ (function (_super) { + __extends$l(FloatRangeSliderView, _super); + function FloatRangeSliderView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._parse_value = parseFloat; + // matches: whitespace?, float, whitespace?, (hyphen, colon, or en-dash), whitespace?, float + _this._range_regex = /^\s*([+-]?(?:\d*\.?\d+|\d+\.)(?:[eE][-:]?\d+)?)\s*[-:–]\s*([+-]?(?:\d*\.?\d+|\d+\.)(?:[eE][+-]?\d+)?)/; + return _this; + } + /** + * Validate the value of the slider before sending it to the back-end + * and applying it to the other views on the page. + */ + FloatRangeSliderView.prototype._validate_slide_value = function (x) { + return x; + }; + return FloatRangeSliderView; + }(IntRangeSliderView)); + var FloatTextModel = /** @class */ (function (_super) { + __extends$l(FloatTextModel, _super); + function FloatTextModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + FloatTextModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'FloatTextModel', + _view_name: 'FloatTextView', + disabled: false, + continuous_update: false, + }); + }; + return FloatTextModel; + }(FloatModel)); + var BoundedFloatTextModel = /** @class */ (function (_super) { + __extends$l(BoundedFloatTextModel, _super); + function BoundedFloatTextModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + BoundedFloatTextModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'BoundedFloatTextModel', + _view_name: 'FloatTextView', + disabled: false, + continuous_update: false, + step: 0.1 + }); + }; + return BoundedFloatTextModel; + }(BoundedFloatModel)); + var FloatTextView = /** @class */ (function (_super) { + __extends$l(FloatTextView, _super); + function FloatTextView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._parse_value = parseFloat; + _this._default_step = 'any'; + return _this; + } + /** + * Handle key press + */ + FloatTextView.prototype.handleKeypress = function (e) { + // Overwrite IntTextView's handleKeypress + // which prevents decimal points. + e.stopPropagation(); + }; + /** + * Handle key up + */ + FloatTextView.prototype.handleKeyUp = function (e) { + // Overwrite IntTextView's handleKeyUp + // which prevents decimal points. + }; + return FloatTextView; + }(IntTextView)); + var FloatProgressModel = /** @class */ (function (_super) { + __extends$l(FloatProgressModel, _super); + function FloatProgressModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + FloatProgressModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'FloatProgressModel', + _view_name: 'ProgressView', + orientation: 'horizontal', + bar_style: '', + style: null + }); + }; + return FloatProgressModel; + }(BoundedFloatModel)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$m = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$d = (undefined && undefined.__assign) || function () { + __assign$d = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$d.apply(this, arguments); + }; + var ControllerButtonModel = /** @class */ (function (_super) { + __extends$m(ControllerButtonModel, _super); + function ControllerButtonModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ControllerButtonModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'ControllerButtonModel', + _view_name: 'ControllerButtonView', + value: 0.0, + pressed: false + }); + }; + return ControllerButtonModel; + }(CoreDOMWidgetModel)); + /** + * Very simple view for a gamepad button. + */ + var ControllerButtonView = /** @class */ (function (_super) { + __extends$m(ControllerButtonView, _super); + function ControllerButtonView() { + return _super !== null && _super.apply(this, arguments) || this; + } + ControllerButtonView.prototype.render = function () { + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-controller-button'); + this.el.style.width = 'fit-content'; + this.support = document.createElement('div'); + this.support.style.position = 'relative'; + this.support.style.margin = '1px'; + this.support.style.width = '16px'; + this.support.style.height = '16px'; + this.support.style.border = '1px solid black'; + this.support.style.background = 'lightgray'; + this.el.appendChild(this.support); + this.bar = document.createElement('div'); + this.bar.style.position = 'absolute'; + this.bar.style.width = '100%'; + this.bar.style.bottom = '0px'; + this.bar.style.background = 'gray'; + this.support.appendChild(this.bar); + this.update(); + this.label = document.createElement('div'); + this.label.textContent = this.model.get('description'); + this.label.style.textAlign = 'center'; + this.el.appendChild(this.label); + }; + ControllerButtonView.prototype.update = function () { + this.bar.style.height = (100 * this.model.get('value')) + '%'; + }; + return ControllerButtonView; + }(DOMWidgetView)); + var ControllerAxisModel = /** @class */ (function (_super) { + __extends$m(ControllerAxisModel, _super); + function ControllerAxisModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ControllerAxisModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'ControllerAxisModel', + _view_name: 'ControllerAxisView', + value: 0.0 + }); + }; + return ControllerAxisModel; + }(CoreDOMWidgetModel)); + /** + * Very simple view for a gamepad axis. + */ + var ControllerAxisView = /** @class */ (function (_super) { + __extends$m(ControllerAxisView, _super); + function ControllerAxisView() { + return _super !== null && _super.apply(this, arguments) || this; + } + ControllerAxisView.prototype.render = function () { + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-controller-axis'); + this.el.style.width = '16px'; + this.el.style.padding = '4px'; + this.support = document.createElement('div'); + this.support.style.position = 'relative'; + this.support.style.margin = '1px'; + this.support.style.width = '4px'; + this.support.style.height = '64px'; + this.support.style.border = '1px solid black'; + this.support.style.background = 'lightgray'; + this.bullet = document.createElement('div'); + this.bullet.style.position = 'absolute'; + this.bullet.style.margin = '-3px'; + this.bullet.style.boxSizing = 'unset'; + this.bullet.style.width = '10px'; + this.bullet.style.height = '10px'; + this.bullet.style.background = 'gray'; + this.label = document.createElement('div'); + this.label.textContent = this.model.get('description'); + this.label.style.textAlign = 'center'; + this.support.appendChild(this.bullet); + this.el.appendChild(this.support); + this.el.appendChild(this.label); + this.update(); + }; + ControllerAxisView.prototype.update = function () { + this.bullet.style.top = (50 * (this.model.get('value') + 1)) + '%'; + }; + return ControllerAxisView; + }(DOMWidgetView)); + var ControllerModel = /** @class */ (function (_super) { + __extends$m(ControllerModel, _super); + function ControllerModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ControllerModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'ControllerModel', + _view_name: 'ControllerView', + index: 0, + name: '', + mapping: '', + connected: false, + timestamp: 0, + buttons: [], + axes: [] + }); + }; + ControllerModel.prototype.initialize = function (attributes, options) { + _super.prototype.initialize.call(this, attributes, options); + if (navigator.getGamepads === void 0) { + // Checks if the browser supports the gamepad API + this.readout = 'This browser does not support gamepads.'; + console.error(this.readout); + } + else { + // Start the wait loop, and listen to updates of the only + // user-provided attribute, the gamepad index. + this.readout = 'Connect gamepad and press any button.'; + if (this.get('connected')) { + // No need to re-create Button and Axis widgets, re-use + // the models provided by the backend which may already + // be wired to other things. + this.update_loop(); + } + else { + // Wait for a gamepad to be connected. + this.wait_loop(); + } + } + }; + /** + * Waits for a gamepad to be connected at the provided index. + * Once one is connected, it will start the update loop, which + * populates the update of axes and button values. + */ + ControllerModel.prototype.wait_loop = function () { + var index = this.get('index'); + var pad = navigator.getGamepads()[index]; + if (pad) { + var that_1 = this; + this.setup(pad).then(function (controls) { + that_1.set(controls); + that_1.save_changes(); + window.requestAnimationFrame(that_1.update_loop.bind(that_1)); + }); + } + else { + window.requestAnimationFrame(this.wait_loop.bind(this)); + } + }; + /** + * Given a native gamepad object, returns a promise for a dictionary of + * controls, of the form + * { + * buttons: list of Button models, + * axes: list of Axis models, + * } + */ + ControllerModel.prototype.setup = function (pad) { + // Set up the main gamepad attributes + this.set({ + name: pad.id, + mapping: pad.mapping, + connected: pad.connected, + timestamp: pad.timestamp + }); + // Create buttons and axes. When done, start the update loop + var that = this; + return resolvePromisesDict({ + buttons: Promise.all(pad.buttons.map(function (btn, index) { + return that._create_button_model(index); + })), + axes: Promise.all(pad.axes.map(function (axis, index) { + return that._create_axis_model(index); + })), + }); + }; + /** + * Update axes and buttons values, until the gamepad is disconnected. + * When the gamepad is disconnected, this.reset_gamepad is called. + */ + ControllerModel.prototype.update_loop = function () { + var index = this.get('index'); + var id = this.get('name'); + var pad = navigator.getGamepads()[index]; + if (pad && index === pad.index && id === pad.id) { + this.set({ + timestamp: pad.timestamp, + connected: pad.connected + }); + this.save_changes(); + this.get('buttons').forEach(function (model, index) { + model.set({ + value: pad.buttons[index].value, + pressed: pad.buttons[index].pressed + }); + model.save_changes(); + }); + this.get('axes').forEach(function (model, index) { + model.set('value', pad.axes[index]); + model.save_changes(); + }); + window.requestAnimationFrame(this.update_loop.bind(this)); + } + else { + this.reset_gamepad(); + } + }; + /** + * Resets the gamepad attributes, and start the wait_loop. + */ + ControllerModel.prototype.reset_gamepad = function () { + this.get('buttons').forEach(function (button) { + button.close(); + }); + this.get('axes').forEach(function (axis) { + axis.close(); + }); + this.set({ + name: '', + mapping: '', + connected: false, + timestamp: 0.0, + buttons: [], + axes: [] + }); + this.save_changes(); + window.requestAnimationFrame(this.wait_loop.bind(this)); + }; + /** + * Creates a gamepad button widget. + */ + ControllerModel.prototype._create_button_model = function (index) { + return this.widget_manager.new_widget({ + model_name: 'ControllerButtonModel', + model_module: '@jupyter-widgets/controls', + model_module_version: this.get('_model_module_version'), + view_name: 'ControllerButtonView', + view_module: '@jupyter-widgets/controls', + view_module_version: this.get('_view_module_version'), + }).then(function (model) { + model.set('description', index); + return model; + }); + }; + /** + * Creates a gamepad axis widget. + */ + ControllerModel.prototype._create_axis_model = function (index) { + return this.widget_manager.new_widget({ + model_name: 'ControllerAxisModel', + model_module: '@jupyter-widgets/controls', + model_module_version: this.get('_model_module_version'), + view_name: 'ControllerAxisView', + view_module: '@jupyter-widgets/controls', + view_module_version: this.get('_view_module_version'), + }).then(function (model) { + model.set('description', index); + return model; + }); + }; + ControllerModel.serializers = __assign$d(__assign$d({}, CoreDOMWidgetModel.serializers), { buttons: { deserialize: unpack_models }, axes: { deserialize: unpack_models } }); + return ControllerModel; + }(CoreDOMWidgetModel)); + /** + * A simple view for a gamepad. + */ + var ControllerView = /** @class */ (function (_super) { + __extends$m(ControllerView, _super); + function ControllerView() { + return _super !== null && _super.apply(this, arguments) || this; + } + ControllerView.prototype._createElement = function (tagName) { + this.pWidget = new JupyterPhosphorPanelWidget({ view: this }); + return this.pWidget.node; + }; + ControllerView.prototype._setElement = function (el) { + if (this.el || el !== this.pWidget.node) { + // Boxes don't allow setting the element beyond the initial creation. + throw new Error('Cannot reset the DOM element.'); + } + this.el = this.pWidget.node; + this.$el = $$1(this.pWidget.node); + }; + ControllerView.prototype.initialize = function (parameters) { + _super.prototype.initialize.call(this, parameters); + this.button_views = new ViewList(this.add_button, null, this); + this.listenTo(this.model, 'change:buttons', function (model, value) { + this.button_views.update(value); + }); + this.axis_views = new ViewList(this.add_axis, null, this); + this.listenTo(this.model, 'change:axes', function (model, value) { + this.axis_views.update(value); + }); + this.listenTo(this.model, 'change:name', this.update_label); + }; + ControllerView.prototype.render = function () { + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-controller'); + this.label = document.createElement('div'); + this.el.appendChild(this.label); + this.axis_box = new Panel(); + this.axis_box.node.style.display = 'flex'; + this.pWidget.addWidget(this.axis_box); + this.button_box = new Panel(); + this.button_box.node.style.display = 'flex'; + this.pWidget.addWidget(this.button_box); + this.button_views.update(this.model.get('buttons')); + this.axis_views.update(this.model.get('axes')); + this.update_label(); + }; + ControllerView.prototype.update_label = function () { + this.label.textContent = this.model.get('name') || this.model.readout; + }; + ControllerView.prototype.add_button = function (model) { + var _this = this; + // we insert a dummy element so the order is preserved when we add + // the rendered content later. + var dummy = new Widget(); + this.button_box.addWidget(dummy); + return this.create_child_view(model).then(function (view) { + // replace the dummy widget with the new one. + var i = ArrayExt.firstIndexOf(_this.button_box.widgets, dummy); + _this.button_box.insertWidget(i, view.pWidget); + dummy.dispose(); + return view; + }).catch(reject$2('Could not add child button view to controller', true)); + }; + ControllerView.prototype.add_axis = function (model) { + var _this = this; + // we insert a dummy element so the order is preserved when we add + // the rendered content later. + var dummy = new Widget(); + this.axis_box.addWidget(dummy); + return this.create_child_view(model).then(function (view) { + // replace the dummy widget with the new one. + var i = ArrayExt.firstIndexOf(_this.axis_box.widgets, dummy); + _this.axis_box.insertWidget(i, view.pWidget); + dummy.dispose(); + return view; + }).catch(reject$2('Could not add child axis view to controller', true)); + }; + ControllerView.prototype.remove = function () { + _super.prototype.remove.call(this); + this.button_views.remove(); + this.axis_views.remove(); + }; + return ControllerView; + }(DOMWidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$n = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$e = (undefined && undefined.__assign) || function () { + __assign$e = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$e.apply(this, arguments); + }; + var SelectionModel = /** @class */ (function (_super) { + __extends$n(SelectionModel, _super); + function SelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + SelectionModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'SelectionModel', index: '', _options_labels: [], disabled: false }); + }; + return SelectionModel; + }(CoreDescriptionModel)); + var DropdownModel = /** @class */ (function (_super) { + __extends$n(DropdownModel, _super); + function DropdownModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + DropdownModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'DropdownModel', _view_name: 'DropdownView', button_style: '' }); + }; + return DropdownModel; + }(SelectionModel)); + // TODO: Make a phosphor dropdown control, wrapped in DropdownView. Also, fix + // bugs in keyboard handling. See + // https://github.com/jupyter-widgets/ipywidgets/issues/1055 and + // https://github.com/jupyter-widgets/ipywidgets/issues/1049 + // For now, we subclass SelectView to provide DropdownView + // For the old code, see commit f68bfbc566f3a78a8f3350b438db8ed523ce3642 + var DropdownView = /** @class */ (function (_super) { + __extends$n(DropdownView, _super); + function DropdownView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor. + */ + DropdownView.prototype.initialize = function (parameters) { + var _this = this; + _super.prototype.initialize.call(this, parameters); + this.listenTo(this.model, 'change:_options_labels', function () { return _this._updateOptions(); }); + }; + /** + * Called when view is rendered. + */ + DropdownView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-dropdown'); + this.listbox = document.createElement('select'); + this.listbox.id = this.label.htmlFor = uuid(); + this.el.appendChild(this.listbox); + this._updateOptions(); + this.update(); + }; + /** + * Update the contents of this view + */ + DropdownView.prototype.update = function () { + // Disable listbox if needed + this.listbox.disabled = this.model.get('disabled'); + // Select the correct element + var index = this.model.get('index'); + this.listbox.selectedIndex = index === null ? -1 : index; + return _super.prototype.update.call(this); + }; + DropdownView.prototype._updateOptions = function () { + this.listbox.textContent = ''; + var items = this.model.get('_options_labels'); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var option = document.createElement('option'); + option.textContent = item.replace(/ /g, '\xa0'); // space ->   + option.setAttribute('data-value', encodeURIComponent(item)); + option.value = item; + this.listbox.appendChild(option); + } + }; + DropdownView.prototype.events = function () { + return { + 'change select': '_handle_change' + }; + }; + /** + * Handle when a new value is selected. + */ + DropdownView.prototype._handle_change = function () { + this.model.set('index', this.listbox.selectedIndex === -1 ? null : this.listbox.selectedIndex); + this.touch(); + }; + return DropdownView; + }(DescriptionView)); + var SelectModel = /** @class */ (function (_super) { + __extends$n(SelectModel, _super); + function SelectModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + SelectModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'SelectModel', _view_name: 'SelectView', rows: 5 }); + }; + return SelectModel; + }(SelectionModel)); + var SelectView = /** @class */ (function (_super) { + __extends$n(SelectView, _super); + function SelectView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor. + */ + SelectView.prototype.initialize = function (parameters) { + var _this = this; + _super.prototype.initialize.call(this, parameters); + this.listenTo(this.model, 'change:_options_labels', function () { return _this._updateOptions(); }); + this.listenTo(this.model, 'change:index', function (model, value, options) { return _this.updateSelection(options); }); + // Create listbox here so that subclasses can modify it before it is populated in render() + this.listbox = document.createElement('select'); + }; + /** + * Called when view is rendered. + */ + SelectView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-select'); + this.listbox.id = this.label.htmlFor = uuid(); + this.el.appendChild(this.listbox); + this._updateOptions(); + this.update(); + this.updateSelection(); + }; + /** + * Update the contents of this view + */ + SelectView.prototype.update = function () { + _super.prototype.update.call(this); + this.listbox.disabled = this.model.get('disabled'); + var rows = this.model.get('rows'); + if (rows === null) { + rows = ''; + } + this.listbox.setAttribute('size', rows); + }; + SelectView.prototype.updateSelection = function (options) { + if (options === void 0) { options = {}; } + if (options.updated_view === this) { + return; + } + var index = this.model.get('index'); + this.listbox.selectedIndex = index === null ? -1 : index; + }; + SelectView.prototype._updateOptions = function () { + this.listbox.textContent = ''; + var items = this.model.get('_options_labels'); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var option = document.createElement('option'); + option.textContent = item.replace(/ /g, '\xa0'); // space ->   + option.setAttribute('data-value', encodeURIComponent(item)); + option.value = item; + this.listbox.appendChild(option); + } + }; + SelectView.prototype.events = function () { + return { + 'change select': '_handle_change' + }; + }; + /** + * Handle when a new value is selected. + */ + SelectView.prototype._handle_change = function () { + this.model.set('index', this.listbox.selectedIndex, { updated_view: this }); + this.touch(); + }; + return SelectView; + }(DescriptionView)); + var RadioButtonsModel = /** @class */ (function (_super) { + __extends$n(RadioButtonsModel, _super); + function RadioButtonsModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + RadioButtonsModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'RadioButtonsModel', _view_name: 'RadioButtonsView', tooltips: [], icons: [], button_style: '' }); + }; + return RadioButtonsModel; + }(SelectionModel)); + var RadioButtonsView = /** @class */ (function (_super) { + __extends$n(RadioButtonsView, _super); + function RadioButtonsView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + RadioButtonsView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-radio'); + this.container = document.createElement('div'); + this.el.appendChild(this.container); + this.container.classList.add('widget-radio-box'); + this.update(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + RadioButtonsView.prototype.update = function (options) { + var view = this; + var items = this.model.get('_options_labels'); + var radios = pluck(this.container.querySelectorAll('input[type="radio"]'), 'value'); + var stale = items.length != radios.length; + if (!stale) { + for (var i = 0, len = items.length; i < len; ++i) { + if (radios[i] !== items[i]) { + stale = true; + break; + } + } + } + if (stale && (options === undefined || options.updated_view !== this)) { + // Add items to the DOM. + this.container.textContent = ''; + items.forEach(function (item, index) { + var label = document.createElement('label'); + label.textContent = item; + view.container.appendChild(label); + var radio = document.createElement('input'); + radio.setAttribute('type', 'radio'); + radio.value = index.toString(); + radio.setAttribute('data-value', encodeURIComponent(item)); + label.appendChild(radio); + }); + } + items.forEach(function (item, index) { + var item_query = 'input[data-value="' + + encodeURIComponent(item) + '"]'; + var radio = view.container.querySelectorAll(item_query); + if (radio.length > 0) { + var radio_el = radio[0]; + radio_el.checked = view.model.get('index') === index; + radio_el.disabled = view.model.get('disabled'); + } + }); + // Schedule adjustPadding asynchronously to + // allow dom elements to be created properly + setTimeout(this.adjustPadding, 0, this); + return _super.prototype.update.call(this, options); + }; + /** + * Adjust Padding to Multiple of Line Height + * + * Adjust margins so that the overall height + * is a multiple of a single line height. + * + * This widget needs it because radio options + * are spaced tighter than individual widgets + * yet we would like the full widget line up properly + * when displayed side-by-side with other widgets. + */ + RadioButtonsView.prototype.adjustPadding = function (e) { + // Vertical margins on a widget + var elStyles = window.getComputedStyle(e.el); + var margins = parseInt(elStyles.marginTop, 10) + parseInt(elStyles.marginBottom, 10); + // Total spaces taken by a single-line widget + var lineHeight = e.label.offsetHeight + margins; + // Current adjustment value on this widget + var cStyles = window.getComputedStyle(e.container); + var containerMargin = parseInt(cStyles.marginBottom); + // How far we are off from a multiple of single windget lines + var diff = (e.el.offsetHeight + margins - containerMargin) % lineHeight; + // Apply the new adjustment + var extraMargin = diff == 0 ? 0 : (lineHeight - diff); + e.container.style.marginBottom = extraMargin + 'px'; + }; + RadioButtonsView.prototype.events = function () { + return { + 'click input[type="radio"]': '_handle_click' + }; + }; + /** + * Handle when a value is clicked. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + RadioButtonsView.prototype._handle_click = function (event) { + var target = event.target; + this.model.set('index', parseInt(target.value), { updated_view: this }); + this.touch(); + }; + return RadioButtonsView; + }(DescriptionView)); + var ToggleButtonsStyleModel = /** @class */ (function (_super) { + __extends$n(ToggleButtonsStyleModel, _super); + function ToggleButtonsStyleModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ToggleButtonsStyleModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'ToggleButtonsStyleModel', + }); + }; + ToggleButtonsStyleModel.styleProperties = __assign$e(__assign$e({}, DescriptionStyleModel.styleProperties), { button_width: { + selector: '.widget-toggle-button', + attribute: 'width', + default: null + }, font_weight: { + selector: '.widget-toggle-button', + attribute: 'font-weight', + default: '' + } }); + return ToggleButtonsStyleModel; + }(DescriptionStyleModel)); + var ToggleButtonsModel = /** @class */ (function (_super) { + __extends$n(ToggleButtonsModel, _super); + function ToggleButtonsModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ToggleButtonsModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'ToggleButtonsModel', _view_name: 'ToggleButtonsView' }); + }; + return ToggleButtonsModel; + }(SelectionModel)); + var ToggleButtonsView = /** @class */ (function (_super) { + __extends$n(ToggleButtonsView, _super); + function ToggleButtonsView() { + return _super !== null && _super.apply(this, arguments) || this; + } + ToggleButtonsView.prototype.initialize = function (options) { + this._css_state = {}; + _super.prototype.initialize.call(this, options); + this.listenTo(this.model, 'change:button_style', this.update_button_style); + }; + /** + * Called when view is rendered. + */ + ToggleButtonsView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-toggle-buttons'); + this.buttongroup = document.createElement('div'); + this.el.appendChild(this.buttongroup); + this.update(); + this.set_button_style(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + ToggleButtonsView.prototype.update = function (options) { + var view = this; + var items = this.model.get('_options_labels'); + var icons = this.model.get('icons') || []; + var previous_icons = this.model.previous('icons') || []; + var previous_bstyle = ToggleButtonsView.classMap[this.model.previous('button_style')] || ''; + var tooltips = view.model.get('tooltips') || []; + var disabled = this.model.get('disabled'); + var buttons = this.buttongroup.querySelectorAll('button'); + var values = pluck(buttons, 'value'); + var stale = false; + for (var i = 0, len = items.length; i < len; ++i) { + if (values[i] !== items[i] || icons[i] !== previous_icons[i]) { + stale = true; + break; + } + } + if (stale && (options === undefined || options.updated_view !== this)) { + // Add items to the DOM. + this.buttongroup.textContent = ''; + items.forEach(function (item, index) { + var item_html; + var empty = item.trim().length === 0 && + (!icons[index] || icons[index].trim().length === 0); + if (empty) { + item_html = ' '; + } + else { + item_html = escape_html(item); + } + var icon = document.createElement('i'); + var button = document.createElement('button'); + if (icons[index]) { + icon.className = 'fa fa-' + icons[index]; + } + button.setAttribute('type', 'button'); + button.className = 'widget-toggle-button jupyter-button'; + if (previous_bstyle) { + button.classList.add(previous_bstyle); + } + button.innerHTML = item_html; + button.setAttribute('data-value', encodeURIComponent(item)); + button.setAttribute('value', index.toString()); + button.appendChild(icon); + button.disabled = disabled; + if (tooltips[index]) { + button.setAttribute('title', tooltips[index]); + } + view.update_style_traits(button); + view.buttongroup.appendChild(button); + }); + } + // Select active button. + items.forEach(function (item, index) { + var item_query = '[data-value="' + encodeURIComponent(item) + '"]'; + var button = view.buttongroup.querySelector(item_query); + if (view.model.get('index') === index) { + button.classList.add('mod-active'); + } + else { + button.classList.remove('mod-active'); + } + }); + this.stylePromise.then(function (style) { + if (style) { + style.style(); + } + }); + return _super.prototype.update.call(this, options); + }; + ToggleButtonsView.prototype.update_style_traits = function (button) { + for (var name_1 in this._css_state) { + if (this._css_state.hasOwnProperty(name_1)) { + if (name_1 === 'margin') { + this.buttongroup.style[name_1] = this._css_state[name_1]; + } + else if (name_1 !== 'width') { + if (button) { + button.style[name_1] = this._css_state[name_1]; + } + else { + var buttons = this.buttongroup + .querySelectorAll('button'); + if (buttons.length) { + (buttons[0]).style[name_1] = this._css_state[name_1]; + } + } + } + } + } + }; + ToggleButtonsView.prototype.update_button_style = function () { + var buttons = this.buttongroup.querySelectorAll('button'); + for (var i = 0; i < buttons.length; i++) { + this.update_mapped_classes(ToggleButtonsView.classMap, 'button_style', buttons[i]); + } + }; + ToggleButtonsView.prototype.set_button_style = function () { + var buttons = this.buttongroup.querySelectorAll('button'); + for (var i = 0; i < buttons.length; i++) { + this.set_mapped_classes(ToggleButtonsView.classMap, 'button_style', buttons[i]); + } + }; + ToggleButtonsView.prototype.events = function () { + return { + 'click button': '_handle_click' + }; + }; + /** + * Handle when a value is clicked. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + ToggleButtonsView.prototype._handle_click = function (event) { + var target = event.target; + this.model.set('index', parseInt(target.value, 10), { updated_view: this }); + this.touch(); + // We also send a clicked event, since the value is only set if it changed. + // See https://github.com/jupyter-widgets/ipywidgets/issues/763 + this.send({ event: 'click' }); + }; + return ToggleButtonsView; + }(DescriptionView)); + (function (ToggleButtonsView) { + ToggleButtonsView.classMap = { + primary: ['mod-primary'], + success: ['mod-success'], + info: ['mod-info'], + warning: ['mod-warning'], + danger: ['mod-danger'] + }; + })(ToggleButtonsView || (ToggleButtonsView = {})); + var SelectionSliderModel = /** @class */ (function (_super) { + __extends$n(SelectionSliderModel, _super); + function SelectionSliderModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + SelectionSliderModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'SelectionSliderModel', _view_name: 'SelectionSliderView', orientation: 'horizontal', readout: true, continuous_update: true }); + }; + return SelectionSliderModel; + }(SelectionModel)); + var SelectionSliderView = /** @class */ (function (_super) { + __extends$n(SelectionSliderView, _super); + function SelectionSliderView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + SelectionSliderView.prototype.render = function () { + var _this = this; + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-hslider'); + this.el.classList.add('widget-slider'); + (this.$slider = $$1('
    ')) + .slider({ + slide: this.handleSliderChange.bind(this), + stop: this.handleSliderChanged.bind(this) + }) + .addClass('slider'); + // Put the slider in a container + this.slider_container = document.createElement('div'); + this.slider_container.classList.add('slider-container'); + this.slider_container.appendChild(this.$slider[0]); + this.el.appendChild(this.slider_container); + this.readout = document.createElement('div'); + this.el.appendChild(this.readout); + this.readout.classList.add('widget-readout'); + this.readout.style.display = 'none'; + this.listenTo(this.model, 'change:slider_color', function (sender, value) { + _this.$slider.find('a').css('background', value); + }); + this.$slider.find('a').css('background', this.model.get('slider_color')); + // Set defaults. + this.update(); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + SelectionSliderView.prototype.update = function (options) { + if (options === undefined || options.updated_view !== this) { + var labels = this.model.get('_options_labels'); + var max = labels.length - 1; + var min = 0; + this.$slider.slider('option', 'step', 1); + this.$slider.slider('option', 'max', max); + this.$slider.slider('option', 'min', min); + // WORKAROUND FOR JQUERY SLIDER BUG. + // The horizontal position of the slider handle + // depends on the value of the slider at the time + // of orientation change. Before applying the new + // workaround, we set the value to the minimum to + // make sure that the horizontal placement of the + // handle in the vertical slider is always + // consistent. + var orientation_1 = this.model.get('orientation'); + this.$slider.slider('option', 'value', min); + this.$slider.slider('option', 'orientation', orientation_1); + var disabled = this.model.get('disabled'); + this.$slider.slider('option', 'disabled', disabled); + if (disabled) { + this.readout.contentEditable = 'false'; + } + else { + this.readout.contentEditable = 'true'; + } + // Use the right CSS classes for vertical & horizontal sliders + if (orientation_1 === 'vertical') { + this.el.classList.remove('widget-hslider'); + this.el.classList.remove('widget-inline-hbox'); + this.el.classList.add('widget-vslider'); + this.el.classList.add('widget-inline-vbox'); + } + else { + this.el.classList.remove('widget-vslider'); + this.el.classList.remove('widget-inline-vbox'); + this.el.classList.add('widget-hslider'); + this.el.classList.add('widget-inline-hbox'); + } + var readout = this.model.get('readout'); + if (readout) { + // this.$readout.show(); + this.readout.style.display = ''; + } + else { + // this.$readout.hide(); + this.readout.style.display = 'none'; + } + this.updateSelection(); + } + return _super.prototype.update.call(this, options); + }; + SelectionSliderView.prototype.events = function () { + return { + 'slide': 'handleSliderChange', + 'slidestop': 'handleSliderChanged' + }; + }; + SelectionSliderView.prototype.updateSelection = function () { + var index = this.model.get('index'); + this.$slider.slider('option', 'value', index); + this.updateReadout(index); + }; + SelectionSliderView.prototype.updateReadout = function (index) { + var value = this.model.get('_options_labels')[index]; + this.readout.textContent = value; + }; + /** + * Called when the slider value is changing. + */ + SelectionSliderView.prototype.handleSliderChange = function (e, ui) { + this.updateReadout(ui.value); + // Only persist the value while sliding if the continuous_update + // trait is set to true. + if (this.model.get('continuous_update')) { + this.handleSliderChanged(e, ui); + } + }; + /** + * Called when the slider value has changed. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + SelectionSliderView.prototype.handleSliderChanged = function (e, ui) { + this.updateReadout(ui.value); + this.model.set('index', ui.value, { updated_view: this }); + this.touch(); + }; + return SelectionSliderView; + }(DescriptionView)); + var MultipleSelectionModel = /** @class */ (function (_super) { + __extends$n(MultipleSelectionModel, _super); + function MultipleSelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + MultipleSelectionModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'MultipleSelectionModel' }); + }; + return MultipleSelectionModel; + }(SelectionModel)); + var SelectMultipleModel = /** @class */ (function (_super) { + __extends$n(SelectMultipleModel, _super); + function SelectMultipleModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + SelectMultipleModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'SelectMultipleModel', _view_name: 'SelectMultipleView', rows: null }); + }; + return SelectMultipleModel; + }(MultipleSelectionModel)); + var SelectMultipleView = /** @class */ (function (_super) { + __extends$n(SelectMultipleView, _super); + function SelectMultipleView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Public constructor. + */ + SelectMultipleView.prototype.initialize = function (parameters) { + _super.prototype.initialize.call(this, parameters); + this.listbox.multiple = true; + }; + /** + * Called when view is rendered. + */ + SelectMultipleView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('widget-select-multiple'); + }; + SelectMultipleView.prototype.updateSelection = function (options) { + if (options === void 0) { options = {}; } + if (options.updated_view === this) { + return; + } + var selected = this.model.get('index') || []; + var listboxOptions = this.listbox.options; + // Clear the selection + this.listbox.selectedIndex = -1; + // Select the appropriate options + selected.forEach(function (i) { + listboxOptions[i].selected = true; + }); + }; + /** + * Handle when a new value is selected. + */ + SelectMultipleView.prototype._handle_change = function () { + var index = Array.prototype.map + .call(this.listbox.selectedOptions || [], function (option) { + return option.index; + }); + this.model.set('index', index, { updated_view: this }); + this.touch(); + }; + return SelectMultipleView; + }(SelectView)); + var SelectionRangeSliderModel = /** @class */ (function (_super) { + __extends$n(SelectionRangeSliderModel, _super); + function SelectionRangeSliderModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + SelectionRangeSliderModel.prototype.defaults = function () { + return __assign$e(__assign$e({}, _super.prototype.defaults.call(this)), { _model_name: 'SelectionSliderModel', _view_name: 'SelectionSliderView', orientation: 'horizontal', readout: true, continuous_update: true }); + }; + return SelectionRangeSliderModel; + }(MultipleSelectionModel)); + var SelectionRangeSliderView = /** @class */ (function (_super) { + __extends$n(SelectionRangeSliderView, _super); + function SelectionRangeSliderView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + SelectionRangeSliderView.prototype.render = function () { + _super.prototype.render.call(this); + this.$slider.slider('option', 'range', true); + }; + SelectionRangeSliderView.prototype.updateSelection = function () { + var index = this.model.get('index'); + this.$slider.slider('option', 'values', index.slice()); + this.updateReadout(index); + }; + SelectionRangeSliderView.prototype.updateReadout = function (index) { + var labels = this.model.get('_options_labels'); + var minValue = labels[index[0]]; + var maxValue = labels[index[1]]; + this.readout.textContent = minValue + "-" + maxValue; + }; + /** + * Called when the slider value is changing. + */ + SelectionRangeSliderView.prototype.handleSliderChange = function (e, ui) { + this.updateReadout(ui.values); + // Only persist the value while sliding if the continuous_update + // trait is set to true. + if (this.model.get('continuous_update')) { + this.handleSliderChanged(e, ui); + } + }; + /** + * Called when the slider value has changed. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + SelectionRangeSliderView.prototype.handleSliderChanged = function (e, ui) { + // The jqueryui documentation indicates ui.values doesn't exist on the slidestop event, + // but it appears that it actually does: https://github.com/jquery/jquery-ui/blob/ae31f2b3b478975f70526bdf3299464b9afa8bb1/ui/widgets/slider.js#L313 + this.updateReadout(ui.values); + this.model.set('index', ui.values.slice(), { updated_view: this }); + this.touch(); + }; + return SelectionRangeSliderView; + }(SelectionSliderView)); + + /* This file has code derived from PhosphorJS. The license for this PhosphorJS code is: + + Copyright (c) 2014-2017, PhosphorJS Contributors + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + */ + var __extends$o = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + /** + * A panel where visible widgets are stacked atop one another. + * + * #### Notes + * This class provides a convenience wrapper around a [[PanelLayout]]. + */ + var EventedPanel = /** @class */ (function (_super) { + __extends$o(EventedPanel, _super); + function EventedPanel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._widgetRemoved = new Signal(_this); + return _this; + } + Object.defineProperty(EventedPanel.prototype, "widgetRemoved", { + /** + * A signal emitted when a widget is removed from the panel. + */ + get: function () { + return this._widgetRemoved; + }, + enumerable: true, + configurable: true + }); + /** + * A message handler invoked on a `'child-removed'` message. + */ + EventedPanel.prototype.onChildRemoved = function (msg) { + this._widgetRemoved.emit(msg.child); + }; + return EventedPanel; + }(Panel)); + /** + * A widget which combines a `TabBar` and a `EventedPanel`. + * + * #### Notes + * This is a simple panel which handles the common case of a tab bar + * placed next to a content area. The selected tab controls the widget + * which is shown in the content area. + * + * For use cases which require more control than is provided by this + * panel, the `TabBar` widget may be used independently. + * + * TODO: Support setting the direction?? + */ + var TabPanel$1 = /** @class */ (function (_super) { + __extends$o(TabPanel, _super); + /** + * Construct a new tab panel. + * + * @param options - The options for initializing the tab panel. + */ + function TabPanel(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this) || this; + _this._currentChanged = new Signal(_this); + _this.addClass('p-TabPanel'); + // Create the tab bar and contents panel. + _this.tabBar = new TabBar(options); + _this.tabBar.addClass('p-TabPanel-tabBar'); + _this.tabContents = new EventedPanel(); + _this.tabContents.addClass('p-TabPanel-tabContents'); + // Connect the tab bar signal handlers. + _this.tabBar.tabMoved.connect(_this._onTabMoved, _this); + _this.tabBar.currentChanged.connect(_this._onCurrentChanged, _this); + _this.tabBar.tabCloseRequested.connect(_this._onTabCloseRequested, _this); + _this.tabBar.tabActivateRequested.connect(_this._onTabActivateRequested, _this); + // Connect the evented panel signal handlers. + _this.tabContents.widgetRemoved.connect(_this._onWidgetRemoved, _this); + // Create the layout. + var layout = new PanelLayout(); + // Add the child widgets to the layout. + layout.addWidget(_this.tabBar); + layout.addWidget(_this.tabContents); + // Install the layout on the tab panel. + _this.layout = layout; + return _this; + } + Object.defineProperty(TabPanel.prototype, "currentChanged", { + /** + * A signal emitted when the current tab is changed. + * + * #### Notes + * This signal is emitted when the currently selected tab is changed + * either through user or programmatic interaction. + * + * Notably, this signal is not emitted when the index of the current + * tab changes due to tabs being inserted, removed, or moved. It is + * only emitted when the actual current tab node is changed. + */ + get: function () { + return this._currentChanged; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "currentIndex", { + /** + * Get the index of the currently selected tab. + * + * #### Notes + * This will be `null` if no tab is selected. + */ + get: function () { + var currentIndex = this.tabBar.currentIndex; + // Phosphor tab bars have an index of -1 if no tab is selected + return (currentIndex === -1 ? null : currentIndex); + }, + /** + * Set the index of the currently selected tab. + * + * #### Notes + * If the index is out of range, it will be set to `null`. + */ + set: function (value) { + this.tabBar.currentIndex = (value === null ? -1 : value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "currentWidget", { + /** + * Get the currently selected widget. + * + * #### Notes + * This will be `null` if there is no selected tab. + */ + get: function () { + var title = this.tabBar.currentTitle; + return title ? title.owner : null; + }, + /** + * Set the currently selected widget. + * + * #### Notes + * If the widget is not in the panel, it will be set to `null`. + */ + set: function (value) { + this.tabBar.currentTitle = value ? value.title : null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "tabsMovable", { + /** + * Get the whether the tabs are movable by the user. + * + * #### Notes + * Tabs can always be moved programmatically. + */ + get: function () { + return this.tabBar.tabsMovable; + }, + /** + * Set the whether the tabs are movable by the user. + * + * #### Notes + * Tabs can always be moved programmatically. + */ + set: function (value) { + this.tabBar.tabsMovable = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TabPanel.prototype, "widgets", { + /** + * A read-only array of the widgets in the panel. + */ + get: function () { + return this.tabContents.widgets; + }, + enumerable: true, + configurable: true + }); + /** + * Add a widget to the end of the tab panel. + * + * @param widget - The widget to add to the tab panel. + * + * #### Notes + * If the widget is already contained in the panel, it will be moved. + * + * The widget's `title` is used to populate the tab. + */ + TabPanel.prototype.addWidget = function (widget) { + this.insertWidget(this.widgets.length, widget); + }; + /** + * Insert a widget into the tab panel at a specified index. + * + * @param index - The index at which to insert the widget. + * + * @param widget - The widget to insert into to the tab panel. + * + * #### Notes + * If the widget is already contained in the panel, it will be moved. + * + * The widget's `title` is used to populate the tab. + */ + TabPanel.prototype.insertWidget = function (index, widget) { + if (widget !== this.currentWidget) { + widget.hide(); + } + this.tabContents.insertWidget(index, widget); + this.tabBar.insertTab(index, widget.title); + }; + /** + * Handle the `currentChanged` signal from the tab bar. + */ + TabPanel.prototype._onCurrentChanged = function (sender, args) { + // Extract the previous and current title from the args. + var previousIndex = args.previousIndex, previousTitle = args.previousTitle, currentIndex = args.currentIndex, currentTitle = args.currentTitle; + // Extract the widgets from the titles. + var previousWidget = previousTitle ? previousTitle.owner : null; + var currentWidget = currentTitle ? currentTitle.owner : null; + // Hide the previous widget. + if (previousWidget) { + previousWidget.hide(); + } + // Show the current widget. + if (currentWidget) { + currentWidget.show(); + } + // Emit the `currentChanged` signal for the tab panel. + this._currentChanged.emit({ + previousIndex: previousIndex, previousWidget: previousWidget, currentIndex: currentIndex, currentWidget: currentWidget + }); + // Flush the message loop on IE and Edge to prevent flicker. + if (Platform.IS_EDGE || Platform.IS_IE) { + MessageLoop.flush(); + } + }; + /** + * Handle the `tabActivateRequested` signal from the tab bar. + */ + TabPanel.prototype._onTabActivateRequested = function (sender, args) { + args.title.owner.activate(); + }; + /** + * Handle the `tabCloseRequested` signal from the tab bar. + */ + TabPanel.prototype._onTabCloseRequested = function (sender, args) { + args.title.owner.close(); + }; + /** + * Handle the `tabMoved` signal from the tab bar. + */ + TabPanel.prototype._onTabMoved = function (sender, args) { + this.tabContents.insertWidget(args.toIndex, args.title.owner); + }; + /** + * Handle the `widgetRemoved` signal from the stacked panel. + */ + TabPanel.prototype._onWidgetRemoved = function (sender, widget) { + this.tabBar.removeTab(widget.title); + }; + return TabPanel; + }(Widget)); + + // Copyright (c) Jupyter Development Team. + var Selection = /** @class */ (function () { + function Selection(sequence, options) { + if (options === void 0) { options = {}; } + this._array = null; + this._value = null; + this._previousValue = null; + this._selectionChanged = new Signal(this); + this._array = sequence; + this._insertBehavior = options.insertBehavior || 'select-item-if-needed'; + this._removeBehavior = options.removeBehavior || 'select-item-after'; + } + Object.defineProperty(Selection.prototype, "selectionChanged", { + /** + * A signal emitted when the current item is changed. + * + * #### Notes + * This signal is emitted when the currently selected item is changed either + * through user or programmatic interaction. + * + * Notably, this signal is not emitted when the index of the current item + * changes due to other items being inserted, removed, or moved, but the + * current item remains the same. It is only emitted when the actual current + * item is changed. + */ + get: function () { + return this._selectionChanged; + }, + enumerable: true, + configurable: true + }); + /** + * Adjust for setting an item. + * + * This should be called *after* the set. + * + * @param index - The index set. + * @param oldValue - The old value at the index. + */ + Selection.prototype.adjustSelectionForSet = function (index) { + // We just need to send a signal if the currentValue changed. + // Get the current index and value. + var pi = this.index; + var pv = this.value; + // Exit early if this doesn't affect the selection + if (index !== pi) { + return; + } + this._updateSelectedValue(); + var cv = this.value; + // The previous item is now null, since it is no longer in the array. + this._previousValue = null; + // Send signal if there was a change + if (pv !== cv) { + // Emit the current changed signal. + this._selectionChanged.emit({ + previousIndex: pi, previousValue: pv, + currentIndex: pi, currentValue: cv + }); + } + }; + Object.defineProperty(Selection.prototype, "value", { + /** + * Get the currently selected item. + * + * #### Notes + * This will be `null` if no item is selected. + */ + get: function () { + return this._value; + }, + /** + * Set the currently selected item. + * + * #### Notes + * If the item does not exist in the vector, the currentValue will be set to + * `null`. This selects the first entry equal to the desired item. + */ + set: function (value) { + if (value === null) { + this.index = null; + } + else { + this.index = ArrayExt.firstIndexOf(this._array, value); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Selection.prototype, "index", { + /** + * Get the index of the currently selected item. + * + * #### Notes + * This will be `null` if no item is selected. + */ + get: function () { + return this._index; + }, + /** + * Set the index of the currently selected tab. + * + * @param index - The index to select. + * + * #### Notes + * If the value is out of range, the index will be set to `null`, which + * indicates no item is selected. + */ + set: function (index) { + // Coerce the value to an index. + var i; + if (index !== null) { + i = Math.floor(index); + if (i < 0 || i >= this._array.length) { + i = null; + } + } + else { + i = null; + } + // Bail early if the index will not change. + if (this._index === i) { + return; + } + // Look up the previous index and item. + var pi = this._index; + var pv = this._value; + // Update the state + this._index = i; + this._updateSelectedValue(); + this._previousValue = pv; + // Emit the current changed signal. + this._selectionChanged.emit({ + previousIndex: pi, previousValue: pv, + currentIndex: i, currentValue: this._value + }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Selection.prototype, "insertBehavior", { + /** + * Get the selection behavior when inserting a tab. + */ + get: function () { + return this._insertBehavior; + }, + /** + * Set the selection behavior when inserting a tab. + */ + set: function (value) { + this._insertBehavior = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Selection.prototype, "removeBehavior", { + /** + * Get the selection behavior when removing a tab. + */ + get: function () { + return this._removeBehavior; + }, + /** + * Set the selection behavior when removing a tab. + */ + set: function (value) { + this._removeBehavior = value; + }, + enumerable: true, + configurable: true + }); + /** + * Adjust the current index for a tab insert operation. + * + * @param i - The new index of the inserted item. + * @param j - The inserted item. + * + * #### Notes + * This method accounts for the tab bar's insertion behavior when adjusting + * the current index and emitting the changed signal. This should be called + * after the insertion. + */ + Selection.prototype.adjustSelectionForInsert = function (i, item) { + // Lookup commonly used variables. + var cv = this._value; + var ci = this._index; + var bh = this._insertBehavior; + // Handle the behavior where the new item is always selected, + // or the behavior where the new item is selected if needed. + if (bh === 'select-item' || (bh === 'select-item-if-needed' && ci === null)) { + this._index = i; + this._value = item; + this._previousValue = cv; + this._selectionChanged.emit({ + previousIndex: ci, previousValue: cv, + currentIndex: i, currentValue: item + }); + return; + } + // Otherwise, silently adjust the current index if needed. + if (ci >= i) { + this._index++; + } + }; + /** + * Adjust the current index for move operation. + * + * @param i - The previous index of the item. + * @param j - The new index of the item. + * + * #### Notes + * This method will not cause the actual current item to change. It silently + * adjusts the current index to account for the given move. + */ + Selection.prototype.adjustSelectionForMove = function (i, j) { + if (this._index === i) { + this._index = j; + } + else if (this._index < i && this._index >= j) { + this._index++; + } + else if (this._index > i && this._index <= j) { + this._index--; + } + }; + /** + * Clear the selection and history. + */ + Selection.prototype.clearSelection = function () { + // Get the current index and item. + var pi = this._index; + var pv = this._value; + // Reset the current index and previous item. + this._index = null; + this._value = null; + this._previousValue = null; + // If no item was selected, there's nothing else to do. + if (pi === null) { + return; + } + // Emit the current changed signal. + this._selectionChanged.emit({ + previousIndex: pi, previousValue: pv, + currentIndex: this._index, currentValue: this._value + }); + }; + /** + * Adjust the current index for an item remove operation. + * + * @param i - The former index of the removed item. + * @param item - The removed item. + * + * #### Notes + * This method accounts for the remove behavior when adjusting the current + * index and emitting the changed signal. It should be called after the item + * is removed. + */ + Selection.prototype.adjustSelectionForRemove = function (i, item) { + // Lookup commonly used variables. + var ci = this._index; + var bh = this._removeBehavior; + // Silently adjust the index if the current item is not removed. + if (ci !== i) { + if (ci > i) { + this._index--; + } + return; + } + // No item gets selected if the vector is empty. + if (this._array.length === 0) { + // Reset the current index and previous item. + this._index = null; + this._value = null; + this._previousValue = null; + this._selectionChanged.emit({ + previousIndex: i, previousValue: item, + currentIndex: this._index, currentValue: this._value + }); + return; + } + // Handle behavior where the next sibling item is selected. + if (bh === 'select-item-after') { + this._index = Math.min(i, this._array.length - 1); + this._updateSelectedValue(); + this._previousValue = null; + this._selectionChanged.emit({ + previousIndex: i, previousValue: item, + currentIndex: this._index, currentValue: this._value + }); + return; + } + // Handle behavior where the previous sibling item is selected. + if (bh === 'select-item-before') { + this._index = Math.max(0, i - 1); + this._updateSelectedValue(); + this._previousValue = null; + this._selectionChanged.emit({ + previousIndex: i, previousValue: item, + currentIndex: this._index, currentValue: this._value + }); + return; + } + // Handle behavior where the previous history item is selected. + if (bh === 'select-previous-item') { + if (this._previousValue) { + this.value = this._previousValue; + } + else { + this._index = Math.min(i, this._array.length - 1); + this._updateSelectedValue(); + } + this._previousValue = null; + this._selectionChanged.emit({ + previousIndex: i, previousValue: item, + currentIndex: this._index, currentValue: this.value + }); + return; + } + // Otherwise, no item gets selected. + this._index = null; + this._value = null; + this._previousValue = null; + this._selectionChanged.emit({ + previousIndex: i, previousValue: item, + currentIndex: this._index, currentValue: this._value + }); + }; + /** + * Set the current value based on the current index. + */ + Selection.prototype._updateSelectedValue = function () { + var i = this._index; + this._value = i !== null ? this._array[i] : null; + }; + return Selection; + }()); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$p = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + /** + * The class name added to Collapse instances. + */ + var COLLAPSE_CLASS = 'p-Collapse'; + /** + * The class name added to a Collapse's header. + */ + var COLLAPSE_HEADER_CLASS = 'p-Collapse-header'; + /** + * The class name added to a Collapse's contents. + */ + var COLLAPSE_CONTENTS_CLASS = 'p-Collapse-contents'; + /** + * The class name added to a Collapse when it is opened + */ + var COLLAPSE_CLASS_OPEN = 'p-Collapse-open'; + /** + * A panel that supports a collapsible header, made from the widget's title. + * Clicking on the title expands or contracts the widget. + */ + var Collapse = /** @class */ (function (_super) { + __extends$p(Collapse, _super); + function Collapse(options) { + var _this = _super.call(this, options) || this; + _this._collapseChanged = new Signal(_this); + _this.addClass(COLLAPSE_CLASS); + _this._header = new Widget(); + _this._header.addClass(COLLAPSE_HEADER_CLASS); + _this._header.node.addEventListener('click', _this); + // Fontawesome icon for caret + var icon = document.createElement('i'); + icon.classList.add('fa', 'fa-fw', 'fa-caret-right'); + _this._header.node.appendChild(icon); + // Label content + _this._header.node.appendChild(document.createElement('span')); + _this._content = new Panel(); + _this._content.addClass(COLLAPSE_CONTENTS_CLASS); + var layout = new PanelLayout(); + _this.layout = layout; + layout.addWidget(_this._header); + layout.addWidget(_this._content); + if (options.widget) { + _this.widget = options.widget; + } + _this.collapsed = false; + return _this; + } + Collapse.prototype.dispose = function () { + if (this.isDisposed) { + return; + } + _super.prototype.dispose.call(this); + this._header = null; + this._widget = null; + this._content = null; + }; + Object.defineProperty(Collapse.prototype, "widget", { + get: function () { + return this._widget; + }, + set: function (widget) { + var oldWidget = this._widget; + if (oldWidget) { + oldWidget.disposed.disconnect(this._onChildDisposed, this); + oldWidget.title.changed.disconnect(this._onTitleChanged, this); + oldWidget.parent = null; + } + this._widget = widget; + widget.disposed.connect(this._onChildDisposed, this); + widget.title.changed.connect(this._onTitleChanged, this); + this._onTitleChanged(widget.title); + this._content.addWidget(widget); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Collapse.prototype, "collapsed", { + get: function () { + return this._collapsed; + }, + set: function (value) { + // TODO: should we have this check here? + if (value === this._collapsed) { + return; + } + if (value) { + this._collapse(); + } + else { + this._uncollapse(); + } + }, + enumerable: true, + configurable: true + }); + Collapse.prototype.toggle = function () { + this.collapsed = !this.collapsed; + }; + Object.defineProperty(Collapse.prototype, "collapseChanged", { + get: function () { + return this._collapseChanged; + }, + enumerable: true, + configurable: true + }); + Collapse.prototype._collapse = function () { + this._collapsed = true; + if (this._content) { + this._content.hide(); + } + this.removeClass(COLLAPSE_CLASS_OPEN); + this._header.node.children[0].classList.add('fa-caret-right'); + this._header.node.children[0].classList.remove('fa-caret-down'); + this._collapseChanged.emit(void 0); + }; + Collapse.prototype._uncollapse = function () { + this._collapsed = false; + if (this._content) { + this._content.show(); + } + this.addClass(COLLAPSE_CLASS_OPEN); + this._header.node.children[0].classList.add('fa-caret-down'); + this._header.node.children[0].classList.remove('fa-caret-right'); + this._collapseChanged.emit(void 0); + }; + /** + * Handle the DOM events for the Collapse widget. + * + * @param event - The DOM event sent to the panel. + * + * #### Notes + * This method implements the DOM `EventListener` interface and is + * called in response to events on the panel's DOM node. It should + * not be called directly by user code. + */ + Collapse.prototype.handleEvent = function (event) { + switch (event.type) { + case 'click': + this._evtClick(event); + break; + default: + break; + } + }; + Collapse.prototype._evtClick = function (event) { + this.toggle(); + }; + /** + * Handle the `changed` signal of a title object. + */ + Collapse.prototype._onTitleChanged = function (sender) { + this._header.node.children[1].textContent = this._widget.title.label; + }; + Collapse.prototype._onChildDisposed = function (sender) { + this.dispose(); + }; + return Collapse; + }(Widget)); + /** + * The class name added to Accordion instances. + */ + var ACCORDION_CLASS = 'p-Accordion'; + /** + * The class name added to an Accordion child. + */ + var ACCORDION_CHILD_CLASS = 'p-Accordion-child'; + var ACCORDION_CHILD_ACTIVE_CLASS = 'p-Accordion-child-active'; + /** + * A panel that supports a collapsible header, made from the widget's title. + * Clicking on the title expands or contracts the widget. + */ + var Accordion = /** @class */ (function (_super) { + __extends$p(Accordion, _super); + function Accordion(options) { + var _this = _super.call(this, options) || this; + _this._selection = new Selection(_this.widgets); + _this._selection.selectionChanged.connect(_this._onSelectionChanged, _this); + _this.addClass(ACCORDION_CLASS); + return _this; + } + Object.defineProperty(Accordion.prototype, "collapseWidgets", { + /** + * A read-only sequence of the widgets in the panel. + * + * #### Notes + * This is a read-only property. + */ + /* get widgets(): ISequence { + return new ArraySequence(toArray(map((this.layout as PanelLayout).widgets, (w: Collapse) => w.widget))); + } + */ + get: function () { + return this.layout.widgets; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Accordion.prototype, "selection", { + get: function () { + return this._selection; + }, + enumerable: true, + configurable: true + }); + Accordion.prototype.indexOf = function (widget) { + return ArrayExt.findFirstIndex(this.collapseWidgets, function (w) { return w.widget === widget; }); + }; + /** + * Add a widget to the end of the accordion. + * + * @param widget - The widget to add to the accordion. + * + * @returns The Collapse widget wrapping the added widget. + * + * #### Notes + * The widget will be wrapped in a CollapsedWidget. + */ + Accordion.prototype.addWidget = function (widget) { + var collapse = this._wrapWidget(widget); + collapse.collapsed = true; + _super.prototype.addWidget.call(this, collapse); + this._selection.adjustSelectionForInsert(this.widgets.length - 1, collapse); + return collapse; + }; + /** + * Insert a widget at the specified index. + * + * @param index - The index at which to insert the widget. + * + * @param widget - The widget to insert into to the accordion. + * + * #### Notes + * If the widget is already contained in the panel, it will be moved. + */ + Accordion.prototype.insertWidget = function (index, widget) { + var collapse = this._wrapWidget(widget); + collapse.collapsed = true; + _super.prototype.insertWidget.call(this, index, collapse); + this._selection.adjustSelectionForInsert(index, collapse); + }; + Accordion.prototype.removeWidget = function (widget) { + var index = this.indexOf(widget); + if (index >= 0) { + var collapse = this.collapseWidgets[index]; + widget.parent = null; + collapse.dispose(); + this._selection.adjustSelectionForRemove(index, null); + } + }; + Accordion.prototype._wrapWidget = function (widget) { + var collapse = new Collapse({ widget: widget }); + collapse.addClass(ACCORDION_CHILD_CLASS); + collapse.collapseChanged.connect(this._onCollapseChange, this); + return collapse; + }; + Accordion.prototype._onCollapseChange = function (sender) { + if (!sender.collapsed) { + this._selection.value = sender; + } + else if (this._selection.value === sender && sender.collapsed) { + this._selection.value = null; + } + }; + Accordion.prototype._onSelectionChanged = function (sender, change) { + // Collapse previous widget, open current widget + var pv = change.previousValue; + var cv = change.currentValue; + if (pv) { + pv.collapsed = true; + pv.removeClass(ACCORDION_CHILD_ACTIVE_CLASS); + } + if (cv) { + cv.collapsed = false; + cv.addClass(ACCORDION_CHILD_ACTIVE_CLASS); + } + }; + return Accordion; + }(Panel)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$q = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var SelectionContainerModel = /** @class */ (function (_super) { + __extends$q(SelectionContainerModel, _super); + function SelectionContainerModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + SelectionContainerModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'SelectionContainerModel', + selected_index: 0, + _titles: {} + }); + }; + return SelectionContainerModel; + }(BoxModel)); + var AccordionModel = /** @class */ (function (_super) { + __extends$q(AccordionModel, _super); + function AccordionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + AccordionModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'AccordionModel', + _view_name: 'AccordionView' + }); + }; + return AccordionModel; + }(SelectionContainerModel)); + // We implement our own tab widget since Phoshpor's TabPanel uses an absolute + // positioning BoxLayout, but we want a more an html/css-based Panel layout. + var JupyterPhosphorAccordionWidget = /** @class */ (function (_super) { + __extends$q(JupyterPhosphorAccordionWidget, _super); + function JupyterPhosphorAccordionWidget(options) { + var _this = this; + var view = options.view; + delete options.view; + _this = _super.call(this, options) || this; + _this._view = view; + return _this; + } + /** + * Process the phosphor message. + * + * Any custom phosphor widget used inside a Jupyter widget should override + * the processMessage function like this. + */ + JupyterPhosphorAccordionWidget.prototype.processMessage = function (msg) { + _super.prototype.processMessage.call(this, msg); + this._view.processPhosphorMessage(msg); + }; + /** + * Dispose the widget. + * + * This causes the view to be destroyed as well with 'remove' + */ + JupyterPhosphorAccordionWidget.prototype.dispose = function () { + if (this.isDisposed) { + return; + } + _super.prototype.dispose.call(this); + if (this._view) { + this._view.remove(); + } + this._view = null; + }; + return JupyterPhosphorAccordionWidget; + }(Accordion)); + var AccordionView = /** @class */ (function (_super) { + __extends$q(AccordionView, _super); + function AccordionView() { + return _super !== null && _super.apply(this, arguments) || this; + } + AccordionView.prototype._createElement = function (tagName) { + this.pWidget = new JupyterPhosphorAccordionWidget({ view: this }); + return this.pWidget.node; + }; + AccordionView.prototype._setElement = function (el) { + if (this.el || el !== this.pWidget.node) { + // Accordions don't allow setting the element beyond the initial creation. + throw new Error('Cannot reset the DOM element.'); + } + this.el = this.pWidget.node; + this.$el = $$1(this.pWidget.node); + }; + AccordionView.prototype.initialize = function (parameters) { + var _this = this; + _super.prototype.initialize.call(this, parameters); + this.children_views = new ViewList(this.add_child_view, this.remove_child_view, this); + this.listenTo(this.model, 'change:children', function () { return _this.updateChildren(); }); + this.listenTo(this.model, 'change:selected_index', function () { return _this.update_selected_index(); }); + this.listenTo(this.model, 'change:_titles', function () { return _this.update_titles(); }); + }; + /** + * Called when view is rendered. + */ + AccordionView.prototype.render = function () { + var _this = this; + _super.prototype.render.call(this); + var accordion = this.pWidget; + accordion.addClass('jupyter-widgets'); + accordion.addClass('widget-accordion'); + accordion.addClass('widget-container'); + accordion.selection.selectionChanged.connect(function (sender) { + if (!_this.updatingChildren) { + _this.model.set('selected_index', accordion.selection.index); + _this.touch(); + } + }); + this.children_views.update(this.model.get('children')); + this.update_titles(); + this.update_selected_index(); + }; + /** + * Update children + */ + AccordionView.prototype.updateChildren = function () { + // While we are updating, the index may not be valid, so deselect the + // tabs before updating so we don't get spurious changes in the index, + // which would then set off another sync cycle. + this.updatingChildren = true; + this.pWidget.selection.index = null; + this.children_views.update(this.model.get('children')); + this.update_selected_index(); + this.updatingChildren = false; + }; + /** + * Set header titles + */ + AccordionView.prototype.update_titles = function () { + var collapsed = this.pWidget.collapseWidgets; + var titles = this.model.get('_titles'); + for (var i = 0; i < collapsed.length; i++) { + if (titles[i] !== void 0) { + collapsed[i].widget.title.label = titles[i]; + } + } + }; + /** + * Make the rendering and selected index consistent. + */ + AccordionView.prototype.update_selected_index = function () { + this.pWidget.selection.index = this.model.get('selected_index'); + }; + /** + * Called when a child is removed from children list. + */ + AccordionView.prototype.remove_child_view = function (view) { + this.pWidget.removeWidget(view.pWidget); + view.remove(); + }; + /** + * Called when a child is added to children list. + */ + AccordionView.prototype.add_child_view = function (model, index) { + // Placeholder widget to keep our position in the tab panel while we create the view. + var accordion = this.pWidget; + var placeholder = new Widget(); + placeholder.title.label = this.model.get('_titles')[index] || ''; + accordion.addWidget(placeholder); + return this.create_child_view(model).then(function (view) { + var widget = view.pWidget; + widget.title.label = placeholder.title.label; + var collapse = accordion.collapseWidgets[accordion.indexOf(placeholder)]; + collapse.widget = widget; + placeholder.dispose(); + return view; + }).catch(reject$2('Could not add child view to box', true)); + }; + AccordionView.prototype.remove = function () { + this.children_views = null; + _super.prototype.remove.call(this); + }; + return AccordionView; + }(DOMWidgetView)); + var TabModel = /** @class */ (function (_super) { + __extends$q(TabModel, _super); + function TabModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + TabModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'TabModel', + _view_name: 'TabView' + }); + }; + return TabModel; + }(SelectionContainerModel)); + // We implement our own tab widget since Phoshpor's TabPanel uses an absolute + // positioning BoxLayout, but we want a more an html/css-based Panel layout. + var JupyterPhosphorTabPanelWidget = /** @class */ (function (_super) { + __extends$q(JupyterPhosphorTabPanelWidget, _super); + function JupyterPhosphorTabPanelWidget(options) { + var _this = this; + var view = options.view; + delete options.view; + _this = _super.call(this, options) || this; + _this._view = view; + // We want the view's messages to be the messages the tabContents panel + // gets. + MessageLoop.installMessageHook(_this.tabContents, function (handler, msg) { + // There may be times when we want the view's handler to be called + // *after* the message has been processed by the widget, in which + // case we'll need to revisit using a message hook. + _this._view.processPhosphorMessage(msg); + return true; + }); + return _this; + } + /** + * Dispose the widget. + * + * This causes the view to be destroyed as well with 'remove' + */ + JupyterPhosphorTabPanelWidget.prototype.dispose = function () { + if (this.isDisposed) { + return; + } + _super.prototype.dispose.call(this); + if (this._view) { + this._view.remove(); + } + this._view = null; + }; + return JupyterPhosphorTabPanelWidget; + }(TabPanel$1)); + var TabView = /** @class */ (function (_super) { + __extends$q(TabView, _super); + function TabView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.updatingTabs = false; + return _this; + } + TabView.prototype._createElement = function (tagName) { + this.pWidget = new JupyterPhosphorTabPanelWidget({ + view: this, + }); + return this.pWidget.node; + }; + TabView.prototype._setElement = function (el) { + if (this.el || el !== this.pWidget.node) { + // TabViews don't allow setting the element beyond the initial creation. + throw new Error('Cannot reset the DOM element.'); + } + this.el = this.pWidget.node; + this.$el = $$1(this.pWidget.node); + }; + /** + * Public constructor. + */ + TabView.prototype.initialize = function (parameters) { + var _this = this; + _super.prototype.initialize.call(this, parameters); + this.childrenViews = new ViewList(this.addChildView, function (view) { view.remove(); }, this); + this.listenTo(this.model, 'change:children', function () { return _this.updateTabs(); }); + this.listenTo(this.model, 'change:_titles', function () { return _this.updateTitles(); }); + }; + /** + * Called when view is rendered. + */ + TabView.prototype.render = function () { + _super.prototype.render.call(this); + var tabs = this.pWidget; + tabs.addClass('jupyter-widgets'); + tabs.addClass('widget-container'); + tabs.addClass('widget-tab'); + tabs.tabsMovable = true; + tabs.tabBar.insertBehavior = 'none'; // needed for insert behavior, see below. + tabs.tabBar.currentChanged.connect(this._onTabChanged, this); + tabs.tabBar.tabMoved.connect(this._onTabMoved, this); + tabs.tabBar.addClass('widget-tab-bar'); + tabs.tabContents.addClass('widget-tab-contents'); + // TODO: expose this option in python + tabs.tabBar.tabsMovable = false; + this.updateTabs(); + this.update(); + }; + /** + * Render tab views based on the current model's children. + */ + TabView.prototype.updateTabs = function () { + // While we are updating, the index may not be valid, so deselect the + // tabs before updating so we don't get spurious changes in the index, + // which would then set off another sync cycle. + this.updatingTabs = true; + this.pWidget.currentIndex = null; + this.childrenViews.update(this.model.get('children')); + this.pWidget.currentIndex = this.model.get('selected_index'); + this.updatingTabs = false; + }; + /** + * Called when a child is added to children list. + */ + TabView.prototype.addChildView = function (model, index) { + // Placeholder widget to keep our position in the tab panel while we create the view. + var label = this.model.get('_titles')[index] || ''; + var tabs = this.pWidget; + var placeholder = new Widget(); + placeholder.title.label = label; + tabs.addWidget(placeholder); + return this.create_child_view(model).then(function (view) { + var widget = view.pWidget; + widget.title.label = placeholder.title.label; + widget.title.closable = false; + var i = ArrayExt.firstIndexOf(tabs.widgets, placeholder); + // insert after placeholder so that if placholder is selected, the + // real widget will be selected now (this depends on the tab bar + // insert behavior) + tabs.insertWidget(i + 1, widget); + placeholder.dispose(); + return view; + }).catch(reject$2('Could not add child view to box', true)); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + TabView.prototype.update = function () { + // Update the selected index in the overall update method because it + // should be run after the tabs have been updated. Otherwise the + // selected index may not be a valid tab in the tab bar. + this.updateSelectedIndex(); + return _super.prototype.update.call(this); + }; + /** + * Updates the tab page titles. + */ + TabView.prototype.updateTitles = function () { + var titles = this.model.get('_titles') || {}; + each$1(this.pWidget.widgets, function (widget, i) { + widget.title.label = titles[i] || ''; + }); + }; + /** + * Updates the selected index. + */ + TabView.prototype.updateSelectedIndex = function () { + this.pWidget.currentIndex = this.model.get('selected_index'); + }; + TabView.prototype.remove = function () { + this.childrenViews = null; + _super.prototype.remove.call(this); + }; + TabView.prototype._onTabChanged = function (sender, args) { + if (!this.updatingTabs) { + var i = args.currentIndex; + this.model.set('selected_index', i === -1 ? null : i); + this.touch(); + } + }; + /** + * Handle the `tabMoved` signal from the tab bar. + */ + TabView.prototype._onTabMoved = function (sender, args) { + var children = this.model.get('children').slice(); + ArrayExt.move(children, args.fromIndex, args.toIndex); + this.model.set('children', children); + this.touch(); + }; + return TabView; + }(DOMWidgetView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$r = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$f = (undefined && undefined.__assign) || function () { + __assign$f = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$f.apply(this, arguments); + }; + /** + * Class name for a combobox with an invlid value. + */ + var INVALID_VALUE_CLASS = 'jpwidgets-invalidComboValue'; + var StringModel = /** @class */ (function (_super) { + __extends$r(StringModel, _super); + function StringModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + StringModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + value: '', + disabled: false, + placeholder: '\u200b', + _model_name: 'StringModel' + }); + }; + return StringModel; + }(CoreDescriptionModel)); + var HTMLModel = /** @class */ (function (_super) { + __extends$r(HTMLModel, _super); + function HTMLModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + HTMLModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'HTMLView', + _model_name: 'HTMLModel' + }); + }; + return HTMLModel; + }(StringModel)); + var HTMLView = /** @class */ (function (_super) { + __extends$r(HTMLView, _super); + function HTMLView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + HTMLView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-html'); + this.content = document.createElement('div'); + this.content.classList.add('widget-html-content'); + this.el.appendChild(this.content); + this.update(); // Set defaults. + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + HTMLView.prototype.update = function () { + this.content.innerHTML = this.model.get('value'); + return _super.prototype.update.call(this); + }; + return HTMLView; + }(DescriptionView)); + var HTMLMathModel = /** @class */ (function (_super) { + __extends$r(HTMLMathModel, _super); + function HTMLMathModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + HTMLMathModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'HTMLMathView', + _model_name: 'HTMLMathModel' + }); + }; + return HTMLMathModel; + }(StringModel)); + var HTMLMathView = /** @class */ (function (_super) { + __extends$r(HTMLMathView, _super); + function HTMLMathView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + HTMLMathView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-htmlmath'); + this.content = document.createElement('div'); + this.content.classList.add('widget-htmlmath-content'); + this.el.appendChild(this.content); + this.update(); // Set defaults. + }; + /** + * Update the contents of this view + */ + HTMLMathView.prototype.update = function () { + this.content.innerHTML = this.model.get('value'); + this.typeset(this.content); + return _super.prototype.update.call(this); + }; + return HTMLMathView; + }(DescriptionView)); + var LabelModel = /** @class */ (function (_super) { + __extends$r(LabelModel, _super); + function LabelModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + LabelModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'LabelView', + _model_name: 'LabelModel' + }); + }; + return LabelModel; + }(StringModel)); + var LabelView = /** @class */ (function (_super) { + __extends$r(LabelView, _super); + function LabelView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + LabelView.prototype.render = function () { + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-label'); + this.update(); // Set defaults. + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + LabelView.prototype.update = function () { + this.typeset(this.el, this.model.get('value')); + return _super.prototype.update.call(this); + }; + return LabelView; + }(DescriptionView)); + var TextareaModel = /** @class */ (function (_super) { + __extends$r(TextareaModel, _super); + function TextareaModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + TextareaModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'TextareaView', + _model_name: 'TextareaModel', + rows: null, + continuous_update: true, + }); + }; + return TextareaModel; + }(StringModel)); + var TextareaView = /** @class */ (function (_super) { + __extends$r(TextareaView, _super); + function TextareaView() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Called when view is rendered. + */ + TextareaView.prototype.render = function () { + var _this = this; + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-textarea'); + this.textbox = document.createElement('textarea'); + this.textbox.setAttribute('rows', '5'); + this.textbox.id = this.label.htmlFor = uuid(); + this.el.appendChild(this.textbox); + this.update(); // Set defaults. + this.listenTo(this.model, 'change:placeholder', function (model, value, options) { + _this.update_placeholder(value); + }); + this.update_placeholder(); + }; + TextareaView.prototype.update_placeholder = function (value) { + value = value || this.model.get('placeholder'); + this.textbox.setAttribute('placeholder', value.toString()); + }; + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + TextareaView.prototype.update = function (options) { + if (options === undefined || options.updated_view != this) { + this.textbox.value = this.model.get('value'); + var rows = this.model.get('rows'); + if (rows === null) { + rows = ''; + } + this.textbox.setAttribute('rows', rows); + this.textbox.disabled = this.model.get('disabled'); + } + return _super.prototype.update.call(this); + }; + TextareaView.prototype.events = function () { + return { + 'keydown input': 'handleKeyDown', + 'keypress input': 'handleKeypress', + 'input textarea': 'handleChanging', + 'change textarea': 'handleChanged' + }; + }; + /** + * Handle key down + * + * Stop propagation so the event isn't sent to the application. + */ + TextareaView.prototype.handleKeyDown = function (e) { + e.stopPropagation(); + }; + /** + * Handles key press + * + * Stop propagation so the keypress isn't sent to the application. + */ + TextareaView.prototype.handleKeypress = function (e) { + e.stopPropagation(); + }; + /** + * Triggered on input change + */ + TextareaView.prototype.handleChanging = function (e) { + if (this.model.get('continuous_update')) { + this.handleChanged(e); + } + }; + /** + * Sync the value with the kernel. + * + * @param e Event + */ + TextareaView.prototype.handleChanged = function (e) { + var target = e.target; + this.model.set('value', target.value, { updated_view: this }); + this.touch(); + }; + return TextareaView; + }(DescriptionView)); + var TextModel = /** @class */ (function (_super) { + __extends$r(TextModel, _super); + function TextModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + TextModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'TextView', + _model_name: 'TextModel', + continuous_update: true, + }); + }; + return TextModel; + }(StringModel)); + var TextView = /** @class */ (function (_super) { + __extends$r(TextView, _super); + function TextView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.inputType = 'text'; + return _this; + } + /** + * Called when view is rendered. + */ + TextView.prototype.render = function () { + var _this = this; + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-inline-hbox'); + this.el.classList.add('widget-text'); + this.textbox = document.createElement('input'); + this.textbox.setAttribute('type', this.inputType); + this.textbox.id = this.label.htmlFor = uuid(); + this.el.appendChild(this.textbox); + this.update(); // Set defaults. + this.listenTo(this.model, 'change:placeholder', function (model, value, options) { + _this.update_placeholder(value); + }); + this.listenTo(this.model, 'change:description_tooltip', this.update_title); + this.listenTo(this.model, 'change:description', this.update_title); + this.update_placeholder(); + this.update_title(); + }; + TextView.prototype.update_placeholder = function (value) { + this.textbox.setAttribute('placeholder', value || this.model.get('placeholder')); + }; + TextView.prototype.update_title = function () { + var title = this.model.get('description_tooltip'); + if (!title) { + this.textbox.removeAttribute('title'); + } + else if (this.model.get('description').length === 0) { + this.textbox.setAttribute('title', title); + } + }; + TextView.prototype.update = function (options) { + /** + * Update the contents of this view + * + * Called when the model is changed. The model may have been + * changed by another view or by a state update from the back-end. + */ + if (options === undefined || options.updated_view !== this) { + if (this.textbox.value !== this.model.get('value')) { + this.textbox.value = this.model.get('value'); + } + this.textbox.disabled = this.model.get('disabled'); + } + return _super.prototype.update.call(this); + }; + TextView.prototype.events = function () { + return { + 'keydown input': 'handleKeyDown', + 'keypress input': 'handleKeypress', + 'input input': 'handleChanging', + 'change input': 'handleChanged' + }; + }; + /** + * Handle key down + * + * Stop propagation so the keypress isn't sent to the application. + */ + TextView.prototype.handleKeyDown = function (e) { + e.stopPropagation(); + }; + /** + * Handles text submission + */ + TextView.prototype.handleKeypress = function (e) { + e.stopPropagation(); + // The submit message is deprecated in widgets 7 + if (e.keyCode === 13) { // Return key + this.send({ event: 'submit' }); + } + }; + /** + * Handles user input. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + TextView.prototype.handleChanging = function (e) { + if (this.model.get('continuous_update')) { + this.handleChanged(e); + } + }; + /** + * Handles user input. + * + * Calling model.set will trigger all of the other views of the + * model to update. + */ + TextView.prototype.handleChanged = function (e) { + var target = e.target; + this.model.set('value', target.value, { updated_view: this }); + this.touch(); + }; + return TextView; + }(DescriptionView)); + var PasswordModel = /** @class */ (function (_super) { + __extends$r(PasswordModel, _super); + function PasswordModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + PasswordModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _view_name: 'PasswordView', + _model_name: 'PasswordModel' + }); + }; + return PasswordModel; + }(TextModel)); + var PasswordView = /** @class */ (function (_super) { + __extends$r(PasswordView, _super); + function PasswordView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.inputType = 'password'; + return _this; + } + return PasswordView; + }(TextView)); + /** + * Combobox widget model class. + */ + var ComboboxModel = /** @class */ (function (_super) { + __extends$r(ComboboxModel, _super); + function ComboboxModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + ComboboxModel.prototype.defaults = function () { + return __assign$f(__assign$f({}, _super.prototype.defaults.call(this)), { _model_name: 'ComboboxModel', _view_name: 'ComboboxView', options: [], ensure_options: false }); + }; + return ComboboxModel; + }(TextModel)); + /** + * Combobox widget view class. + */ + var ComboboxView = /** @class */ (function (_super) { + __extends$r(ComboboxView, _super); + function ComboboxView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.isInitialRender = true; + return _this; + } + ComboboxView.prototype.render = function () { + this.datalist = document.createElement('datalist'); + this.datalist.id = uuid(); + _super.prototype.render.call(this); + this.textbox.setAttribute('list', this.datalist.id); + this.el.appendChild(this.datalist); + }; + ComboboxView.prototype.update = function (options) { + _super.prototype.update.call(this, options); + if (!this.datalist) { + return; + } + var valid = this.isValid(this.model.get('value')); + this.highlightValidState(valid); + // Check if we need to update options + if ((options !== undefined && options.updated_view) || (!this.model.hasChanged('options') && + !this.isInitialRender)) { + // Value update only, keep current options + return; + } + this.isInitialRender = false; + var opts = this.model.get('options'); + var optLines = opts.map(function (o) { + return ""; + }); + this.datalist.innerHTML = optLines.join('\n'); + }; + ComboboxView.prototype.isValid = function (value) { + if (true === this.model.get('ensure_option')) { + var options = this.model.get('options'); + if (options.indexOf(value) === -1) { + return false; + } + } + return true; + }; + ComboboxView.prototype.handleChanging = function (e) { + // Override to validate value + var target = e.target; + var valid = this.isValid(target.value); + this.highlightValidState(valid); + if (valid) { + _super.prototype.handleChanging.call(this, e); + } + }; + ComboboxView.prototype.handleChanged = function (e) { + // Override to validate value + var target = e.target; + var valid = this.isValid(target.value); + this.highlightValidState(valid); + if (valid) { + _super.prototype.handleChanged.call(this, e); + } + }; + ComboboxView.prototype.highlightValidState = function (valid) { + this.textbox.classList.toggle(INVALID_VALUE_CLASS, !valid); + }; + return ComboboxView; + }(TextView)); + + // Copyright (c) Jupyter Development Team. + // Distributed under the terms of the Modified BSD License. + var __extends$s = (undefined && undefined.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign$g = (undefined && undefined.__assign) || function () { + __assign$g = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign$g.apply(this, arguments); + }; + var __spreadArrays = (undefined && undefined.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; + }; + var FileUploadModel = /** @class */ (function (_super) { + __extends$s(FileUploadModel, _super); + function FileUploadModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + FileUploadModel.prototype.defaults = function () { + return extend(_super.prototype.defaults.call(this), { + _model_name: 'FileUploadModel', + _view_name: 'FileUploadView', + _counter: 0, + accept: '', + description: 'Upload', + tooltip: '', + disabled: false, + icon: 'upload', + button_style: '', + multiple: false, + metadata: [], + data: [], + error: '', + style: null + }); + }; + FileUploadModel.serializers = __assign$g(__assign$g({}, CoreDOMWidgetModel.serializers), { data: { serialize: function (buffers) { return __spreadArrays(buffers); } } }); + return FileUploadModel; + }(CoreDOMWidgetModel)); + var FileUploadView = /** @class */ (function (_super) { + __extends$s(FileUploadView, _super); + function FileUploadView() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(FileUploadView.prototype, "tagName", { + get: function () { + return 'button'; + }, + enumerable: true, + configurable: true + }); + FileUploadView.prototype.render = function () { + var _this = this; + _super.prototype.render.call(this); + this.el.classList.add('jupyter-widgets'); + this.el.classList.add('widget-upload'); + this.el.classList.add('jupyter-button'); + this.fileInput = document.createElement('input'); + this.fileInput.type = 'file'; + this.fileInput.style.display = 'none'; + this.el.appendChild(this.fileInput); + this.el.addEventListener('click', function () { + _this.fileInput.click(); + }); + this.fileInput.addEventListener('click', function () { + _this.fileInput.value = ''; + }); + this.fileInput.addEventListener('change', function () { + var promisesFile = []; + Array.from(_this.fileInput.files).forEach(function (file) { + promisesFile.push(new Promise(function (resolve, reject) { + var metadata = { + name: file.name, + type: file.type, + size: file.size, + lastModified: file.lastModified, + }; + _this.fileReader = new FileReader(); + _this.fileReader.onload = function (event) { + var buffer = event.target.result; + resolve({ + buffer: buffer, + metadata: metadata, + error: '', + }); + }; + _this.fileReader.onerror = function () { + reject(); + }; + _this.fileReader.onabort = _this.fileReader.onerror; + _this.fileReader.readAsArrayBuffer(file); + })); + }); + Promise.all(promisesFile) + .then(function (contents) { + var metadata = []; + var li_buffer = []; + contents.forEach(function (c) { + metadata.push(c.metadata); + li_buffer.push(c.buffer); + }); + var counter = _this.model.get('_counter'); + _this.model.set({ + _counter: counter + contents.length, + metadata: metadata, + data: li_buffer, + error: '', + }); + _this.touch(); + }) + .catch(function (err) { + console.error('error in file upload: %o', err); + _this.model.set({ + error: err, + }); + _this.touch(); + }); + }); + this.listenTo(this.model, 'change:button_style', this.update_button_style); + this.set_button_style(); + this.update(); // Set defaults. + }; + FileUploadView.prototype.update = function () { + this.el.disabled = this.model.get('disabled'); + this.el.setAttribute('title', this.model.get('tooltip')); + var description = this.model.get('description') + " (" + this.model.get('_counter') + ")"; + var icon = this.model.get('icon'); + if (description.length || icon.length) { + this.el.textContent = ''; + if (icon.length) { + var i = document.createElement('i'); + i.classList.add('fa'); + i.classList.add('fa-' + icon); + if (description.length === 0) { + i.classList.add('center'); + } + this.el.appendChild(i); + } + this.el.appendChild(document.createTextNode(description)); + } + this.fileInput.accept = this.model.get('accept'); + this.fileInput.multiple = this.model.get('multiple'); + return _super.prototype.update.call(this); + }; + FileUploadView.prototype.update_button_style = function () { + this.update_mapped_classes(FileUploadView.class_map, 'button_style', this.el); + }; + FileUploadView.prototype.set_button_style = function () { + this.set_mapped_classes(FileUploadView.class_map, 'button_style', this.el); + }; + FileUploadView.class_map = { + primary: ['mod-primary'], + success: ['mod-success'], + info: ['mod-info'], + warning: ['mod-warning'], + danger: ['mod-danger'] + }; + return FileUploadView; + }(DOMWidgetView)); + + var version$1 = require$$0.version; + + var lib$3 = /*#__PURE__*/Object.freeze({ + version: version$1, + reject: reject$2, + typeset: typeset, + escape_html: escape_html, + uuid: uuid, + WrappedError: WrappedError, + resolvePromisesDict: resolvePromisesDict, + JUPYTER_CONTROLS_VERSION: JUPYTER_CONTROLS_VERSION, + DirectionalLinkModel: DirectionalLinkModel, + LinkModel: LinkModel, + BoolModel: BoolModel, + CheckboxModel: CheckboxModel, + CheckboxView: CheckboxView, + ToggleButtonModel: ToggleButtonModel, + ToggleButtonView: ToggleButtonView, + ValidModel: ValidModel, + ValidView: ValidView, + ButtonStyleModel: ButtonStyleModel, + ButtonModel: ButtonModel, + ButtonView: ButtonView, + BoxModel: BoxModel, + HBoxModel: HBoxModel, + VBoxModel: VBoxModel, + BoxView: BoxView, + HBoxView: HBoxView, + VBoxView: VBoxView, + GridBoxView: GridBoxView, + GridBoxModel: GridBoxModel, + ImageModel: ImageModel, + ImageView: ImageView, + VideoModel: VideoModel, + VideoView: VideoView, + AudioModel: AudioModel, + AudioView: AudioView, + ColorPickerModel: ColorPickerModel, + ColorPickerView: ColorPickerView, + serialize_date: serialize_date, + deserialize_date: deserialize_date, + DatePickerModel: DatePickerModel, + DatePickerView: DatePickerView, + IntModel: IntModel, + BoundedIntModel: BoundedIntModel, + SliderStyleModel: SliderStyleModel, + IntSliderModel: IntSliderModel, + IntRangeSliderModel: IntRangeSliderModel, + BaseIntSliderView: BaseIntSliderView, + IntRangeSliderView: IntRangeSliderView, + IntSliderView: IntSliderView, + IntTextModel: IntTextModel, + BoundedIntTextModel: BoundedIntTextModel, + IntTextView: IntTextView, + ProgressStyleModel: ProgressStyleModel, + IntProgressModel: IntProgressModel, + ProgressView: ProgressView, + PlayModel: PlayModel, + PlayView: PlayView, + FloatModel: FloatModel, + BoundedFloatModel: BoundedFloatModel, + FloatSliderModel: FloatSliderModel, + FloatLogSliderModel: FloatLogSliderModel, + FloatRangeSliderModel: FloatRangeSliderModel, + FloatSliderView: FloatSliderView, + FloatLogSliderView: FloatLogSliderView, + FloatRangeSliderView: FloatRangeSliderView, + FloatTextModel: FloatTextModel, + BoundedFloatTextModel: BoundedFloatTextModel, + FloatTextView: FloatTextView, + FloatProgressModel: FloatProgressModel, + ControllerButtonModel: ControllerButtonModel, + ControllerButtonView: ControllerButtonView, + ControllerAxisModel: ControllerAxisModel, + ControllerAxisView: ControllerAxisView, + ControllerModel: ControllerModel, + ControllerView: ControllerView, + SelectionModel: SelectionModel, + DropdownModel: DropdownModel, + DropdownView: DropdownView, + SelectModel: SelectModel, + SelectView: SelectView, + RadioButtonsModel: RadioButtonsModel, + RadioButtonsView: RadioButtonsView, + ToggleButtonsStyleModel: ToggleButtonsStyleModel, + ToggleButtonsModel: ToggleButtonsModel, + get ToggleButtonsView () { return ToggleButtonsView; }, + SelectionSliderModel: SelectionSliderModel, + SelectionSliderView: SelectionSliderView, + MultipleSelectionModel: MultipleSelectionModel, + SelectMultipleModel: SelectMultipleModel, + SelectMultipleView: SelectMultipleView, + SelectionRangeSliderModel: SelectionRangeSliderModel, + SelectionRangeSliderView: SelectionRangeSliderView, + SelectionContainerModel: SelectionContainerModel, + AccordionModel: AccordionModel, + JupyterPhosphorAccordionWidget: JupyterPhosphorAccordionWidget, + AccordionView: AccordionView, + TabModel: TabModel, + JupyterPhosphorTabPanelWidget: JupyterPhosphorTabPanelWidget, + TabView: TabView, + StringModel: StringModel, + HTMLModel: HTMLModel, + HTMLView: HTMLView, + HTMLMathModel: HTMLMathModel, + HTMLMathView: HTMLMathView, + LabelModel: LabelModel, + LabelView: LabelView, + TextareaModel: TextareaModel, + TextareaView: TextareaView, + TextModel: TextModel, + TextView: TextView, + PasswordModel: PasswordModel, + PasswordView: PasswordView, + ComboboxModel: ComboboxModel, + ComboboxView: ComboboxView, + DescriptionStyleModel: DescriptionStyleModel, + DescriptionModel: DescriptionModel, + DescriptionView: DescriptionView, + LabeledDOMWidgetModel: LabeledDOMWidgetModel, + LabeledDOMWidgetView: LabeledDOMWidgetView, + FileUploadModel: FileUploadModel, + FileUploadView: FileUploadView + }); + + const OUTPUT_WIDGET_VERSION = '1.0.0'; + class OutputModel extends DOMWidgetModel { + defaults() { + return Object.assign(Object.assign({}, super.defaults()), { _model_name: 'OutputModel', _view_name: 'OutputView', _model_module: '@jupyter-widgets/output', _view_module: '@jupyter-widgets/output', _model_module_version: OUTPUT_WIDGET_VERSION, _view_module_version: OUTPUT_WIDGET_VERSION }); + } + } + class OutputView extends DOMWidgetView { + } + + + + var lib$4 = /*#__PURE__*/Object.freeze({ + OUTPUT_WIDGET_VERSION: OUTPUT_WIDGET_VERSION, + OutputModel: OutputModel, + OutputView: OutputView + }); + + function styleInject(css, ref) { + if ( ref === void 0 ) ref = {}; + var insertAt = ref.insertAt; + + if (!css || typeof document === 'undefined') { return; } + + var head = document.head || document.getElementsByTagName('head')[0]; + var style = document.createElement('style'); + style.type = 'text/css'; + + if (insertAt === 'top') { + if (head.firstChild) { + head.insertBefore(style, head.firstChild); + } else { + head.appendChild(style); + } + } else { + head.appendChild(style); + } + + if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + } + } + + var css = ".jupyter-widgets-output-area div.output_subarea{max-width:100%}.jupyter-widgets-output-area>.out_prompt_overlay{display:none}"; + styleInject(css); + + var widget_output = /*#__PURE__*/Object.freeze({ + 'default': css + }); + + getCjsExportFromNamespace(widget_output); + + // This widget is strongly coupled to the notebook because of the outputarea + // dependency. + + + + var outputArea = new Promise(function(resolve, reject) { + requirejs(['notebook/js/outputarea'], resolve, reject); + }); + + class OutputModel$1 extends lib$4.OutputModel { + defaults() { + return { + ...super.defaults(), + msg_id: '', + outputs: [] + }; + } + + initialize(attributes, options) { + super.initialize(attributes, options); + this.listenTo(this, 'change:msg_id', this.reset_msg_id); + + if (this.comm && this.comm.kernel) { + this.kernel = this.comm.kernel; + this.kernel.set_callbacks_for_msg(this.model_id, this.callbacks(), false); + } + + var that = this; + // Create an output area to handle the data model part + outputArea.then(function(outputArea) { + that.output_area = new outputArea.OutputArea({ + selector: document.createElement('div'), + config: { data: { OutputArea: {} } }, + prompt_area: false, + events: that.widget_manager.notebook.events, + keyboard_manager: that.widget_manager.keyboard_manager + }); + that.listenTo( + that, + 'new_message', + function(msg) { + that.output_area.handle_output(msg); + that.set('outputs', that.output_area.toJSON(), { newMessage: true }); + that.save_changes(); + }, + that + ); + that.listenTo(that, 'clear_output', function(msg) { + that.output_area.handle_clear_output(msg); + that.set('outputs', that.output_area.toJSON(), { newMessage: true }); + that.save_changes(); + }); + that.listenTo(that, 'change:outputs', that.setOutputs); + that.setOutputs(); + }); + } + + // make callbacks + callbacks() { + // Merge our callbacks with the base class callbacks. + var cb = super.callbacks(); + var iopub = cb.iopub || {}; + var iopubCallbacks = { + ...iopub, + output: function(msg) { + this.trigger('new_message', msg); + if (iopub.output) { + iopub.output.apply(this, arguments); + } + }.bind(this), + clear_output: function(msg) { + this.trigger('clear_output', msg); + if (iopub.clear_output) { + iopub.clear_output.apply(this, arguments); + } + }.bind(this) + }; + return { ...cb, iopub: iopubCallbacks }; + } + + reset_msg_id() { + var kernel = this.kernel; + // Pop previous message id + var prev_msg_id = this.previous('msg_id'); + if (prev_msg_id && kernel) { + var previous_callback = kernel.output_callback_overrides_pop(prev_msg_id); + if (previous_callback !== this.model_id) { + console.error( + 'Popped wrong message (' + + previous_callback + + ' instead of ' + + this.model_id + + ') - likely the stack was not maintained in kernel.' + ); + } + } + var msg_id = this.get('msg_id'); + if (msg_id && kernel) { + kernel.output_callback_overrides_push(msg_id, this.model_id); + } + } + + setOutputs(model, value, options) { + if (!(options && options.newMessage)) { + // fromJSON does not clear the existing output + this.output_area.clear_output(); + // fromJSON does not copy the message, so we make a deep copy + this.output_area.fromJSON( + JSON.parse(JSON.stringify(this.get('outputs'))) + ); + } + } + } + + class OutputView$1 extends lib$4.OutputView { + render() { + var that = this; + this.el.classList.add('jupyter-widgets-output-area'); + outputArea.then(function(outputArea) { + that.output_area = new outputArea.OutputArea({ + selector: that.el, + // use default values for the output area config + config: { data: { OutputArea: {} } }, + prompt_area: false, + events: that.model.widget_manager.notebook.events, + keyboard_manager: that.model.widget_manager.keyboard_manager + }); + that.listenTo( + that.model, + 'new_message', + function(msg) { + that.output_area.handle_output(msg); + }, + that + ); + that.listenTo(that.model, 'clear_output', function(msg) { + that.output_area.handle_clear_output(msg); + // fake the event on the output area element. This can be + // deleted when we can rely on + // https://github.com/jupyter/notebook/pull/2411 being + // available. + that.output_area.element.trigger('clearing', { output_area: this }); + }); + // Render initial contents from the current model + that.listenTo(that.model, 'change:outputs', that.setOutputs); + that.setOutputs(); + }); + super.render(); + } + + setOutputs(model, value, options) { + if (!(options && options.newMessage)) { + // fromJSON does not clear the existing output + this.output_area.clear_output(); + // fromJSON does not copy the message, so we make a deep copy + this.output_area.fromJSON( + JSON.parse(JSON.stringify(this.model.get('outputs'))) + ); + } + } + } + + var widget_output$1 = /*#__PURE__*/Object.freeze({ + OutputModel: OutputModel$1, + OutputView: OutputView$1 + }); + + // Copyright (c) Jupyter Development Team. + + var save_state = function() { + return new Promise(function(resolve, reject) { + requirejs(['base/js/namespace'], function(Jupyter) { + var wm = Jupyter.WidgetManager._managers[0]; + if (!wm) { + reject('No widget manager'); + } + return wm + .get_state({ + drop_defaults: true + }) + .then(function(state) { + var data = + 'text/json;charset=utf-8,' + + encodeURIComponent(JSON.stringify(state, null, ' ')); + var a = document.createElement('a'); + a.download = 'widget_state.json'; + a.href = 'data:' + data; + a.click(); + resolve(); + }); + }); + }); + }; + + var action = { + help: 'Download the widget state as a JSON file', + icon: 'fa-sliders', + help_index: 'zz', + handler: save_state + }; + + var action_name = 'save-widget-state'; + var prefix = 'widgets'; + requirejs(['base/js/namespace'], function(Jupyter) { + Jupyter.notebook.keyboard_manager.actions.register( + action, + action_name, + prefix + ); + }); + + var save_state_1 = { action: action }; + + var author$1 = { + name: "Jupyter Project" + }; + var bugs$1 = { + url: "https://github.com/jupyter-widgets/ipywidgets/issues" + }; + var dependencies$1 = { + "@fortawesome/fontawesome-free": "^5.12.0", + "@jupyter-widgets/base": "^4.0.0-alpha.0", + "@jupyter-widgets/base-manager": "^1.0.0-alpha.0", + "@jupyter-widgets/controls": "^3.0.0-alpha.0", + "@jupyter-widgets/output": "^4.0.0-alpha.0", + "@jupyter-widgets/schema": "^0.5.0-alpha.0", + "@jupyterlab/outputarea": "^2.0.2", + "@jupyterlab/rendermime": "^2.0.2", + "@jupyterlab/rendermime-interfaces": "^2.0.1", + "@lumino/widgets": "^1.11.1", + ajv: "^6.10.0", + jquery: "^3.1.1" + }; + var description$1 = "Standalone package for rendering Jupyter widgets outside notebooks"; + var devDependencies$1 = { + "@types/mocha": "^5.2.7", + "@types/node": "^12.7.0", + chai: "^4.0.0", + "css-loader": "^3.4.0", + "file-loader": "^5.0.2", + karma: "^4.1.0", + "karma-chrome-launcher": "^2.2.0", + "karma-firefox-launcher": "^1.1.0", + "karma-ie-launcher": "^1.0.0", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", + mocha: "^6.1.4", + rimraf: "^2.6.1", + "style-loader": "^1.1.2", + typescript: "~3.7.4", + "url-loader": "^3.0.0", + webpack: "^4.41.5", + "webpack-cli": "^3.3.4" + }; + var files$1 = [ + "lib/**/*.d.ts", + "lib/**/*.js", + "dist/", + "css/*.css" + ]; + var gitHead$1 = "6fbe5cb7ab0cc997de5b468efaa7225cff1f340e"; + var homepage$1 = "https://github.com/jupyter-widgets/ipywidgets#readme"; + var license$1 = "BSD-3-Clause"; + var main$1 = "lib/index.js"; + var name$1 = "@jupyter-widgets/html-manager"; + var repository$1 = { + type: "git", + url: "git+https://github.com/jupyter-widgets/ipywidgets.git" + }; + var scripts$1 = { + build: "npm run build:src && webpack && npm run build:embed-amd", + "build:embed-amd": "node scripts/concat-amd-build.js && rimraf dist/amd", + "build:src": "tsc --build", + "build:test": "tsc --build test && webpack --config test/webpack.conf.js", + clean: "rimraf lib && rimraf tsconfig.tsbuildinfo && rimraf dist", + prepublish: "npm run clean && npm run build", + test: "npm run test:unit", + "test:unit": "npm run test:unit:firefox && npm run test:unit:chrome", + "test:unit:chrome": "npm run test:unit:default -- --browsers=Chrome", + "test:unit:default": "npm run build:test && karma start test/karma.conf.js --log-level debug --browsers=Firefox", + "test:unit:firefox": "npm run test:unit:default -- --browsers=Firefox", + "test:unit:firefox:headless": "npm run test:unit:default -- --browsers=FirefoxHeadless" + }; + var typings$1 = "lib/index.d.ts"; + var version$2 = "0.20.0-alpha.0"; + var _package$2 = { + author: author$1, + bugs: bugs$1, + dependencies: dependencies$1, + description: description$1, + devDependencies: devDependencies$1, + files: files$1, + gitHead: gitHead$1, + homepage: homepage$1, + license: license$1, + main: main$1, + name: name$1, + repository: repository$1, + scripts: scripts$1, + typings: typings$1, + version: version$2 + }; + + var _package$3 = /*#__PURE__*/Object.freeze({ + author: author$1, + bugs: bugs$1, + dependencies: dependencies$1, + description: description$1, + devDependencies: devDependencies$1, + files: files$1, + gitHead: gitHead$1, + homepage: homepage$1, + license: license$1, + main: main$1, + name: name$1, + repository: repository$1, + scripts: scripts$1, + typings: typings$1, + version: version$2, + 'default': _package$2 + }); + + var require$$0$1 = getCjsExportFromNamespace(_package$3); + + var VIEW_MIME_TYPE = 'application/vnd.jupyter.widget-view+json'; + + var htmlManagerVersion = require$$0$1 + .version; + + var embed_widgets = function() { + /** + * Escape a string that will be the content of an HTML script tag. + * + * We replace the opening bracket of ', + '', + '', + '', + '', + '', + '', + '', + '', + '' + ].join('\n'); + var views = []; + var cells = Jupyter.notebook.get_cells(); + Jupyter.notebook.get_cells().forEach(function(cell) { + if (cell.output_area) { + cell.output_area.outputs.forEach(function(output) { + if ( + output.data && + output.data[VIEW_MIME_TYPE] && + state.state[output.data[VIEW_MIME_TYPE].model_id] + ) { + views.push( + '\n' + ); + } + }); + } + }); + value += views.join('\n'); + value += '\n\n\n\n'; + var content = document.createElement('textarea'); + content.setAttribute('readonly', 'true'); + content.style.width = '100%'; + content.style.minHeight = '250px'; + content.value = value; + + var mod = dialog.modal({ + show: true, + title: 'Embed widgets', + body: content, + keyboard_manager: Jupyter.notebook.keyboard_manager, + notebook: Jupyter.notebook, + buttons: { + 'Copy to Clipboard': { + class: 'btn-primary', + click: function(event) { + content.select(); + return document.execCommand('copy'); + } + } + } + }); + }); + } + ); + }); + }; + + var action$1 = { + help: 'Embed interactive widgets', + icon: 'fa-sliders', + help_index: 'zz', + handler: embed_widgets + }; + + var action_name$1 = 'embed-interactive-widgets'; + var prefix$1 = 'widgets'; + requirejs(['base/js/namespace'], function(Jupyter) { + Jupyter.notebook.keyboard_manager.actions.register( + action$1, + action_name$1, + prefix$1 + ); + }); + + var embed_widgets_1 = { + action: action$1 + }; + + var ManagerBase$2 = lib$2.ManagerBase; + + + + + + var MIME_TYPE = 'application/vnd.jupyter.widget-view+json'; + + function polyfill_new_comm_buffers( + manager, + target_name, + data, + callbacks, + metadata, + comm_id, + buffers + ) { + /** + * This polyfills services/kernel/comm/CommManager.new_comm to + * accept the buffers argument. + * + * argument comm_id is optional + */ + return new Promise(function(resolve) { + requirejs(['services/kernels/comm'], function(comm) { + var comm = new comm.Comm(target_name, comm_id); + manager.register_comm(comm); + // inline Comm.open(), but with buffers + var content = { + comm_id: comm_id, + target_name: target_name, + data: data || {} + }; + comm.kernel.send_shell_message( + 'comm_open', + content, + callbacks, + metadata, + buffers + ); + resolve(comm); + }); + }); + } + + function new_comm( + manager, + target_name, + data, + callbacks, + metadata, + comm_id, + buffers + ) { + // Checks whether new_comm needs a polyfill, and calls the correct version + // Polyfill needed for notebook <5.1, in which the new_comm method does not support a buffers argument. + // See https://github.com/jupyter-widgets/ipywidgets/pull/1817 + var need_polyfill = manager.new_comm.length < 6; + if (need_polyfill) { + return polyfill_new_comm_buffers.apply(null, arguments); + } + return manager.new_comm.apply( + manager, + Array.prototype.slice.call(arguments, 1) + ); + } + + //-------------------------------------------------------------------- + // WidgetManager class + //-------------------------------------------------------------------- + + class WidgetManager extends ManagerBase$2 { + constructor(comm_manager, notebook) { + super(); + // Managers are stored in *reverse* order, so that _managers[0] is the most recent. + WidgetManager._managers.unshift(this); + + // Attach a comm manager + this.notebook = notebook; + this.keyboard_manager = notebook.keyboard_manager; + this.comm_manager = comm_manager; + + var widget_md = notebook.metadata.widgets; + + // Steps that needs to be done: + // 1. Register comm target + // 2. Get any widget state from the kernel and open comms with existing state + // 3. Check saved state for widgets, and restore any that would not overwrite + // any live widgets. + + // Register with the comm manager. (1) + this.comm_manager.register_target( + this.comm_target_name, + this.handle_comm_open.bind(this) + ); + + // Attempt to reconstruct any live comms by requesting them from the back-end (2). + var that = this; + this._get_comm_info().then(function(comm_ids) { + // Create comm class instances from comm ids (2). + var comm_promises = Object.keys(comm_ids).map(function(comm_id) { + return that._create_comm(that.comm_target_name, comm_id); + }); + + // Send a state request message out for each widget comm and wait + // for the responses (2). + return Promise.all(comm_promises) + .then(function(comms) { + return Promise.all( + comms.map(function(comm) { + var update_promise = new Promise(function(resolve, reject) { + comm.on_msg(function(msg) { + lib$1.put_buffers( + msg.content.data.state, + msg.content.data.buffer_paths, + msg.buffers + ); + // A suspected response was received, check to see if + // it's a state update. If so, resolve. + if (msg.content.data.method === 'update') { + resolve({ + comm: comm, + msg: msg + }); + } + }); + }); + comm.send( + { + method: 'request_state' + }, + that.callbacks() + ); + return update_promise; + }) + ); + }) + .then(function(widgets_info) { + return Promise.all( + widgets_info.map(function(widget_info) { + return that.new_model( + { + model_name: widget_info.msg.content.data.state._model_name, + model_module: + widget_info.msg.content.data.state._model_module, + model_module_version: + widget_info.msg.content.data.state._model_module_version, + comm: widget_info.comm + }, + widget_info.msg.content.data.state + ); + }) + ); + }) + .then(function() { + // Now that we have mirrored any widgets from the kernel... + // Restore any widgets from saved state that are not live (3) + if ( + widget_md && + widget_md['application/vnd.jupyter.widget-state+json'] + ) { + var state = + notebook.metadata.widgets[ + 'application/vnd.jupyter.widget-state+json' + ]; + state = that.filterExistingModelState(state); + return that.set_state(state); + } + }) + .then(function() { + // Rerender cells that have widget data + that.notebook.get_cells().forEach(function(cell) { + var rerender = + cell.output_area && + cell.output_area.outputs.find(function(output) { + return output.data && output.data[MIME_TYPE]; + }); + if (rerender) { + that.notebook.render_cell_output(cell); + } + }); + }); + }); + + // Create the actions and menu + this._init_actions(); + this._init_menu(); + } + + loadClass(className, moduleName, moduleVersion) { + if (moduleName === '@jupyter-widgets/controls') { + return Promise.resolve(lib$3[className]); + } else if (moduleName === '@jupyter-widgets/base') { + return Promise.resolve(lib$1[className]); + } else if (moduleName == '@jupyter-widgets/output') { + return Promise.resolve(widget_output$1[className]); + } else { + return new Promise(function(resolve, reject) { + window.require([moduleName], resolve, reject); + }).then(function(mod) { + if (mod[className]) { + return mod[className]; + } else { + return Promise.reject( + 'Class ' + className + ' not found in module ' + moduleName + ); + } + }); + } + } + + /** + * Registers manager level actions with the notebook actions list + */ + _init_actions() { + var notifier = Jupyter.notification_area.widget('widgets'); + this.saveWidgetsAction = { + handler: function() { + this.get_state({ + drop_defaults: true + }).then(function(state) { + Jupyter.notebook.metadata.widgets = { + 'application/vnd.jupyter.widget-state+json': state + }; + Jupyter.menubar.actions + .get('jupyter-notebook:save-notebook') + .handler({ + notebook: Jupyter.notebook + }); + }); + }.bind(this), + icon: 'fa-truck', + help: + 'Save the notebook with the widget state information for static rendering' + }; + Jupyter.menubar.actions.register( + this.saveWidgetsAction, + 'save-with-widgets', + 'widgets' + ); + + this.clearWidgetsAction = { + handler: function() { + delete Jupyter.notebook.metadata.widgets; + Jupyter.menubar.actions.get('jupyter-notebook:save-notebook').handler({ + notebook: Jupyter.notebook + }); + }, + help: 'Clear the widget state information from the notebook' + }; + Jupyter.menubar.actions.register( + this.saveWidgetsAction, + 'save-clear-widgets', + 'widgets' + ); + } + + /** + * Initialize the widget menu + */ + _init_menu() { + // Add a widgets menubar item, before help. + var widgetsMenu = document.createElement('li'); + widgetsMenu.classList.add('dropdown'); + var helpMenu = document.querySelector('#help_menu').parentElement; + helpMenu.parentElement.insertBefore(widgetsMenu, helpMenu); + + var widgetsMenuLink = document.createElement('a'); + widgetsMenuLink.setAttribute('href', '#'); + widgetsMenuLink.setAttribute('data-toggle', 'dropdown'); + widgetsMenuLink.classList.add('dropdown-toggle'); + widgetsMenuLink.innerText = 'Widgets'; + widgetsMenu.appendChild(widgetsMenuLink); + + var widgetsSubmenu = document.createElement('ul'); + widgetsSubmenu.setAttribute('id', 'widget-submenu'); + widgetsSubmenu.classList.add('dropdown-menu'); + widgetsMenu.appendChild(widgetsSubmenu); + + var divider = document.createElement('ul'); + divider.classList.add('divider'); + + widgetsSubmenu.appendChild( + this._createMenuItem('Save Notebook Widget State', this.saveWidgetsAction) + ); + widgetsSubmenu.appendChild( + this._createMenuItem( + 'Clear Notebook Widget State', + this.clearWidgetsAction + ) + ); + widgetsSubmenu.appendChild(divider); + widgetsSubmenu.appendChild( + this._createMenuItem('Download Widget State', save_state_1.action) + ); + widgetsSubmenu.appendChild( + this._createMenuItem('Embed Widgets', embed_widgets_1.action) + ); + } + + /** + * Creates a menu item for an action. + * @param {string} title - display string for the menu item + * @param {Action} action + * @return {HTMLElement} menu item + */ + _createMenuItem(title, action) { + var item = document.createElement('li'); + item.setAttribute('title', action.help); + + var itemLink = document.createElement('a'); + itemLink.setAttribute('href', '#'); + itemLink.innerText = title; + item.appendChild(itemLink); + + item.onclick = action.handler; + return item; + } + + _create_comm(comm_target_name, comm_id, data, metadata, buffers) { + var that = this; + return this._get_connected_kernel().then(function(kernel) { + if (data || metadata) { + return new_comm( + kernel.comm_manager, + comm_target_name, + data, + that.callbacks(), + metadata, + comm_id, + buffers + ); + } else { + // Construct a comm that already is open on the kernel side. We + // don't want to send an open message, which would supersede the + // kernel comm object, so we instead do by hand the necessary parts + // of the new_comm call above. + return new Promise(function(resolve) { + requirejs(['services/kernels/comm'], function(comm) { + var new_comm = new comm.Comm(comm_target_name, comm_id); + kernel.comm_manager.register_comm(new_comm); + resolve(new_comm); + }); + }); + } + }); + } + + _get_comm_info() { + return this._get_connected_kernel().then(function(kernel) { + return new Promise(function(resolve, reject) { + kernel.comm_info('jupyter.widget', function(msg) { + resolve(msg['content']['comms']); + }); + }); + }); + } + + _get_connected_kernel() { + /** + * Gets a promise for a connected kernel + */ + var that = this; + return new Promise(function(resolve, reject) { + if ( + that.comm_manager && + that.comm_manager.kernel && + that.comm_manager.kernel.is_connected() + ) { + resolve(that.comm_manager.kernel); + } else { + that.notebook.events.on('kernel_connected.Kernel', function( + event, + data + ) { + resolve(data.kernel); + }); + } + }); + } + + setViewOptions(options) { + var options = options || {}; + if (!options.output && options.parent) { + // use the parent output if we don't have one + options.output = options.parent.options.output; + } + if (options.output) { + options.iopub_callbacks = { + output: options.output.handle_output.bind(options.output), + clear_output: options.output.handle_clear_output.bind(options.output) + }; + } + return options; + } + + /** + * Callback handlers for a specific view + */ + callbacks(view) { + var callbacks = ManagerBase$2.prototype.callbacks.call(this, view); + if (view && view.options.iopub_callbacks) { + callbacks.iopub = view.options.iopub_callbacks; + } + return callbacks; + } + } + + /** + * List of widget managers in *reverse* order + * (_managers[0] is the most recent) + */ + WidgetManager._managers = []; + + var manager = /*#__PURE__*/Object.freeze({ + WidgetManager: WidgetManager + }); + + var css$1 = ".lm-Widget,.p-Widget{box-sizing:border-box;position:relative;overflow:hidden;cursor:default}.lm-Widget.lm-mod-hidden,.p-Widget.p-mod-hidden{display:none!important}.lm-CommandPalette,.p-CommandPalette{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-CommandPalette-search,.p-CommandPalette-search{flex:0 0 auto}.lm-CommandPalette-content,.p-CommandPalette-content{flex:1 1 auto;margin:0;padding:0;min-height:0;overflow:auto;list-style-type:none}.lm-CommandPalette-header,.p-CommandPalette-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lm-CommandPalette-item,.p-CommandPalette-item{display:flex;flex-direction:row}.lm-CommandPalette-itemIcon,.p-CommandPalette-itemIcon{flex:0 0 auto}.lm-CommandPalette-itemContent,.p-CommandPalette-itemContent{flex:1 1 auto;overflow:hidden}.lm-CommandPalette-itemShortcut,.p-CommandPalette-itemShortcut{flex:0 0 auto}.lm-CommandPalette-itemLabel,.p-CommandPalette-itemLabel{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.lm-close-icon{border:1px solid transparent;background-color:transparent;position:absolute;z-index:1;right:3%;top:0;bottom:0;margin:auto;padding:7px 0;display:none;vertical-align:middle;outline:0;cursor:pointer}.lm-close-icon:after{content:\"X\";display:block;width:15px;height:15px;text-align:center;color:#000;font-weight:400;font-size:12px;cursor:pointer}.lm-DockPanel,.lm-DockPanel-widget,.p-DockPanel,.p-DockPanel-widget{z-index:0}.lm-DockPanel-tabBar,.p-DockPanel-tabBar{z-index:1}.lm-DockPanel-handle,.p-DockPanel-handle{z-index:2}.lm-DockPanel-handle.lm-mod-hidden,.p-DockPanel-handle.p-mod-hidden{display:none!important}.lm-DockPanel-handle:after,.p-DockPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.lm-DockPanel-handle[data-orientation=horizontal],.p-DockPanel-handle[data-orientation=horizontal]{cursor:ew-resize}.lm-DockPanel-handle[data-orientation=vertical],.p-DockPanel-handle[data-orientation=vertical]{cursor:ns-resize}.lm-DockPanel-handle[data-orientation=horizontal]:after,.p-DockPanel-handle[data-orientation=horizontal]:after{left:50%;min-width:8px;transform:translateX(-50%)}.lm-DockPanel-handle[data-orientation=vertical]:after,.p-DockPanel-handle[data-orientation=vertical]:after{top:50%;min-height:8px;transform:translateY(-50%)}.lm-DockPanel-overlay,.p-DockPanel-overlay{z-index:3;box-sizing:border-box;pointer-events:none}.lm-DockPanel-overlay.lm-mod-hidden,.p-DockPanel-overlay.p-mod-hidden{display:none!important}.lm-Menu,.p-Menu{z-index:10000;position:absolute;white-space:nowrap;overflow-x:hidden;overflow-y:auto;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-Menu-content,.p-Menu-content{margin:0;padding:0;display:table;list-style-type:none}.lm-Menu-item,.p-Menu-item{display:table-row}.lm-Menu-item.lm-mod-collapsed,.lm-Menu-item.lm-mod-hidden,.p-Menu-item.p-mod-collapsed,.p-Menu-item.p-mod-hidden{display:none!important}.lm-Menu-itemIcon,.lm-Menu-itemSubmenuIcon,.p-Menu-itemIcon,.p-Menu-itemSubmenuIcon{display:table-cell;text-align:center}.lm-Menu-itemLabel,.p-Menu-itemLabel{display:table-cell;text-align:left}.lm-Menu-itemShortcut,.p-Menu-itemShortcut{display:table-cell;text-align:right}.lm-MenuBar,.p-MenuBar{outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-MenuBar-content,.p-MenuBar-content{margin:0;padding:0;display:flex;flex-direction:row;list-style-type:none}.lm-MenuBar-item,.p--MenuBar-item{box-sizing:border-box}.lm-MenuBar-itemIcon,.lm-MenuBar-itemLabel,.p-MenuBar-itemIcon,.p-MenuBar-itemLabel{display:inline-block}.lm-ScrollBar,.p-ScrollBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-ScrollBar[data-orientation=horizontal],.p-ScrollBar[data-orientation=horizontal]{flex-direction:row}.lm-ScrollBar[data-orientation=vertical],.p-ScrollBar[data-orientation=vertical]{flex-direction:column}.lm-ScrollBar-button,.p-ScrollBar-button{box-sizing:border-box;flex:0 0 auto}.lm-ScrollBar-track,.p-ScrollBar-track{box-sizing:border-box;position:relative;overflow:hidden;flex:1 1 auto}.lm-ScrollBar-thumb,.p-ScrollBar-thumb{box-sizing:border-box;position:absolute}.lm-SplitPanel-child,.p-SplitPanel-child{z-index:0}.lm-SplitPanel-handle,.p-SplitPanel-handle{z-index:1}.lm-SplitPanel-handle.lm-mod-hidden,.p-SplitPanel-handle.p-mod-hidden{display:none!important}.lm-SplitPanel-handle:after,.p-SplitPanel-handle:after{position:absolute;top:0;left:0;width:100%;height:100%;content:\"\"}.lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle,.p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle{cursor:ew-resize}.lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle,.p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle{cursor:ns-resize}.lm-SplitPanel[data-orientation=horizontal]>.lm-SplitPanel-handle:after,.p-SplitPanel[data-orientation=horizontal]>.p-SplitPanel-handle:after{left:50%;min-width:8px;transform:translateX(-50%)}.lm-SplitPanel[data-orientation=vertical]>.lm-SplitPanel-handle:after,.p-SplitPanel[data-orientation=vertical]>.p-SplitPanel-handle:after{top:50%;min-height:8px;transform:translateY(-50%)}.lm-TabBar,.p-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.lm-TabBar[data-orientation=horizontal],.p-TabBar[data-orientation=horizontal]{flex-direction:row}.lm-TabBar[data-orientation=vertical],.p-TabBar[data-orientation=vertical]{flex-direction:column}.lm-TabBar-content,.p-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.lm-TabBar[data-orientation=horizontal]>.lm-TabBar-content,.p-TabBar[data-orientation=horizontal]>.p-TabBar-content{flex-direction:row}.lm-TabBar[data-orientation=vertical]>.lm-TabBar-content,.p-TabBar[data-orientation=vertical]>.p-TabBar-content{flex-direction:column}.lm-TabBar-tab,.p-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.lm-TabBar-tabCloseIcon,.lm-TabBar-tabIcon,.p-TabBar-tabCloseIcon,.p-TabBar-tabIcon{flex:0 0 auto}.lm-TabBar-tabLabel,.p-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.lm-TabBar-tab.lm-mod-hidden,.p-TabBar-tab.p-mod-hidden{display:none!important}.lm-TabBar.lm-mod-dragging .lm-TabBar-tab,.p-TabBar.p-mod-dragging .p-TabBar-tab{position:relative}.lm-TabBar.lm-mod-dragging[data-orientation=horizontal] .lm-TabBar-tab,.p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab{left:0;transition:left .15s ease}.lm-TabBar.lm-mod-dragging[data-orientation=vertical] .lm-TabBar-tab,.p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab{top:0;transition:top .15s ease}.p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging{transition:none}.lm-TabPanel-tabBar,.p-TabPanel-tabBar{z-index:1}.lm-TabPanel-stackedPanel,.p-TabPanel-stackedPanel{z-index:0}"; + styleInject(css$1); + + var style = /*#__PURE__*/Object.freeze({ + 'default': css$1 + }); + + var css$2 = ".jupyter-widgets-disconnected:before{content:\"\\f127\";display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#d9534f;padding:3px;align-self:flex-start}"; + styleInject(css$2); + + var css$3 = /*#__PURE__*/Object.freeze({ + 'default': css$2 + }); + + var css$4 = ":root{--md-red-50:#ffebee;--md-red-100:#ffcdd2;--md-red-200:#ef9a9a;--md-red-300:#e57373;--md-red-400:#ef5350;--md-red-500:#f44336;--md-red-600:#e53935;--md-red-700:#d32f2f;--md-red-800:#c62828;--md-red-900:#b71c1c;--md-red-A100:#ff8a80;--md-red-A200:#ff5252;--md-red-A400:#ff1744;--md-red-A700:#d50000;--md-pink-50:#fce4ec;--md-pink-100:#f8bbd0;--md-pink-200:#f48fb1;--md-pink-300:#f06292;--md-pink-400:#ec407a;--md-pink-500:#e91e63;--md-pink-600:#d81b60;--md-pink-700:#c2185b;--md-pink-800:#ad1457;--md-pink-900:#880e4f;--md-pink-A100:#ff80ab;--md-pink-A200:#ff4081;--md-pink-A400:#f50057;--md-pink-A700:#c51162;--md-purple-50:#f3e5f5;--md-purple-100:#e1bee7;--md-purple-200:#ce93d8;--md-purple-300:#ba68c8;--md-purple-400:#ab47bc;--md-purple-500:#9c27b0;--md-purple-600:#8e24aa;--md-purple-700:#7b1fa2;--md-purple-800:#6a1b9a;--md-purple-900:#4a148c;--md-purple-A100:#ea80fc;--md-purple-A200:#e040fb;--md-purple-A400:#d500f9;--md-purple-A700:#a0f;--md-deep-purple-50:#ede7f6;--md-deep-purple-100:#d1c4e9;--md-deep-purple-200:#b39ddb;--md-deep-purple-300:#9575cd;--md-deep-purple-400:#7e57c2;--md-deep-purple-500:#673ab7;--md-deep-purple-600:#5e35b1;--md-deep-purple-700:#512da8;--md-deep-purple-800:#4527a0;--md-deep-purple-900:#311b92;--md-deep-purple-A100:#b388ff;--md-deep-purple-A200:#7c4dff;--md-deep-purple-A400:#651fff;--md-deep-purple-A700:#6200ea;--md-indigo-50:#e8eaf6;--md-indigo-100:#c5cae9;--md-indigo-200:#9fa8da;--md-indigo-300:#7986cb;--md-indigo-400:#5c6bc0;--md-indigo-500:#3f51b5;--md-indigo-600:#3949ab;--md-indigo-700:#303f9f;--md-indigo-800:#283593;--md-indigo-900:#1a237e;--md-indigo-A100:#8c9eff;--md-indigo-A200:#536dfe;--md-indigo-A400:#3d5afe;--md-indigo-A700:#304ffe;--md-blue-50:#e3f2fd;--md-blue-100:#bbdefb;--md-blue-200:#90caf9;--md-blue-300:#64b5f6;--md-blue-400:#42a5f5;--md-blue-500:#2196f3;--md-blue-600:#1e88e5;--md-blue-700:#1976d2;--md-blue-800:#1565c0;--md-blue-900:#0d47a1;--md-blue-A100:#82b1ff;--md-blue-A200:#448aff;--md-blue-A400:#2979ff;--md-blue-A700:#2962ff;--md-light-blue-50:#e1f5fe;--md-light-blue-100:#b3e5fc;--md-light-blue-200:#81d4fa;--md-light-blue-300:#4fc3f7;--md-light-blue-400:#29b6f6;--md-light-blue-500:#03a9f4;--md-light-blue-600:#039be5;--md-light-blue-700:#0288d1;--md-light-blue-800:#0277bd;--md-light-blue-900:#01579b;--md-light-blue-A100:#80d8ff;--md-light-blue-A200:#40c4ff;--md-light-blue-A400:#00b0ff;--md-light-blue-A700:#0091ea;--md-cyan-50:#e0f7fa;--md-cyan-100:#b2ebf2;--md-cyan-200:#80deea;--md-cyan-300:#4dd0e1;--md-cyan-400:#26c6da;--md-cyan-500:#00bcd4;--md-cyan-600:#00acc1;--md-cyan-700:#0097a7;--md-cyan-800:#00838f;--md-cyan-900:#006064;--md-cyan-A100:#84ffff;--md-cyan-A200:#18ffff;--md-cyan-A400:#00e5ff;--md-cyan-A700:#00b8d4;--md-teal-50:#e0f2f1;--md-teal-100:#b2dfdb;--md-teal-200:#80cbc4;--md-teal-300:#4db6ac;--md-teal-400:#26a69a;--md-teal-500:#009688;--md-teal-600:#00897b;--md-teal-700:#00796b;--md-teal-800:#00695c;--md-teal-900:#004d40;--md-teal-A100:#a7ffeb;--md-teal-A200:#64ffda;--md-teal-A400:#1de9b6;--md-teal-A700:#00bfa5;--md-green-50:#e8f5e9;--md-green-100:#c8e6c9;--md-green-200:#a5d6a7;--md-green-300:#81c784;--md-green-400:#66bb6a;--md-green-500:#4caf50;--md-green-600:#43a047;--md-green-700:#388e3c;--md-green-800:#2e7d32;--md-green-900:#1b5e20;--md-green-A100:#b9f6ca;--md-green-A200:#69f0ae;--md-green-A400:#00e676;--md-green-A700:#00c853;--md-light-green-50:#f1f8e9;--md-light-green-100:#dcedc8;--md-light-green-200:#c5e1a5;--md-light-green-300:#aed581;--md-light-green-400:#9ccc65;--md-light-green-500:#8bc34a;--md-light-green-600:#7cb342;--md-light-green-700:#689f38;--md-light-green-800:#558b2f;--md-light-green-900:#33691e;--md-light-green-A100:#ccff90;--md-light-green-A200:#b2ff59;--md-light-green-A400:#76ff03;--md-light-green-A700:#64dd17;--md-lime-50:#f9fbe7;--md-lime-100:#f0f4c3;--md-lime-200:#e6ee9c;--md-lime-300:#dce775;--md-lime-400:#d4e157;--md-lime-500:#cddc39;--md-lime-600:#c0ca33;--md-lime-700:#afb42b;--md-lime-800:#9e9d24;--md-lime-900:#827717;--md-lime-A100:#f4ff81;--md-lime-A200:#eeff41;--md-lime-A400:#c6ff00;--md-lime-A700:#aeea00;--md-yellow-50:#fffde7;--md-yellow-100:#fff9c4;--md-yellow-200:#fff59d;--md-yellow-300:#fff176;--md-yellow-400:#ffee58;--md-yellow-500:#ffeb3b;--md-yellow-600:#fdd835;--md-yellow-700:#fbc02d;--md-yellow-800:#f9a825;--md-yellow-900:#f57f17;--md-yellow-A100:#ffff8d;--md-yellow-A200:#ff0;--md-yellow-A400:#ffea00;--md-yellow-A700:#ffd600;--md-amber-50:#fff8e1;--md-amber-100:#ffecb3;--md-amber-200:#ffe082;--md-amber-300:#ffd54f;--md-amber-400:#ffca28;--md-amber-500:#ffc107;--md-amber-600:#ffb300;--md-amber-700:#ffa000;--md-amber-800:#ff8f00;--md-amber-900:#ff6f00;--md-amber-A100:#ffe57f;--md-amber-A200:#ffd740;--md-amber-A400:#ffc400;--md-amber-A700:#ffab00;--md-orange-50:#fff3e0;--md-orange-100:#ffe0b2;--md-orange-200:#ffcc80;--md-orange-300:#ffb74d;--md-orange-400:#ffa726;--md-orange-500:#ff9800;--md-orange-600:#fb8c00;--md-orange-700:#f57c00;--md-orange-800:#ef6c00;--md-orange-900:#e65100;--md-orange-A100:#ffd180;--md-orange-A200:#ffab40;--md-orange-A400:#ff9100;--md-orange-A700:#ff6d00;--md-deep-orange-50:#fbe9e7;--md-deep-orange-100:#ffccbc;--md-deep-orange-200:#ffab91;--md-deep-orange-300:#ff8a65;--md-deep-orange-400:#ff7043;--md-deep-orange-500:#ff5722;--md-deep-orange-600:#f4511e;--md-deep-orange-700:#e64a19;--md-deep-orange-800:#d84315;--md-deep-orange-900:#bf360c;--md-deep-orange-A100:#ff9e80;--md-deep-orange-A200:#ff6e40;--md-deep-orange-A400:#ff3d00;--md-deep-orange-A700:#dd2c00;--md-brown-50:#efebe9;--md-brown-100:#d7ccc8;--md-brown-200:#bcaaa4;--md-brown-300:#a1887f;--md-brown-400:#8d6e63;--md-brown-500:#795548;--md-brown-600:#6d4c41;--md-brown-700:#5d4037;--md-brown-800:#4e342e;--md-brown-900:#3e2723;--md-grey-50:#fafafa;--md-grey-100:#f5f5f5;--md-grey-200:#eee;--md-grey-300:#e0e0e0;--md-grey-400:#bdbdbd;--md-grey-500:#9e9e9e;--md-grey-600:#757575;--md-grey-700:#616161;--md-grey-800:#424242;--md-grey-900:#212121;--md-blue-grey-50:#eceff1;--md-blue-grey-100:#cfd8dc;--md-blue-grey-200:#b0bec5;--md-blue-grey-300:#90a4ae;--md-blue-grey-400:#78909c;--md-blue-grey-500:#607d8b;--md-blue-grey-600:#546e7a;--md-blue-grey-700:#455a64;--md-blue-grey-800:#37474f;--md-blue-grey-900:#263238;--jp-icon-search:none;--jp-ui-select-caret:none;--jp-border-width:1px;--jp-border-color0:var(--md-grey-700);--jp-border-color1:var(--md-grey-500);--jp-border-color2:var(--md-grey-300);--jp-border-color3:var(--md-grey-100);--jp-ui-icon-font-size:14px;--jp-ui-font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;--jp-ui-font-color0:#000;--jp-ui-font-color1:rgba(0,0,0,0.8);--jp-ui-font-color2:rgba(0,0,0,0.5);--jp-ui-font-color3:rgba(0,0,0,0.3);--jp-ui-inverse-font-color0:#fff;--jp-ui-inverse-font-color1:#fff;--jp-ui-inverse-font-color2:hsla(0,0%,100%,0.7);--jp-ui-inverse-font-color3:hsla(0,0%,100%,0.5);--jp-inverse-ui-font-color0:#fff;--jp-inverse-ui-font-color1:#fff;--jp-inverse-ui-font-color2:hsla(0,0%,100%,0.7);--jp-inverse-ui-font-color3:hsla(0,0%,100%,0.5);--jp-content-font-size:13px;--jp-content-line-height:1.5;--jp-content-font-color0:#000;--jp-content-font-color1:#000;--jp-content-font-color2:var(--md-grey-700);--jp-content-font-color3:var(--md-grey-500);--jp-ui-font-scale-factor:1.2;--jp-ui-font-size0:calc(var(--jp-ui-font-size1)/var(--jp-ui-font-scale-factor));--jp-ui-font-size1:13px;--jp-ui-font-size2:calc(var(--jp-ui-font-size1)*var(--jp-ui-font-scale-factor));--jp-ui-font-size3:calc(var(--jp-ui-font-size2)*var(--jp-ui-font-scale-factor));--jp-code-font-size:13px;--jp-code-line-height:1.307;--jp-code-padding:5px;--jp-code-font-family:monospace;--jp-layout-color0:#fff;--jp-layout-color1:#fff;--jp-layout-color2:var(--md-grey-200);--jp-layout-color3:var(--md-grey-400);--jp-brand-color0:var(--md-blue-700);--jp-brand-color1:var(--md-blue-500);--jp-brand-color2:var(--md-blue-300);--jp-brand-color3:var(--md-blue-100);--jp-accent-color0:var(--md-green-700);--jp-accent-color1:var(--md-green-500);--jp-accent-color2:var(--md-green-300);--jp-accent-color3:var(--md-green-100);--jp-warn-color0:var(--md-orange-700);--jp-warn-color1:var(--md-orange-500);--jp-warn-color2:var(--md-orange-300);--jp-warn-color3:var(--md-orange-100);--jp-error-color0:var(--md-red-700);--jp-error-color1:var(--md-red-500);--jp-error-color2:var(--md-red-300);--jp-error-color3:var(--md-red-100);--jp-success-color0:var(--md-green-700);--jp-success-color1:var(--md-green-500);--jp-success-color2:var(--md-green-300);--jp-success-color3:var(--md-green-100);--jp-info-color0:var(--md-cyan-700);--jp-info-color1:var(--md-cyan-500);--jp-info-color2:var(--md-cyan-300);--jp-info-color3:var(--md-cyan-100);--jp-cell-padding:5px;--jp-cell-editor-background:#f7f7f7;--jp-cell-editor-border-color:#cfcfcf;--jp-cell-editor-background-edit:var(--jp-ui-layout-color1);--jp-cell-editor-border-color-edit:var(--jp-brand-color1);--jp-cell-prompt-width:100px;--jp-cell-prompt-font-family:\"Roboto Mono\",monospace;--jp-cell-prompt-letter-spacing:0px;--jp-cell-prompt-opacity:1.0;--jp-cell-prompt-opacity-not-active:0.4;--jp-cell-prompt-font-color-not-active:var(--md-grey-700);--jp-cell-inprompt-font-color:#307fc1;--jp-cell-outprompt-font-color:#bf5b3d;--jp-notebook-padding:10px;--jp-notebook-scroll-padding:100px;--jp-console-background:var(--md-grey-100);--jp-toolbar-border-color:var(--md-grey-400);--jp-toolbar-micro-height:8px;--jp-toolbar-background:var(--jp-layout-color0);--jp-toolbar-box-shadow:0px 0px 2px 0px rgba(0,0,0,0.24);--jp-toolbar-header-margin:4px 4px 0px 4px;--jp-toolbar-active-background:var(--md-grey-300)}.jupyter-widgets.widget-tab>.p-TabBar{display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter-widgets.widget-tab>.p-TabBar[data-orientation=horizontal]{flex-direction:row}.jupyter-widgets.widget-tab>.p-TabBar[data-orientation=vertical]{flex-direction:column}.jupyter-widgets.widget-tab>.p-TabBar>.p-TabBar-content{margin:0;padding:0;display:flex;flex:1 1 auto;list-style-type:none}.jupyter-widgets.widget-tab>.p-TabBar[data-orientation=horizontal]>.p-TabBar-content{flex-direction:row}.jupyter-widgets.widget-tab>.p-TabBar[data-orientation=vertical]>.p-TabBar-content{flex-direction:column}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tab{display:flex;flex-direction:row;box-sizing:border-box;overflow:hidden}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tabCloseIcon,.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tabIcon{flex:0 0 auto}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tabLabel{flex:1 1 auto;overflow:hidden;white-space:nowrap}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tab.p-mod-hidden{display:none!important}.jupyter-widgets.widget-tab>.p-TabBar.p-mod-dragging .p-TabBar-tab{position:relative}.jupyter-widgets.widget-tab>.p-TabBar.p-mod-dragging[data-orientation=horizontal] .p-TabBar-tab{left:0;transition:left .15s ease}.jupyter-widgets.widget-tab>.p-TabBar.p-mod-dragging[data-orientation=vertical] .p-TabBar-tab{top:0;transition:top .15s ease}.jupyter-widgets.widget-tab>.p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging{transition:none}:root{--jp-widgets-color:var(--jp-content-font-color1);--jp-widgets-label-color:var(--jp-widgets-color);--jp-widgets-readout-color:var(--jp-widgets-color);--jp-widgets-font-size:var(--jp-ui-font-size1);--jp-widgets-margin:2px;--jp-widgets-inline-height:28px;--jp-widgets-inline-width:300px;--jp-widgets-inline-width-short:calc(var(--jp-widgets-inline-width)/2 - var(--jp-widgets-margin));--jp-widgets-inline-width-tiny:calc(var(--jp-widgets-inline-width-short)/2 - var(--jp-widgets-margin));--jp-widgets-inline-margin:4px;--jp-widgets-inline-label-width:80px;--jp-widgets-border-width:var(--jp-border-width);--jp-widgets-vertical-height:200px;--jp-widgets-horizontal-tab-height:24px;--jp-widgets-horizontal-tab-width:144px;--jp-widgets-horizontal-tab-top-border:2px;--jp-widgets-progress-thickness:20px;--jp-widgets-container-padding:15px;--jp-widgets-input-padding:4px;--jp-widgets-radio-item-height-adjustment:8px;--jp-widgets-radio-item-height:calc(var(--jp-widgets-inline-height) - var(--jp-widgets-radio-item-height-adjustment));--jp-widgets-slider-track-thickness:4px;--jp-widgets-slider-border-width:var(--jp-widgets-border-width);--jp-widgets-slider-handle-size:16px;--jp-widgets-slider-handle-border-color:var(--jp-border-color1);--jp-widgets-slider-handle-background-color:var(--jp-layout-color1);--jp-widgets-slider-active-handle-color:var(--jp-brand-color1);--jp-widgets-menu-item-height:24px;--jp-widgets-dropdown-arrow:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAxOCI+PHBhdGggZD0iTTUuMiA1LjlMOSA5LjdsMy44LTMuOEwxNCA3LjFsLTQuOSA1LTQuOS01IDEtMS4yeiIvPjxwYXRoIGQ9Ik0wLS42aDE4djE4SDB2LTE4eiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==\");--jp-widgets-input-color:var(--jp-ui-font-color1);--jp-widgets-input-background-color:var(--jp-layout-color1);--jp-widgets-input-border-color:var(--jp-border-color1);--jp-widgets-input-focus-border-color:var(--jp-brand-color2);--jp-widgets-input-border-width:var(--jp-widgets-border-width);--jp-widgets-disabled-opacity:0.6;--md-shadow-key-umbra-opacity:0.2;--md-shadow-key-penumbra-opacity:0.14;--md-shadow-ambient-shadow-opacity:0.12}.jupyter-widgets{margin:var(--jp-widgets-margin);box-sizing:border-box;color:var(--jp-widgets-color);overflow:visible}.jupyter-widgets.jupyter-widgets-disconnected:before{line-height:var(--jp-widgets-inline-height);height:var(--jp-widgets-inline-height)}.jp-Output-result>.jupyter-widgets{margin-left:0;margin-right:0}.widget-inline-hbox{box-sizing:border-box;display:flex;flex-direction:row;align-items:baseline}.widget-inline-vbox{box-sizing:border-box;display:flex;flex-direction:column;align-items:center}.widget-box{display:flex}.widget-box,.widget-gridbox{box-sizing:border-box;margin:0;overflow:auto}.widget-gridbox{display:grid}.widget-hbox{flex-direction:row}.widget-vbox{flex-direction:column}.jupyter-button{padding:0 10px;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;font-size:var(--jp-widgets-font-size);cursor:pointer;height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height);box-shadow:none;color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color2);border:none;user-select:none}.jupyter-button i.fa{margin-right:var(--jp-widgets-inline-margin);pointer-events:none}.jupyter-button:empty:before{content:\"\\200b\"}.jupyter-widgets.jupyter-button:disabled{opacity:var(--jp-widgets-disabled-opacity)}.jupyter-button i.fa.center{margin-right:0}.jupyter-button:focus:enabled,.jupyter-button:hover:enabled{box-shadow:0 2px 2px 0 rgba(0,0,0,var(--md-shadow-key-penumbra-opacity)),0 3px 1px -2px rgba(0,0,0,var(--md-shadow-key-umbra-opacity)),0 1px 5px 0 rgba(0,0,0,var(--md-shadow-ambient-shadow-opacity))}.jupyter-button.mod-active,.jupyter-button:active{box-shadow:0 4px 5px 0 rgba(0,0,0,var(--md-shadow-key-penumbra-opacity)),0 1px 10px 0 rgba(0,0,0,var(--md-shadow-ambient-shadow-opacity)),0 2px 4px -1px rgba(0,0,0,var(--md-shadow-key-umbra-opacity));color:var(--jp-ui-font-color1);background-color:var(--jp-layout-color3)}.jupyter-button:focus:enabled{outline:1px solid var(--jp-widgets-input-focus-border-color)}.jupyter-button.mod-primary{color:var(--jp-ui-inverse-font-color1,var(--jp-inverse-ui-font-color1));background-color:var(--jp-brand-color1)}.jupyter-button.mod-primary.mod-active,.jupyter-button.mod-primary:active{color:var(--jp-ui-inverse-font-color0,var(--jp-inverse-ui-font-color0));background-color:var(--jp-brand-color0)}.jupyter-button.mod-success{color:var(--jp-ui-inverse-font-color1,var(--jp-inverse-ui-font-color1));background-color:var(--jp-success-color1)}.jupyter-button.mod-success.mod-active,.jupyter-button.mod-success:active{color:var(--jp-ui-inverse-font-color0,var(--jp-inverse-ui-font-color0));background-color:var(--jp-success-color0)}.jupyter-button.mod-info{color:var(--jp-ui-inverse-font-color1,var(--jp-inverse-ui-font-color1));background-color:var(--jp-info-color1)}.jupyter-button.mod-info.mod-active,.jupyter-button.mod-info:active{color:var(--jp-ui-inverse-font-color0,var(--jp-inverse-ui-font-color0));background-color:var(--jp-info-color0)}.jupyter-button.mod-warning{color:var(--jp-ui-inverse-font-color1,var(--jp-inverse-ui-font-color1));background-color:var(--jp-warn-color1)}.jupyter-button.mod-warning.mod-active,.jupyter-button.mod-warning:active{color:var(--jp-ui-inverse-font-color0,var(--jp-inverse-ui-font-color0));background-color:var(--jp-warn-color0)}.jupyter-button.mod-danger{color:var(--jp-ui-inverse-font-color1,var(--jp-inverse-ui-font-color1));background-color:var(--jp-error-color1)}.jupyter-button.mod-danger.mod-active,.jupyter-button.mod-danger:active{color:var(--jp-ui-inverse-font-color0,var(--jp-inverse-ui-font-color0));background-color:var(--jp-error-color0)}.widget-button,.widget-toggle-button,.widget-upload{width:var(--jp-widgets-inline-width-short)}.jupyter-widgets label{margin-bottom:0}.widget-label,.widget-label-basic{color:var(--jp-widgets-label-color);font-size:var(--jp-widgets-font-size);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:var(--jp-widgets-inline-height)}.widget-inline-hbox .widget-label{color:var(--jp-widgets-label-color);text-align:right;margin-right:calc(var(--jp-widgets-inline-margin)*2);width:var(--jp-widgets-inline-label-width);flex-shrink:0}.widget-inline-vbox .widget-label{color:var(--jp-widgets-label-color)}.widget-inline-vbox .widget-label,.widget-readout{text-align:center;line-height:var(--jp-widgets-inline-height)}.widget-readout{color:var(--jp-widgets-readout-color);font-size:var(--jp-widgets-font-size);height:var(--jp-widgets-inline-height);overflow:hidden;white-space:nowrap}.widget-readout.overflow{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.2),0 3px 1px -2px rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);-moz-box-shadow:0 2px 2px 0 rgba(0,0,0,.2),0 3px 1px -2px rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 2px 2px 0 rgba(0,0,0,.2),0 3px 1px -2px rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.widget-inline-hbox .widget-readout{text-align:center;max-width:var(--jp-widgets-inline-width-short);min-width:var(--jp-widgets-inline-width-tiny);margin-left:var(--jp-widgets-inline-margin)}.widget-inline-vbox .widget-readout{margin-top:var(--jp-widgets-inline-margin);width:inherit}.widget-checkbox{width:var(--jp-widgets-inline-width);height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height)}.widget-checkbox input[type=checkbox]{margin:0 calc(var(--jp-widgets-inline-margin)*2) 0 0;line-height:var(--jp-widgets-inline-height);font-size:large;flex-grow:1;flex-shrink:0;align-self:center}.widget-valid{height:var(--jp-widgets-inline-height);width:var(--jp-widgets-inline-width-short);font-size:var(--jp-widgets-font-size)}.widget-valid,.widget-valid i:before{line-height:var(--jp-widgets-inline-height)}.widget-valid i:before{margin-right:var(--jp-widgets-inline-margin);margin-left:var(--jp-widgets-inline-margin)}.widget-valid.mod-valid i:before{color:green}.widget-valid.mod-invalid i:before{color:red}.widget-valid.mod-valid .widget-valid-readout{display:none}.widget-text,.widget-textarea{width:var(--jp-widgets-inline-width)}.widget-text input[type=number],.widget-text input[type=password],.widget-text input[type=text]{height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height)}.widget-textarea textarea:disabled,.widget-text input[type=number]:disabled,.widget-text input[type=password]:disabled,.widget-text input[type=text]:disabled{opacity:var(--jp-widgets-disabled-opacity)}.widget-textarea textarea,.widget-text input[type=number],.widget-text input[type=password],.widget-text input[type=text]{box-sizing:border-box;border:var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);background-color:var(--jp-widgets-input-background-color);color:var(--jp-widgets-input-color);font-size:var(--jp-widgets-font-size);flex-grow:1;min-width:0;flex-shrink:1;outline:none!important}.widget-textarea textarea,.widget-text input[type=password],.widget-text input[type=text]{padding:var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)*2)}.widget-text input[type=number]{padding:var(--jp-widgets-input-padding) 0 var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)*2)}.widget-textarea textarea{height:inherit;width:inherit}.widget-textarea textarea:focus,.widget-text input:focus{border-color:var(--jp-widgets-input-focus-border-color)}.widget-slider .ui-slider{border:var(--jp-widgets-slider-border-width) solid var(--jp-layout-color3);background:var(--jp-layout-color3);box-sizing:border-box;position:relative;border-radius:0}.widget-slider .ui-slider .ui-slider-handle{outline:none!important;position:absolute;background-color:var(--jp-widgets-slider-handle-background-color);border:var(--jp-widgets-slider-border-width) solid var(--jp-widgets-slider-handle-border-color);box-sizing:border-box;z-index:1;background-image:none}.widget-slider .ui-slider .ui-slider-handle:focus,.widget-slider .ui-slider .ui-slider-handle:hover{background-color:var(--jp-widgets-slider-active-handle-color);border:var(--jp-widgets-slider-border-width) solid var(--jp-widgets-slider-active-handle-color)}.widget-slider .ui-slider .ui-slider-handle:active{background-color:var(--jp-widgets-slider-active-handle-color);border-color:var(--jp-widgets-slider-active-handle-color);z-index:2;transform:scale(1.2)}.widget-slider .ui-slider .ui-slider-range{position:absolute;background:var(--jp-widgets-slider-active-handle-color);z-index:0}.widget-hslider .ui-slider .ui-slider-handle{margin-top:calc((var(--jp-widgets-slider-track-thickness) - var(--jp-widgets-slider-handle-size))/2 - var(--jp-widgets-slider-border-width));margin-left:calc(var(--jp-widgets-slider-handle-size)/-2 + var(--jp-widgets-slider-border-width));top:0}.widget-hslider .ui-slider .ui-slider-handle,.widget-vslider .ui-slider .ui-slider-handle{width:var(--jp-widgets-slider-handle-size);height:var(--jp-widgets-slider-handle-size);border-radius:50%}.widget-vslider .ui-slider .ui-slider-handle{margin-bottom:calc(var(--jp-widgets-slider-handle-size)/-2 + var(--jp-widgets-slider-border-width));margin-left:calc((var(--jp-widgets-slider-track-thickness) - var(--jp-widgets-slider-handle-size))/2 - var(--jp-widgets-slider-border-width));left:0}.widget-hslider .ui-slider .ui-slider-range{height:calc(var(--jp-widgets-slider-track-thickness)*2);margin-top:calc((var(--jp-widgets-slider-track-thickness) - var(--jp-widgets-slider-track-thickness)*2)/2 - var(--jp-widgets-slider-border-width))}.widget-vslider .ui-slider .ui-slider-range{width:calc(var(--jp-widgets-slider-track-thickness)*2);margin-left:calc((var(--jp-widgets-slider-track-thickness) - var(--jp-widgets-slider-track-thickness)*2)/2 - var(--jp-widgets-slider-border-width))}.widget-hslider{width:var(--jp-widgets-inline-width);height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height);align-items:center}.widgets-slider .slider-container{overflow:visible}.widget-hslider .slider-container{height:var(--jp-widgets-inline-height);margin-left:calc(var(--jp-widgets-slider-handle-size) - var(--jp-widgets-slider-border-width));margin-right:calc(var(--jp-widgets-slider-handle-size) - var(--jp-widgets-slider-border-width));flex:1 1 var(--jp-widgets-inline-width-short)}.widget-hslider .ui-slider{height:var(--jp-widgets-slider-track-thickness);margin-top:calc((var(--jp-widgets-inline-height) - var(--jp-widgets-slider-track-thickness))/2);width:100%}.widget-vbox .widget-label{height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height)}.widget-vslider{height:var(--jp-widgets-vertical-height);width:var(--jp-widgets-inline-width-tiny)}.widget-vslider .slider-container{flex:1 1 var(--jp-widgets-inline-width-short);margin-left:auto;margin-right:auto;margin-bottom:calc(var(--jp-widgets-slider-handle-size) - var(--jp-widgets-slider-border-width));margin-top:calc(var(--jp-widgets-slider-handle-size) - var(--jp-widgets-slider-border-width));display:flex;flex-direction:column}.widget-vslider .ui-slider-vertical{width:var(--jp-widgets-slider-track-thickness);flex-grow:1;margin-left:auto;margin-right:auto}.progress-bar{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;height:var(--jp-widgets-inline-height);background-color:var(--jp-brand-color1)}.progress-bar-success{background-color:var(--jp-success-color1)}.progress-bar-info{background-color:var(--jp-info-color1)}.progress-bar-warning{background-color:var(--jp-warn-color1)}.progress-bar-danger{background-color:var(--jp-error-color1)}.progress{background-color:var(--jp-layout-color2);border:none;box-shadow:none}.widget-hprogress{height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height);width:var(--jp-widgets-inline-width);align-items:center}.widget-hprogress .progress{flex-grow:1;margin-top:var(--jp-widgets-input-padding);margin-bottom:var(--jp-widgets-input-padding);align-self:stretch;height:auto}.widget-vprogress{height:var(--jp-widgets-vertical-height);width:var(--jp-widgets-inline-width-tiny)}.widget-vprogress .progress{flex-grow:1;width:var(--jp-widgets-progress-thickness);margin-left:auto;margin-right:auto;margin-bottom:0}.widget-dropdown{height:var(--jp-widgets-inline-height);width:var(--jp-widgets-inline-width);line-height:var(--jp-widgets-inline-height)}.widget-dropdown>select{padding-right:20px;border:var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);border-radius:0;height:inherit;flex:1 1 var(--jp-widgets-inline-width-short);min-width:0;box-sizing:border-box;outline:none!important;box-shadow:none;background-color:var(--jp-widgets-input-background-color);color:var(--jp-widgets-input-color);font-size:var(--jp-widgets-font-size);vertical-align:top;padding-left:calc(var(--jp-widgets-input-padding)*2);appearance:none;-webkit-appearance:none;-moz-appearance:none;background-repeat:no-repeat;background-size:20px;background-position:100%;background-image:var(--jp-widgets-dropdown-arrow)}.widget-dropdown>select:focus{border-color:var(--jp-widgets-input-focus-border-color)}.widget-dropdown>select:disabled{opacity:var(--jp-widgets-disabled-opacity)}.widget-dropdown>select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.widget-select{width:var(--jp-widgets-inline-width);line-height:var(--jp-widgets-inline-height);align-items:flex-start}.widget-select>select{border:var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);background-color:var(--jp-widgets-input-background-color);color:var(--jp-widgets-input-color);font-size:var(--jp-widgets-font-size);flex:1 1 var(--jp-widgets-inline-width-short);outline:none!important;overflow:auto;height:inherit;padding-top:5px}.widget-select>select:focus{border-color:var(--jp-widgets-input-focus-border-color)}.wiget-select>select>option{padding-left:var(--jp-widgets-input-padding);padding-top:calc(var(--jp-widgets-inline-height) - var(--jp-widgets-font-size)/2);padding-bottom:calc(var(--jp-widgets-inline-height) - var(--jp-widgets-font-size)/2)}.widget-toggle-buttons,.wiget-select>select>option{line-height:var(--jp-widgets-inline-height)}.widget-toggle-buttons .widget-toggle-button{margin-left:var(--jp-widgets-margin);margin-right:var(--jp-widgets-margin)}.widget-toggle-buttons .jupyter-button:disabled{opacity:var(--jp-widgets-disabled-opacity)}.widget-radio{width:var(--jp-widgets-inline-width);line-height:var(--jp-widgets-inline-height)}.widget-radio-box{display:flex;flex-direction:column;align-items:stretch;box-sizing:border-box;flex-grow:1;margin-bottom:var(--jp-widgets-radio-item-height-adjustment)}.widget-radio-box label{font-size:var(--jp-widgets-font-size)}.widget-radio-box input,.widget-radio-box label{height:var(--jp-widgets-radio-item-height);line-height:var(--jp-widgets-radio-item-height)}.widget-radio-box input{margin:0 calc(var(--jp-widgets-input-padding)*2) 0 1px;float:left}.widget-colorpicker{width:var(--jp-widgets-inline-width);height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height)}.widget-colorpicker>.widget-colorpicker-input{flex-grow:1;flex-shrink:1;min-width:var(--jp-widgets-inline-width-tiny)}.widget-colorpicker input[type=color]{width:var(--jp-widgets-inline-height);height:var(--jp-widgets-inline-height);padding:0 2px;background:var(--jp-widgets-input-background-color);color:var(--jp-widgets-input-color);border:var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);border-left:none;flex-grow:0;flex-shrink:0;box-sizing:border-box;align-self:stretch;outline:none!important}.widget-colorpicker.concise input[type=color]{border-left:var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color)}.widget-colorpicker input[type=color]:focus,.widget-colorpicker input[type=text]:focus{border-color:var(--jp-widgets-input-focus-border-color)}.widget-colorpicker input[type=text]{flex-grow:1;outline:none!important;height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height);background:var(--jp-widgets-input-background-color);color:var(--jp-widgets-input-color);border:var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);font-size:var(--jp-widgets-font-size);padding:var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)*2);min-width:0;flex-shrink:1;box-sizing:border-box}.widget-colorpicker input[type=text]:disabled{opacity:var(--jp-widgets-disabled-opacity)}.widget-datepicker{width:var(--jp-widgets-inline-width);height:var(--jp-widgets-inline-height);line-height:var(--jp-widgets-inline-height)}.widget-datepicker input[type=date]{flex-grow:1;flex-shrink:1;min-width:0;outline:none!important;height:var(--jp-widgets-inline-height);border:var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);background-color:var(--jp-widgets-input-background-color);color:var(--jp-widgets-input-color);font-size:var(--jp-widgets-font-size);padding:var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)*2);box-sizing:border-box}.widget-datepicker input[type=date]:focus{border-color:var(--jp-widgets-input-focus-border-color)}.widget-datepicker input[type=date]:invalid{border-color:var(--jp-warn-color1)}.widget-datepicker input[type=date]:disabled{opacity:var(--jp-widgets-disabled-opacity)}.widget-play{width:var(--jp-widgets-inline-width-short);display:flex;align-items:stretch}.widget-play .jupyter-button{flex-grow:1;height:auto}.widget-play .jupyter-button:disabled{opacity:var(--jp-widgets-disabled-opacity)}.jupyter-widgets.widget-tab{display:flex;flex-direction:column}.jupyter-widgets.widget-tab>.p-TabBar{overflow-x:visible;overflow-y:visible}.jupyter-widgets.widget-tab>.p-TabBar>.p-TabBar-content{align-items:flex-end;min-width:0;min-height:0}.jupyter-widgets.widget-tab>.widget-tab-contents{width:100%;box-sizing:border-box;margin:0;background:var(--jp-layout-color1);color:var(--jp-ui-font-color1);border:var(--jp-border-width) solid var(--jp-border-color1);padding:var(--jp-widgets-container-padding);flex-grow:1;overflow:auto}.jupyter-widgets.widget-tab>.p-TabBar{font:var(--jp-widgets-font-size),Helvetica,Arial,sans-serif;min-height:calc(var(--jp-widgets-horizontal-tab-height) + var(--jp-border-width))}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tab{flex:0 1 var(--jp-widgets-horizontal-tab-width);min-width:35px;min-height:calc(var(--jp-widgets-horizontal-tab-height) + var(--jp-border-width));line-height:var(--jp-widgets-horizontal-tab-height);margin-left:calc(-1*var(--jp-border-width));padding:0 10px;background:var(--jp-layout-color2);color:var(--jp-ui-font-color2);border:var(--jp-border-width) solid var(--jp-border-color1);border-bottom:none;position:relative}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tab.p-mod-current{color:var(--jp-ui-font-color0);background:var(--jp-layout-color1);min-height:calc(var(--jp-widgets-horizontal-tab-height) + 2*var(--jp-border-width));transform:translateY(var(--jp-border-width));overflow:visible}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tab.p-mod-current:before{position:absolute;top:calc(-1*var(--jp-border-width));left:calc(-1*var(--jp-border-width));content:\"\";height:var(--jp-widgets-horizontal-tab-top-border);width:calc(100% + 2*var(--jp-border-width));background:var(--jp-brand-color1)}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tab:first-child{margin-left:0}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tab:hover:not(.p-mod-current){background:var(--jp-layout-color1);color:var(--jp-ui-font-color1)}.jupyter-widgets.widget-tab>.p-TabBar .p-mod-closable>.p-TabBar-tabCloseIcon{margin-left:4px}.jupyter-widgets.widget-tab>.p-TabBar .p-mod-closable>.p-TabBar-tabCloseIcon:before{font-family:FontAwesome;content:\"\\f00d\"}.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tabCloseIcon,.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tabIcon,.jupyter-widgets.widget-tab>.p-TabBar .p-TabBar-tabLabel{line-height:var(--jp-widgets-horizontal-tab-height)}.p-Collapse{display:flex;flex-direction:column;align-items:stretch}.p-Collapse-header{cursor:pointer;color:var(--jp-ui-font-color2);background-color:var(--jp-layout-color2);border:var(--jp-widgets-border-width) solid var(--jp-border-color1);padding:calc(var(--jp-widgets-container-padding)*2/3) var(--jp-widgets-container-padding);font-weight:700}.p-Collapse-header:hover{background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1)}.p-Collapse-open>.p-Collapse-header{background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color0);cursor:default;border-bottom:none}.p-Collapse-contents{padding:var(--jp-widgets-container-padding);background-color:var(--jp-layout-color1);color:var(--jp-ui-font-color1);border-left:var(--jp-widgets-border-width) solid var(--jp-border-color1);border-right:var(--jp-widgets-border-width) solid var(--jp-border-color1);border-bottom:var(--jp-widgets-border-width) solid var(--jp-border-color1);overflow:auto}.p-Accordion{display:flex;flex-direction:column;align-items:stretch}.p-Accordion .p-Collapse{margin-bottom:0}.p-Accordion .p-Collapse+.p-Collapse{margin-top:4px}.widget-html,.widget-htmlmath{font-size:var(--jp-widgets-font-size)}.widget-html>.widget-html-content,.widget-htmlmath>.widget-html-content{align-self:stretch;flex-grow:1;flex-shrink:1;line-height:var(--jp-widgets-inline-height);position:relative}.widget-image{max-width:100%;height:auto}"; + styleInject(css$4); + + var widgets = /*#__PURE__*/Object.freeze({ + 'default': css$4 + }); + + getCjsExportFromNamespace(style); + + getCjsExportFromNamespace(css$3); + + getCjsExportFromNamespace(widgets); + + window['requirejs'].config({ + map: { + '*': { + '@jupyter-widgets/controls': 'nbextensions/jupyter-js-widgets/extension', + '@jupyter-widgets/base': 'nbextensions/jupyter-js-widgets/extension', + '@jupyter-widgets/output': 'nbextensions/jupyter-js-widgets/extension' + } + } + }); + + var MIME_TYPE$1 = 'application/vnd.jupyter.widget-view+json'; + var CLASS_NAME = 'jupyter-widgets-view'; + + + + + + + /** + * Create a widget manager for a kernel instance. + */ + var handle_kernel = function(Jupyter, kernel) { + if (kernel.comm_manager && kernel.widget_manager === undefined) { + // Clear any old widget manager + if (Jupyter.WidgetManager) { + Jupyter.WidgetManager._managers[0].clear_state(); + } + + // Create a new widget manager instance. Use the global + // Jupyter.notebook handle. + var manager$1 = new manager.WidgetManager(kernel.comm_manager, Jupyter.notebook); + + // For backwards compatibility and interactive use. + Jupyter.WidgetManager = manager.WidgetManager; + + // Store a handle to the manager so we know not to + // another for this kernel. This also is a convenience + // for the user. + kernel.widget_manager = manager$1; + } + }; + + function register_events(Jupyter, events, outputarea) { + // If a kernel already exists, create a widget manager. + if (Jupyter.notebook && Jupyter.notebook.kernel) { + handle_kernel(Jupyter, Jupyter.notebook.kernel); + } + // When the kernel is created, create a widget manager. + events.on('kernel_created.Kernel kernel_created.Session', function( + event, + data + ) { + handle_kernel(Jupyter, data.kernel); + }); + + // When a kernel dies, disconnect the widgets. + events.on( + 'kernel_killed.Session kernel_killed.Kernel kernel_restarting.Kernel', + function(event, data) { + var kernel = data.kernel; + if (kernel && kernel.widget_manager) { + kernel.widget_manager.disconnect(); + } + } + ); + + /** + * The views on this page. We keep this list so that we can call the view.remove() + * method when a view is removed from the page. + */ + var views = {}; + var removeView = function(event, data) { + var output = data.cell ? data.cell.output_area : data.output_area; + var viewids = output ? output._jupyterWidgetViews : void 0; + if (viewids) { + viewids.forEach(function(id) { + // this may be called after the widget is pulled off the page + // so we temporarily put it back on the page as a kludge + // so that Lumino can trigger the appropriate detach signals + var view = views[id]; + view.el.style.display = 'none'; + document.body.appendChild(view.el); + view.remove(); + delete views[id]; + }); + output._jupyterWidgetViews = []; + } + }; + + // Deleting a cell does *not* clear the outputs first. + events.on('delete.Cell', removeView); + // add an event to the notebook element for *any* outputs that are cleared. + Jupyter.notebook.container.on('clearing', '.output', removeView); + + // For before https://github.com/jupyter/notebook/pull/2411 is merged and + // released. This does not handle the case where an empty cell is executed + // to clear input. + events.on('execute.CodeCell', removeView); + events.on('clear_output.CodeCell', removeView); + + /** + * Render data to the output area. + */ + function render(output, data, node) { + // data is a model id + var manager = + Jupyter.notebook && + Jupyter.notebook.kernel && + Jupyter.notebook.kernel.widget_manager; + if (!manager) { + node.textContent = + 'Error rendering Jupyter widget: missing widget manager'; + return; + } + + // Missing model id means the view was removed. Hide this element. + if (data.model_id === '') { + node.style.display = 'none'; + return; + } + + var model = manager.get_model(data.model_id); + if (model) { + model + .then(function(model) { + return manager.create_view(model, { output: output }); + }) + .then(function(view) { + var id = view.cid; + output._jupyterWidgetViews = output._jupyterWidgetViews || []; + output._jupyterWidgetViews.push(id); + views[id] = view; + index_es6.Widget.attach(view.pWidget, node); + + // Make the node completely disappear if the view is removed. + view.once('remove', () => { + // Since we have a mutable reference to the data, delete the + // model id to indicate the view is removed. + data.model_id = ''; + node.style.display = 'none'; + }); + }); + } else { + node.textContent = + 'A Jupyter widget could not be displayed because the widget state could not be found. This could happen if the kernel storing the widget is no longer available, or if the widget state was not saved in the notebook. You may be able to create the widget by running the appropriate cells.'; + } + } + + // `this` is the output area we are appending to + var append_mime = function(json, md, element) { + var toinsert = this.create_output_subarea(md, CLASS_NAME, MIME_TYPE$1); + this.keyboard_manager.register_events(toinsert); + render(this, json, toinsert[0]); + element.append(toinsert); + return toinsert; + }; + // Register mime type with the output area + outputarea.OutputArea.prototype.register_mime_type(MIME_TYPE$1, append_mime, { + // An output widget could contain arbitrary user javascript + safe: false, + // Index of renderer in `output_area.display_order` + index: 0 + }); + } + + function load_ipython_extension() { + return new Promise(function(resolve) { + requirejs( + ['base/js/namespace', 'base/js/events', 'notebook/js/outputarea'], + function(Jupyter, events, outputarea) { + + + + register_events(Jupyter, events, outputarea); + resolve(); + } + ); + }); + } + + var extension = { + load_ipython_extension: load_ipython_extension, + ...lib$3, + ...lib$1, + ...widget_output$1 + }; + var extension_1 = extension.load_ipython_extension; + + var lodash = createCommonjsModule(function (module, exports) { + (function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined$1; + + /** Used as the semantic version number. */ + var VERSION = '4.17.15'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined$1 : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined$1 : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined$1) { + result = result === undefined$1 ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined$1 : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined$1, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined$1, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined$1, + symIterator = Symbol ? Symbol.iterator : undefined$1, + symToStringTag = Symbol ? Symbol.toStringTag : undefined$1; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined$1, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined$1, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined$1, + symbolToString = symbolProto ? symbolProto.toString : undefined$1; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined$1; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined$1; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined$1 : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined$1; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined$1) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined$1) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined$1 : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined$1; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined$1 && !eq(object[key], value)) || + (value === undefined$1 && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined$1 && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined$1 : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined$1) { + number = number <= upper ? number : upper; + } + if (lower !== undefined$1) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined$1) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined$1 : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined$1 && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined$1, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined$1 + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined$1 || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined$1; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined$1 ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined$1; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined$1 : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined$1 && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined$1 + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined$1 && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined$1; + + if (newValue === undefined$1) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined$1; + + var isCommon = newValue === undefined$1; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined$1; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined$1; + if (newValue === undefined$1) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined$1; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined$1, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined$1; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined$1 ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined$1, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined$1, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined$1; + + if (newValue === undefined$1) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined$1, + guard = length > 2 ? sources[2] : undefined$1; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined$1; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined$1 : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined$1; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined$1, + args, holders, undefined$1, undefined$1, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined$1; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined$1; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined$1 : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined$1 && other === undefined$1) { + return defaultValue; + } + if (value !== undefined$1) { + result = value; + } + if (other !== undefined$1) { + if (result === undefined$1) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined$1 ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined$1; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined$1) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined$1 ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined$1, + newHoldersRight = isCurry ? undefined$1 : holders, + newPartials = isCurry ? partials : undefined$1, + newPartialsRight = isCurry ? undefined$1 : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined$1, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined$1; + } + ary = ary === undefined$1 ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined$1 ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined$1; + } + var data = isBindKey ? undefined$1 : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined$1 + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined$1, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined$1 || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined$1, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined$1 : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined$1; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined$1) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined$1 + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined$1, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined$1; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined$1; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined$1, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined$1 || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined$1 ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined$1; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined$1, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined$1 ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined$1)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined$1; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined$1; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined$1, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined$1) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined$1 ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined$1; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined$1; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined$1; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined$1, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined$1; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined$1) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined$1; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined$1, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined$1 ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined$1; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined$1; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined$1, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined$1; + return (array && array.length) ? baseUniq(array, undefined$1, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined$1, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined$1; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined$1; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined$1, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined$1; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined$1; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined$1 + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined$1); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined$1) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined$1 : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined$1; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined$1 + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined$1; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined$1 ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined$1 : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined$1)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined$1; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined$1 : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined$1; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined$1 : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined$1 : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined$1; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined$1 || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined$1; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined$1; + return result; + } + + function cancel() { + if (timerId !== undefined$1) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined$1; + } + + function flush() { + return timerId === undefined$1 ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined$1) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined$1) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined$1, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined$1, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined$1, undefined$1, undefined$1, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined$1 ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

    ' + func(text) + '

    '; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

    fred, barney, & pebbles

    ' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + var result = customizer ? customizer(value, other) : undefined$1; + return result === undefined$1 ? baseIsEqual(value, other, undefined$1, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined$1; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined$1; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined$1 || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined$1, customDefaultsMerge); + return apply(mergeWith, undefined$1, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined$1 : baseGet(object, path); + return result === undefined$1 ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined$1; + } + while (++index < length) { + var value = object == null ? undefined$1 : object[toKey(path[index])]; + if (value === undefined$1) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined$1) { + upper = lower; + lower = undefined$1; + } + if (upper !== undefined$1) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined$1) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined$1) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined$1; + } + if (floating === undefined$1) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined$1; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined$1; + } + } + if (lower === undefined$1 && upper === undefined$1) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined$1) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined$1 + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined$1)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined$1; + } + limit = limit === undefined$1 ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': '\n \n \n \n ","\n \n ","20px","$heightUpdater","Can\'t parse desired height: ","get","post","put","delete","patch","main","0px","callback","formatText(line, CleanTextBuilder(color))","builderItem","UCI back reference: ","BIG_ENDIAN","LITTLE_ENDIAN","attachment:","^attachment:","","on","off","overflow","CleanTextProps(text=",", isBold=",", isItalic=",", fontColor=",", backgroundColor=","namespace","serialize(props)","CONCURRENT","UNORDERED","IDENTITY_FINISH", +"widgets","reprs","allowSameOrigin","allowFormS","allowScripts","0","Can\'t detect loop at least than 4 iterations","rsa","pre","notebook-viewer","__","sequence: ","$this$first","Collection is empty.","List is empty.","$this$last","Collection has more than one element.","List has more than one element.","$this$minOrNull","LEFT_BRACE","RIGHT_BRACE","LEFT_BRACKET","RIGHT_BRACKET","NULL","TRUE","FALSE","COMMA","STRING","COLON","$this$enumEncode","IGNORE","REPLACE","REPORT","command","checkBox","checkbox","radio", +"back reference: ","","htmlTrue","htmlFalse","auto",".","CI ","jClass","moduleName","(","rgba","color","rgb","rgb(","rgba(","color(","attrs","multipartFormData","multipart/form-data","applicationXWwwFormUrlEncoded","application/x-www-form-urlencoded","textPlain","execution_count","$this$buildElements","PYTHON","python","Python","SQL","sql","KOTLIN","kotlin","Kotlin","PLAINTEXT","plaintext","Plain text","MARKDOWN","markdown-math","Markdown","SCALA211","scala","Scala 2.11","SCALA212","Scala 2.12","SCALA213", +"Scala 2.13","IR","r","R","SHELL","shell","Shell","HTML","posFSet","ename","evalue","sequence","transformer","JsString{myJsObject=","date","datetime","dateTimeLocal","datetime-local","email","file","image","month","password","search","tel","time","url","week","Patter is null","\\Q","\\E","\\\\E\\Q","col","colGroup","colgroup","row","rowGroup","rowgroup","APP_NAME","appName","BETA_USER","PLANS_ENABLED","ON_PREMISE","DEFAULT_INSTANCE_TYPE_ID","FRONTEND_URL","FRONTEND_URL_OVERRIDE","HUB_ENABLED","HUB_PUBLIC_BASE_URL", +"JB_STORE_BASE_URL","JBACCOUNT_BASE_URL","NOTEBOOK_VIEWER","BUILD_NUMBER","BUILD_DATE","BUILD_HASH","Set Json Parser to ","nextBase62RandomId()","Couldn\'t render math, element is detached","https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML,Safe","null cannot be cast to non-null type kotlin.collections.MutableMap","initialValues","jetbrains.datalore.platform.services.react.RState","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingTsvOutputState", +"jetbrains.datalore.notebook.client.sandboxedHtml.SandboxedHtmlState","jetbrains.datalore.notebook.client.editor.staticEditor.StaticEditorProps","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingIPyWidgetProps","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingPlotlyOutputProps","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingMarkdownOutputProps","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingTsvOutputProps", +"jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingMarkdownBlockProps","jetbrains.datalore.notebook.client.sandboxedHtml.SandboxedHtmlProps","jetbrains.datalore.notebook.client.notebookViewer.NotebookViewerProps","jetbrains.datalore.notebook.client.sandboxedHtml.SandboxedHtml","jetbrains.datalore.notebook.client.notebookViewer.NotebookViewer","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingMarkdownOutput","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingTsvOutput", +"jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingPlotlyOutput","jetbrains.datalore.notebook.client.editor.staticEditor.StaticEditor","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingIPyWidget","jetbrains.datalore.notebook.client.publishing.notebookPage.components.blocks.PublishingMarkdownBlock","Object","Number","Boolean","null cannot be cast to non-null type kotlin.ranges.IntRange","ltr","rtl","Failed to parse json=","EOI","JvmString{myString=\'", +"\'}","static-editor has-scroll","Either src or dest is null","factory","create()","attribute","builder","jsObject","createElement(attrs.tagName, props, *childList.toTypedArray())","DotAll","decomposed Hangul syllable:","lateinit property "," has not been initialized"," must not be null","Parameter specified as non-null is null: method ",", parameter ","theme","WordBoundary","server","fontWeight","fontStyle","it.toCssColor()","backgroundColor","result_iframe_","myIframeRef.current","/dist/index.html","450", +"no","newData","ready","configUpdate","","Exception handled at ThrowableHandler: ","org.junit.runners","br","Step is zero.","Async already completed"]); +Be.prototype.toString=function(){return $rt_ustr(this);}; +Be.prototype.valueOf=Be.prototype.toString;C.prototype.toString=function(){return $rt_ustr(API(this));}; +C.prototype.__teavm_class__=function(){return $dbg_class(this);}; +var Long_eq;var Long_ne;var Long_gt;var Long_ge;var Long_lt;var Long_le;var Long_compare;var Long_add;var Long_sub;var Long_inc;var Long_dec;var Long_mul;var Long_div;var Long_rem;var Long_udiv;var Long_urem;var Long_neg;var Long_and;var Long_or;var Long_xor;var Long_shl;var Long_shr;var Long_shru;var Long_not;if(typeof BigInt!=='function'){Long_eq=function(a,b){return a.hi===b.hi&&a.lo===b.lo;};Long_ne=function(a,b){return a.hi!==b.hi||a.lo!==b.lo;};Long_gt=function(a,b){if(a.hib.hi){return true;}var x=a.lo>>>1;var y=b.lo>>>1;if(x!==y){return x>y;}return (a.lo&1)>(b.lo&1);};Long_ge=function(a,b){if(a.hib.hi){return true;}var x=a.lo>>>1;var y=b.lo>>>1;if(x!==y){return x>=y;}return (a.lo&1)>=(b.lo&1);};Long_lt=function(a,b){if(a.hi>b.hi){return false;}if(a.hi>>1;var y=b.lo>>>1;if(x!==y){return xb.hi){return false;}if(a.hi>>1;var y=b.lo +>>>1;if(x!==y){return x<=y;}return (a.lo&1)<=(b.lo&1);};Long_add=function(a,b){if(a.hi===a.lo>>31&&b.hi===b.lo>>31){return Long_fromNumber(a.lo+b.lo);}else if(Math.abs(a.hi)>>16;var a_hilo=a.hi&0xFFFF;var a_hihi=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;var lolo=a_lolo+b_lolo|0;var lohi=a_lohi+b_lohi+(lolo>> +16)|0;var hilo=a_hilo+b_hilo+(lohi>>16)|0;var hihi=a_hihi+b_hihi+(hilo>>16)|0;return new Long(lolo&0xFFFF|(lohi&0xFFFF)<<16,hilo&0xFFFF|(hihi&0xFFFF)<<16);};Long_inc=function(a){var lo=a.lo+1|0;var hi=a.hi;if(lo===0){hi=hi+1|0;}return new Long(lo,hi);};Long_dec=function(a){var lo=a.lo -1|0;var hi=a.hi;if(lo=== -1){hi=hi -1|0;}return new Long(lo,hi);};Long_neg=function(a){return Long_inc(new Long(a.lo^0xFFFFFFFF,a.hi^0xFFFFFFFF));};Long_sub=function(a,b){if(a.hi===a.lo>>31&&b.hi===b.lo>>31){return Long_fromNumber(a.lo - +b.lo);}var a_lolo=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;var lolo=a_lolo -b_lolo|0;var lohi=a_lohi -b_lohi+(lolo>>16)|0;var hilo=a_hilo -b_hilo+(lohi>>16)|0;var hihi=a_hihi -b_hihi+(hilo>>16)|0;return new Long(lolo&0xFFFF|(lohi&0xFFFF)<<16,hilo&0xFFFF|(hihi&0xFFFF)<<16);};Long_compare=function(a,b){var r=a.hi -b.hi;if(r!==0){return r;}r=(a.lo>>>1) -(b.lo>>>1);if(r!==0){return r;}return (a.lo +&1) -(b.lo&1);};Long_mul=function(a,b){var positive=Long_isNegative(a)===Long_isNegative(b);if(Long_isNegative(a)){a=Long_neg(a);}if(Long_isNegative(b)){b=Long_neg(b);}var a_lolo=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;var lolo=0;var lohi=0;var hilo=0;var hihi=0;lolo=a_lolo*b_lolo|0;lohi=lolo>>>16;lohi=(lohi&0xFFFF)+a_lohi*b_lolo|0;hilo=hilo+(lohi>>>16)|0;lohi=(lohi&0xFFFF)+a_lolo*b_lohi +|0;hilo=hilo+(lohi>>>16)|0;hihi=hilo>>>16;hilo=(hilo&0xFFFF)+a_hilo*b_lolo|0;hihi=hihi+(hilo>>>16)|0;hilo=(hilo&0xFFFF)+a_lohi*b_lohi|0;hihi=hihi+(hilo>>>16)|0;hilo=(hilo&0xFFFF)+a_lolo*b_hilo|0;hihi=hihi+(hilo>>>16)|0;hihi=hihi+a_hihi*b_lolo+a_hilo*b_lohi+a_lohi*b_hilo+a_lolo*b_hihi|0;var result=new Long(lolo&0xFFFF|lohi<<16,hilo&0xFFFF|hihi<<16);return positive?result:Long_neg(result);};Long_div=function(a,b){if(Math.abs(a.hi)=0&&a.hi=0&&b.hi=0&&a.hi=0&&b.hi>>16|a.hi<<16);}function Long_shiftRight16(a){return new Long(a.lo>>>16|a.hi<<16,a.hi>>>16);}Long_and=function(a,b){return new Long(a.lo&b.lo,a.hi&b.hi);};Long_or=function(a,b){return new Long(a.lo|b.lo,a.hi|b.hi);};Long_xor=function(a,b){return new Long(a.lo^b.lo,a.hi^b.hi);};Long_shl=function(a,b){b&=63;if(b===0){return a;} +else if(b<32){return new Long(a.lo<>>32 -b|a.hi<>>b|a.hi<<32 -b,a.hi>>b);}else if(b===32){return new Long(a.hi,a.hi>>31);}else {return new Long(a.hi>>b -32,a.hi>>31);}};Long_shru=function(a,b){b&=63;if(b===0){return a;}else if(b<32){return new Long(a.lo>>>b|a.hi<<32 -b,a.hi>>>b);}else if(b===32){return new Long(a.hi,0);}else {return new Long(a.hi +>>>b -32,0);}};Long_not=function(a){return new Long(~a.hi,~a.lo);};function LongInt(lo,hi,sup){this.lo=lo;this.hi=hi;this.sup=sup;}function LongInt_mul(a,b){var a_lolo=(a.lo&0xFFFF)*b|0;var a_lohi=(a.lo>>>16)*b|0;var a_hilo=(a.hi&0xFFFF)*b|0;var a_hihi=(a.hi>>>16)*b|0;var sup=a.sup*b|0;a_lohi=a_lohi+(a_lolo>>>16)|0;a_hilo=a_hilo+(a_lohi>>>16)|0;a_hihi=a_hihi+(a_hilo>>>16)|0;sup=sup+(a_hihi>>>16)|0;a.lo=a_lolo&0xFFFF|a_lohi<<16;a.hi=a_hilo&0xFFFF|a_hihi<<16;a.sup=sup&0xFFFF;}function LongInt_sub(a,b){var a_lolo +=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi=a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;a_lolo=a_lolo -b_lolo|0;a_lohi=a_lohi -b_lohi+(a_lolo>>16)|0;a_hilo=a_hilo -b_hilo+(a_lohi>>16)|0;a_hihi=a_hihi -b_hihi+(a_hilo>>16)|0;var sup=a.sup -b.sup+(a_hihi>>16)|0;a.lo=a_lolo&0xFFFF|a_lohi<<16;a.hi=a_hilo&0xFFFF|a_hihi<<16;a.sup=sup;}function LongInt_add(a,b){var a_lolo=a.lo&0xFFFF;var a_lohi=a.lo>>>16;var a_hilo=a.hi&0xFFFF;var a_hihi= +a.hi>>>16;var b_lolo=b.lo&0xFFFF;var b_lohi=b.lo>>>16;var b_hilo=b.hi&0xFFFF;var b_hihi=b.hi>>>16;a_lolo=a_lolo+b_lolo|0;a_lohi=a_lohi+b_lohi+(a_lolo>>16)|0;a_hilo=a_hilo+b_hilo+(a_lohi>>16)|0;a_hihi=a_hihi+b_hihi+(a_hilo>>16)|0;var sup=a.sup+b.sup+(a_hihi>>16)|0;a.lo=a_lolo&0xFFFF|a_lohi<<16;a.hi=a_hilo&0xFFFF|a_hihi<<16;a.sup=sup;}function LongInt_inc(a){a.lo=a.lo+1|0;if(a.lo===0){a.hi=a.hi+1|0;if(a.hi===0){a.sup=a.sup+1&0xFFFF;}}}function LongInt_dec(a){a.lo=a.lo -1|0;if(a.lo=== -1){a.hi=a.hi -1|0;if(a.hi +=== -1){a.sup=a.sup -1&0xFFFF;}}}function LongInt_ucompare(a,b){var r=a.sup -b.sup;if(r!==0){return r;}r=(a.hi>>>1) -(b.hi>>>1);if(r!==0){return r;}r=(a.hi&1) -(b.hi&1);if(r!==0){return r;}r=(a.lo>>>1) -(b.lo>>>1);if(r!==0){return r;}return (a.lo&1) -(b.lo&1);}function LongInt_numOfLeadingZeroBits(a){var n=0;var d=16;while(d>0){if(a>>>d!==0){a>>>=d;n=n+d|0;}d=d/2|0;}return 31 -n;}function LongInt_shl(a,b){if(b===0){return;}if(b<32){a.sup=(a.hi>>>32 -b|a.sup<>>32 -b|a.hi<>>64 -b|a.hi<>>b|a.hi<<32 -b;a.hi=a.hi>>>b|a.sup<<32 -b;a.sup>>>=b;}else if(b===64){a.lo=a.sup;a.hi=0;a.sup=0;}else if(b<64){a.lo=a.hi>>>b -32|a.sup<<64 -b;a.hi=a.sup>>>b -32;a.sup=0;}else {a.lo=a.sup +>>>b -64;a.hi=0;a.sup=0;}}function LongInt_copy(a){return new LongInt(a.lo,a.hi,a.sup);}function LongInt_div(a,b){var bits=b.hi!==0?LongInt_numOfLeadingZeroBits(b.hi):LongInt_numOfLeadingZeroBits(b.lo)+32;var sz=1+(bits/16|0);var dividentBits=bits%16;LongInt_shl(b,bits);LongInt_shl(a,dividentBits);var q=new LongInt(0,0,0);while(sz-->0){LongInt_shl(q,16);var digitA=(a.hi>>>16)+0x10000*a.sup;var digitB=b.hi>>>16;var digit=digitA/digitB|0;var t=LongInt_copy(b);LongInt_mul(t,digit);if(LongInt_ucompare(t,a)>=0){while +(LongInt_ucompare(t,a)>0){LongInt_sub(t,b); --digit;}}else {while(true){var nextT=LongInt_copy(t);LongInt_add(nextT,b);if(LongInt_ucompare(nextT,a)>0){break;}t=nextT;++digit;}}LongInt_sub(a,t);q.lo|=digit;LongInt_shl(a,16);}LongInt_shr(a,bits+16);return q;}}else {Long_eq=function(a,b){return a===b;};Long_ne=function(a,b){return a!==b;};Long_gt=function(a,b){return a>b;};Long_ge=function(a,b){return a>=b;};Long_lt=function(a,b){return ab?1:0;};Long_mul=function(a,b){return BigInt.asIntN(64,a*b);};Long_div=function(a,b){return BigInt.asIntN(64,a/b);};Long_udiv=function(a,b){return BigInt.asIntN(64,BigInt.asUintN(64,a)/BigInt.asUintN(64,b));};Long_rem=function(a,b){return BigInt.asIntN(64, +a%b);};Long_urem=function(a,b){return BigInt.asIntN(64,BigInt.asUintN(64,a)%BigInt.asUintN(64,b));};Long_and=function(a,b){return BigInt.asIntN(64,a&b);};Long_or=function(a,b){return BigInt.asIntN(64,a|b);};Long_xor=function(a,b){return BigInt.asIntN(64,a^b);};Long_shl=function(a,b){return BigInt.asIntN(64,a<>BigInt(b&63));};Long_shru=function(a,b){return BigInt.asIntN(64,BigInt.asUintN(64,a)>>BigInt(b&63));};Long_not=function(a){return BigInt.asIntN(64, +~a);};}var BZ=Long_add;var Brg=Long_sub;var BD=Long_mul;var CH=Long_div;var I1=Long_rem;var Bl7=Long_or;var C6=Long_and;var BDf=Long_xor;var Ei=Long_shl;var G1=Long_shr;var Dy=Long_shru;var AVt=Long_compare;var Ex=Long_eq;var BDg=Long_ne;var HR=Long_lt;var Fc=Long_le;var S9=Long_gt;var Lo=Long_ge;var BDh=Long_not;var AHY=Long_neg; +function $rt_startThread(runner,callback){var result;try {result=runner();}catch(e){result=e;}if(typeof callback!=='undefined'){callback(result);}else if(result instanceof Error){throw result;}}function $rt_suspending(){return false;}function $rt_resuming(){return false;}function $rt_nativeThread(){return null;}function $rt_invalidPointer(){}main=$rt_mainStarter(Br_); +main.javaException=$rt_javaException; +(function(){var c;c=AFD.prototype;c.apply=c.eS;c=AJw.prototype;c.run=c.xO;c=AEW.prototype;c.apply=c.eS;c=QD.prototype;c.run=c.xO;c=TS.prototype;c.getLength=c.M2;c.get=c.I1;c=AIN.prototype;c.handleEvent=c.JR;c=Rp.prototype;c.apply=c.eS;c=ACo.prototype;c.handle=c.eN;c=AIA.prototype;c.handle=c.eN;c=AMw.prototype;c.handle=c.eN;c=AMz.prototype;c.apply=c.wv;c=AMv.prototype;c.apply=c.eS;c=AMx.prototype;c.apply=c.eS;c=AMs.prototype;c.apply=c.wv;c=AMy.prototype;c.handle=c.eN;c=AMt.prototype;c.apply=c.wv;c=AIm.prototype;c.apply +=c.eS;c=Xr.prototype;c.handle=c.FR;c=AHw.prototype;c.handle=c.eN;c=AD3.prototype;c.handle=c.eN;c=AD2.prototype;c.handle=c.eN;c=YH.prototype;c.apply=c.KC;})(); +})(); diff --git a/jupyter/viewOnly/resources/jupyter-view-only/pages.icons.js b/jupyter/viewOnly/resources/jupyter-view-only/pages.icons.js new file mode 100644 index 000000000000..8b9cf480f073 --- /dev/null +++ b/jupyter/viewOnly/resources/jupyter-view-only/pages.icons.js @@ -0,0 +1,12 @@ + + function __appendSprite(sprite) { + let container = document.createElement("div"); + container.style.width = 0; + container.style.height = 0; + container.style.position = "absolute"; + container.style.overflow = "hidden"; + container.innerHTML = sprite; + document.body.append(container); +}; + __appendSprite(''); + \ No newline at end of file diff --git a/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyFileEditor.kt b/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyFileEditor.kt new file mode 100644 index 000000000000..295843fdb2dd --- /dev/null +++ b/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyFileEditor.kt @@ -0,0 +1,96 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter.preview.viewOnly + + +import com.intellij.ide.ui.LafManagerListener +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.EDT +import com.intellij.openapi.fileEditor.FileEditor +import com.intellij.openapi.fileEditor.FileEditorLocation +import com.intellij.openapi.fileEditor.FileEditorState +import com.intellij.openapi.util.Disposer +import com.intellij.openapi.util.SystemInfo +import com.intellij.openapi.util.UserDataHolderBase +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.ui.jcef.JBCefBrowser +import com.intellij.util.ui.UIUtil +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch +import org.cef.browser.CefBrowser +import org.cef.browser.CefFrame +import org.cef.handler.CefLoadHandlerAdapter +import org.jetbrains.plugins.notebooks.jupyter.preview.JupyterCefHttpHandlerBase +import org.jetbrains.plugins.notebooks.jupyter.preview.addPathSegment +import java.beans.PropertyChangeListener +import java.nio.ByteBuffer +import javax.swing.JComponent + +/** + * Show jupyter file as web page in viewOnly mode + */ +class JupyterViewOnlyFileEditor private constructor(val myFile: VirtualFile) : UserDataHolderBase(), FileEditor { + // OSR is slower but doesn't work on Linux when component detached from Swing (i.e. tab switched) + private val browser = JBCefBrowser.createBuilder().setOffScreenRendering(SystemInfo.isLinux).setUrl( + JupyterCefHttpHandlerBase.getJupyterHttpUrl().addPathSegment("index.html").toString()).createBrowser() + private val browserComponent: JComponent = browser.component + private val darcula: MutableStateFlow = MutableStateFlow(UIUtil.isUnderDarcula()) + private val scope = CoroutineScope(Dispatchers.EDT) + + companion object { + fun create(file: VirtualFile): JupyterViewOnlyFileEditor = JupyterViewOnlyFileEditor(file).apply { + Disposer.register(this, browser) + browser.jbCefClient.addLoadHandler(object : CefLoadHandlerAdapter() { + override fun onLoadEnd(browser: CefBrowser, frame: CefFrame, httpStatusCode: Int) { + val str = Charsets.UTF_8.decode(ByteBuffer.wrap(myFile.contentsToByteArray())).toString() + configureLaf() + frame.executeJavaScript("const data=$str;", browser.url, 0) + frame.executeJavaScript("render(data);", browser.url, 0) + } + }, browser.cefBrowser) + browser.setOpenLinksInExternalBrowser(true) + ApplicationManager.getApplication().messageBus.connect(this).subscribe(LafManagerListener.TOPIC, LafManagerListener { + // May be called several times, buffer merges calls + darcula.value = UIUtil.isUnderDarcula() + }) + scope.launch { + darcula.collect { + configureLaf() + } + } + + } + } + + private fun configureLaf() { + val theme = if (darcula.value) "dark" else "idea" + browser.cefBrowser.executeJavaScript("IPythonRenderer.setTheme('$theme')", browser.cefBrowser.url, 0) + } + + override fun getComponent(): JComponent = browserComponent + + override fun getPreferredFocusedComponent(): JComponent = browserComponent + + override fun getName(): String = myFile.name + + override fun getFile(): VirtualFile = myFile + + override fun setState(state: FileEditorState) = Unit + + override fun isModified(): Boolean = false + + override fun isValid(): Boolean = true + + override fun addPropertyChangeListener(listener: PropertyChangeListener) = Unit + + override fun removePropertyChangeListener(listener: PropertyChangeListener) = Unit + + override fun getCurrentLocation(): FileEditorLocation? = null + + override fun dispose() { + scope.cancel() + } +} diff --git a/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyHandler.kt b/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyHandler.kt new file mode 100644 index 000000000000..9d7c0ca4c43e --- /dev/null +++ b/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyHandler.kt @@ -0,0 +1,11 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter.preview.viewOnly + +import org.jetbrains.plugins.notebooks.jupyter.preview.JupyterCefHttpHandlerBase + +class JupyterViewOnlyHandler : JupyterCefHttpHandlerBase(absolutePathFiles = listOf( + "/ipywidgets.html", + "/ipywidgets.css", + "/ipywidgets.js")) { + override val appName: String = "jupyter-view-only" +} diff --git a/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyProvider.kt b/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyProvider.kt new file mode 100644 index 000000000000..c48299ad3157 --- /dev/null +++ b/jupyter/viewOnly/src/org/jetbrains/plugins/notebooks/jupyter/preview/viewOnly/JupyterViewOnlyProvider.kt @@ -0,0 +1,21 @@ +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.notebooks.jupyter.preview.viewOnly + +import com.intellij.openapi.fileEditor.FileEditor +import com.intellij.openapi.fileEditor.FileEditorPolicy +import com.intellij.openapi.fileEditor.FileEditorProvider +import com.intellij.openapi.project.DumbAware +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import org.jetbrains.plugins.notebooks.jupyter.JupyterFileType + + +class JupyterViewOnlyProvider : FileEditorProvider, DumbAware { + override fun accept(project: Project, file: VirtualFile): Boolean = file.fileType == JupyterFileType + + override fun createEditor(project: Project, file: VirtualFile): FileEditor = JupyterViewOnlyFileEditor.create(file) + + override fun getEditorTypeId(): String = "jupyter-view-only-provider" + + override fun getPolicy(): FileEditorPolicy = FileEditorPolicy.HIDE_DEFAULT_EDITOR +} diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/python/PythonCommunityPluginModules.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/python/PythonCommunityPluginModules.groovy index 32f51f18dc10..37edc25b4acf 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/python/PythonCommunityPluginModules.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/python/PythonCommunityPluginModules.groovy @@ -22,6 +22,7 @@ class PythonCommunityPluginModules { "intellij.python.reStructuredText", "intellij.python.sdk", "intellij.python.featuresTrainer", + "intellij.jupyter.core" ] static String pythonCommunityName = "python-ce" diff --git a/python/build/groovy/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.groovy b/python/build/groovy/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.groovy index 941c719c8232..00f7e1d92751 100644 --- a/python/build/groovy/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.groovy +++ b/python/build/groovy/org/jetbrains/intellij/build/pycharm/PyCharmCommunityProperties.groovy @@ -36,6 +36,8 @@ class PyCharmCommunityProperties extends PyCharmPropertiesBase { directoryName = "pythonIDE" mainJarName = "python-ide.jar" withModule("intellij.pycharm.community.ide.impl", mainJarName) + withModule("intellij.jupyter.viewOnly") + withModule("intellij.jupyter.core") } ] productLayout.pluginModulesToPublish = ["intellij.python.community.plugin"] diff --git a/python/ide/resources/META-INF/plugin.xml b/python/ide/resources/META-INF/plugin.xml index b0c7af6be9d6..ba41f9a8977f 100644 --- a/python/ide/resources/META-INF/plugin.xml +++ b/python/ide/resources/META-INF/plugin.xml @@ -10,6 +10,7 @@ + @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/python/intellij.pycharm.community.customization.iml b/python/intellij.pycharm.community.customization.iml index d32a33ed27c6..6a604b189767 100644 --- a/python/intellij.pycharm.community.customization.iml +++ b/python/intellij.pycharm.community.customization.iml @@ -9,5 +9,6 @@ + \ No newline at end of file diff --git a/python/intellij.pycharm.community.iml b/python/intellij.pycharm.community.iml index 7ae35a601328..8bfd70edd5fb 100644 --- a/python/intellij.pycharm.community.iml +++ b/python/intellij.pycharm.community.iml @@ -18,5 +18,6 @@ + \ No newline at end of file diff --git a/python/intellij.python.community.plugin.modules.iml b/python/intellij.python.community.plugin.modules.iml index ca7c562b1fc8..2ee849e13602 100644 --- a/python/intellij.python.community.plugin.modules.iml +++ b/python/intellij.python.community.plugin.modules.iml @@ -11,4 +11,4 @@ - \ No newline at end of file +