@dotglitch/ngx-common 3.0.0-beta.1 → 3.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/command-palette/breadcrumb/breadcrumb.component.d.ts +16 -0
- package/command-palette/command-palette.component.d.ts +38 -0
- package/command-palette/command-palette.service.d.ts +128 -0
- package/command-palette/index.d.ts +2 -0
- package/command-palette/shortcut/shortcut.component.d.ts +9 -0
- package/{components → core/components}/menu/menu.component.d.ts +2 -2
- package/{directives → core/components/menu}/menu.directive.d.ts +1 -1
- package/{types/menu.d.ts → core/components/menu/types.d.ts} +1 -1
- package/{components → core/components}/types.d.ts +0 -1
- package/{public-api.d.ts → core/index.d.ts} +8 -4
- package/{services → core/services}/navigation.service.d.ts +1 -1
- package/core/utils/index.d.ts +18 -0
- package/esm2022/command-palette/breadcrumb/breadcrumb.component.mjs +30 -0
- package/esm2022/command-palette/command-palette.component.mjs +257 -0
- package/esm2022/command-palette/command-palette.service.mjs +207 -0
- package/esm2022/command-palette/dotglitch-ngx-common-command-palette.mjs +5 -0
- package/esm2022/command-palette/index.mjs +3 -0
- package/esm2022/command-palette/shortcut/shortcut.component.mjs +19 -0
- package/esm2022/core/components/lazy-loader/lazy-loader.component.mjs +383 -0
- package/esm2022/core/components/lazy-loader/lazy-loader.module.mjs +33 -0
- package/esm2022/core/components/lazy-loader/lazy-loader.service.mjs +216 -0
- package/esm2022/core/components/lazy-loader/types.mjs +26 -0
- package/esm2022/core/components/menu/menu.component.mjs +433 -0
- package/esm2022/core/components/menu/menu.directive.mjs +159 -0
- package/esm2022/core/components/menu/types.mjs +2 -0
- package/esm2022/core/components/parallax-card/parallax-card.component.mjs +138 -0
- package/esm2022/core/components/types.mjs +3 -0
- package/esm2022/core/directives/image-cache.directive.mjs +143 -0
- package/esm2022/core/directives/utils.mjs +120 -0
- package/esm2022/core/dotglitch-ngx-common-core.mjs +5 -0
- package/esm2022/core/index.mjs +50 -0
- package/esm2022/core/pipes/html-bypass.pipe.mjs +27 -0
- package/esm2022/core/pipes/resource-bypass.pipe.mjs +27 -0
- package/esm2022/core/pipes/script-bypass.pipe.mjs +27 -0
- package/esm2022/core/pipes/style-bypass.pipe.mjs +27 -0
- package/esm2022/core/pipes/url-bypass.pipe.mjs +27 -0
- package/esm2022/core/services/dependency.service.mjs +55 -0
- package/esm2022/core/services/dialog.service.mjs +67 -0
- package/esm2022/core/services/fetch.service.mjs +74 -0
- package/esm2022/core/services/file.service.mjs +42 -0
- package/esm2022/core/services/keyboard.service.mjs +128 -0
- package/esm2022/core/services/navigation.service.mjs +50 -0
- package/esm2022/core/services/theme.service.mjs +64 -0
- package/esm2022/core/types/popup.mjs +2 -0
- package/esm2022/core/utils/index.mjs +69 -0
- package/esm2022/dotglitch-ngx-common.mjs +2 -2
- package/esm2022/filemanager/dotglitch-ngx-common-filemanager.mjs +5 -0
- package/esm2022/filemanager/file-grid/file-grid.component.mjs +676 -0
- package/esm2022/filemanager/filemanager.component.mjs +313 -0
- package/esm2022/filemanager/folder-rename/folder-rename.component.mjs +57 -0
- package/esm2022/filemanager/helpers.mjs +26 -0
- package/esm2022/filemanager/icon-resolver.mjs +155 -0
- package/esm2022/filemanager/index.mjs +2 -0
- package/esm2022/filemanager/mat-icons.mjs +5705 -0
- package/esm2022/filemanager/textextensions.mjs +294 -0
- package/esm2022/filemanager/toolbar/breadcrumb/breadcrumb.component.mjs +22 -0
- package/esm2022/filemanager/toolbar/icon-button/icon-button.component.mjs +32 -0
- package/esm2022/filemanager/toolbar/toolbar.component.mjs +165 -0
- package/esm2022/filemanager/tree-view/tree-view.component.mjs +51 -0
- package/esm2022/filemanager/types.mjs +2 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/monaco-editor/dotglitch-ngx-common-monaco-editor.mjs +5 -0
- package/esm2022/monaco-editor/index.mjs +2 -0
- package/esm2022/monaco-editor/monaco-editor.component.mjs +234 -0
- package/esm2022/monaco-editor/ts-type-resolver/dependency-parser.mjs +91 -0
- package/esm2022/monaco-editor/ts-type-resolver/dummy-source-cache.mjs +15 -0
- package/esm2022/monaco-editor/ts-type-resolver/import-resolver.mjs +311 -0
- package/esm2022/monaco-editor/ts-type-resolver/main.mjs +112 -0
- package/esm2022/monaco-editor/ts-type-resolver/recursion-depth.mjs +21 -0
- package/esm2022/monaco-editor/ts-type-resolver/types.mjs +14 -0
- package/esm2022/monaco-editor/ts-type-resolver/unpkg-source-resolver.mjs +21 -0
- package/esm2022/monaco-editor/ts-type-resolver/update-emitter.mjs +37 -0
- package/esm2022/overlay-wrapper/dotglitch-ngx-common-overlay-wrapper.mjs +5 -0
- package/esm2022/overlay-wrapper/index.mjs +2 -0
- package/esm2022/overlay-wrapper/overlay-wrapper.component.mjs +247 -0
- package/esm2022/tooltip/dotglitch-ngx-common-tooltip.mjs +5 -0
- package/esm2022/tooltip/index.mjs +4 -0
- package/esm2022/tooltip/tooltip.component.mjs +204 -0
- package/esm2022/tooltip/tooltip.directive.mjs +153 -0
- package/esm2022/tooltip/types.mjs +2 -0
- package/fesm2022/dotglitch-ngx-common-command-palette.mjs +508 -0
- package/fesm2022/dotglitch-ngx-common-command-palette.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common-core.mjs +2280 -0
- package/fesm2022/dotglitch-ngx-common-core.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common-filemanager-folder-rename.component-CnKuU8nn.mjs +60 -0
- package/fesm2022/dotglitch-ngx-common-filemanager-folder-rename.component-CnKuU8nn.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common-filemanager.mjs +7403 -0
- package/fesm2022/dotglitch-ngx-common-filemanager.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common-monaco-editor.mjs +850 -0
- package/fesm2022/dotglitch-ngx-common-monaco-editor.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common-overlay-wrapper.mjs +254 -0
- package/fesm2022/dotglitch-ngx-common-overlay-wrapper.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common-tooltip.mjs +357 -0
- package/fesm2022/dotglitch-ngx-common-tooltip.mjs.map +1 -0
- package/fesm2022/dotglitch-ngx-common.mjs +3 -2757
- package/fesm2022/dotglitch-ngx-common.mjs.map +1 -1
- package/filemanager/file-grid/file-grid.component.d.ts +94 -0
- package/filemanager/filemanager.component.d.ts +206 -0
- package/filemanager/folder-rename/folder-rename.component.d.ts +18 -0
- package/filemanager/helpers.d.ts +5 -0
- package/filemanager/icon-resolver.d.ts +13 -0
- package/filemanager/index.d.ts +1 -0
- package/filemanager/mat-icons.d.ts +5705 -0
- package/filemanager/textextensions.d.ts +3 -0
- package/filemanager/toolbar/breadcrumb/breadcrumb.component.d.ts +16 -0
- package/filemanager/toolbar/icon-button/icon-button.component.d.ts +11 -0
- package/filemanager/toolbar/toolbar.component.d.ts +31 -0
- package/filemanager/tree-view/tree-view.component.d.ts +21 -0
- package/filemanager/types.d.ts +1 -0
- package/index.d.ts +1 -5
- package/monaco-editor/README.md +3 -0
- package/monaco-editor/index.d.ts +1 -0
- package/monaco-editor/monaco-editor.component.d.ts +53 -0
- package/monaco-editor/ts-type-resolver/dependency-parser.d.ts +6 -0
- package/monaco-editor/ts-type-resolver/dummy-source-cache.d.ts +7 -0
- package/monaco-editor/ts-type-resolver/import-resolver.d.ts +28 -0
- package/monaco-editor/ts-type-resolver/main.d.ts +22 -0
- package/monaco-editor/ts-type-resolver/recursion-depth.d.ts +11 -0
- package/monaco-editor/ts-type-resolver/types.d.ts +179 -0
- package/monaco-editor/ts-type-resolver/unpkg-source-resolver.d.ts +5 -0
- package/monaco-editor/ts-type-resolver/update-emitter.d.ts +2 -0
- package/overlay-wrapper/index.d.ts +1 -0
- package/overlay-wrapper/overlay-wrapper.component.d.ts +11 -0
- package/package.json +104 -64
- package/tooltip/index.d.ts +3 -0
- package/{components/tooltip → tooltip}/tooltip.component.d.ts +3 -3
- package/{directives → tooltip}/tooltip.directive.d.ts +2 -2
- package/{types/tooltip.d.ts → tooltip/types.d.ts} +1 -1
- package/assets/lib/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.de.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.es.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.fr.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.it.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.ja.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.ko.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.ru.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.zh-cn.js +0 -8
- package/assets/lib/vs/base/common/worker/simpleWorker.nls.zh-tw.js +0 -8
- package/assets/lib/vs/base/worker/workerMain.js +0 -24
- package/assets/lib/vs/basic-languages/abap/abap.js +0 -10
- package/assets/lib/vs/basic-languages/apex/apex.js +0 -10
- package/assets/lib/vs/basic-languages/azcli/azcli.js +0 -10
- package/assets/lib/vs/basic-languages/bat/bat.js +0 -10
- package/assets/lib/vs/basic-languages/bicep/bicep.js +0 -11
- package/assets/lib/vs/basic-languages/cameligo/cameligo.js +0 -10
- package/assets/lib/vs/basic-languages/clojure/clojure.js +0 -10
- package/assets/lib/vs/basic-languages/coffee/coffee.js +0 -10
- package/assets/lib/vs/basic-languages/cpp/cpp.js +0 -10
- package/assets/lib/vs/basic-languages/csharp/csharp.js +0 -10
- package/assets/lib/vs/basic-languages/csp/csp.js +0 -10
- package/assets/lib/vs/basic-languages/css/css.js +0 -12
- package/assets/lib/vs/basic-languages/cypher/cypher.js +0 -10
- package/assets/lib/vs/basic-languages/dart/dart.js +0 -10
- package/assets/lib/vs/basic-languages/dockerfile/dockerfile.js +0 -10
- package/assets/lib/vs/basic-languages/ecl/ecl.js +0 -10
- package/assets/lib/vs/basic-languages/elixir/elixir.js +0 -10
- package/assets/lib/vs/basic-languages/flow9/flow9.js +0 -10
- package/assets/lib/vs/basic-languages/freemarker2/freemarker2.js +0 -12
- package/assets/lib/vs/basic-languages/fsharp/fsharp.js +0 -10
- package/assets/lib/vs/basic-languages/go/go.js +0 -10
- package/assets/lib/vs/basic-languages/graphql/graphql.js +0 -10
- package/assets/lib/vs/basic-languages/handlebars/handlebars.js +0 -10
- package/assets/lib/vs/basic-languages/hcl/hcl.js +0 -10
- package/assets/lib/vs/basic-languages/html/html.js +0 -10
- package/assets/lib/vs/basic-languages/ini/ini.js +0 -10
- package/assets/lib/vs/basic-languages/java/java.js +0 -10
- package/assets/lib/vs/basic-languages/javascript/javascript.js +0 -10
- package/assets/lib/vs/basic-languages/julia/julia.js +0 -10
- package/assets/lib/vs/basic-languages/kotlin/kotlin.js +0 -10
- package/assets/lib/vs/basic-languages/less/less.js +0 -11
- package/assets/lib/vs/basic-languages/lexon/lexon.js +0 -10
- package/assets/lib/vs/basic-languages/liquid/liquid.js +0 -10
- package/assets/lib/vs/basic-languages/lua/lua.js +0 -10
- package/assets/lib/vs/basic-languages/m3/m3.js +0 -10
- package/assets/lib/vs/basic-languages/markdown/markdown.js +0 -10
- package/assets/lib/vs/basic-languages/mips/mips.js +0 -10
- package/assets/lib/vs/basic-languages/msdax/msdax.js +0 -10
- package/assets/lib/vs/basic-languages/mysql/mysql.js +0 -10
- package/assets/lib/vs/basic-languages/objective-c/objective-c.js +0 -10
- package/assets/lib/vs/basic-languages/pascal/pascal.js +0 -10
- package/assets/lib/vs/basic-languages/pascaligo/pascaligo.js +0 -10
- package/assets/lib/vs/basic-languages/perl/perl.js +0 -10
- package/assets/lib/vs/basic-languages/pgsql/pgsql.js +0 -10
- package/assets/lib/vs/basic-languages/php/php.js +0 -10
- package/assets/lib/vs/basic-languages/pla/pla.js +0 -10
- package/assets/lib/vs/basic-languages/postiats/postiats.js +0 -10
- package/assets/lib/vs/basic-languages/powerquery/powerquery.js +0 -10
- package/assets/lib/vs/basic-languages/powershell/powershell.js +0 -10
- package/assets/lib/vs/basic-languages/protobuf/protobuf.js +0 -11
- package/assets/lib/vs/basic-languages/pug/pug.js +0 -10
- package/assets/lib/vs/basic-languages/python/python.js +0 -10
- package/assets/lib/vs/basic-languages/qsharp/qsharp.js +0 -10
- package/assets/lib/vs/basic-languages/r/r.js +0 -10
- package/assets/lib/vs/basic-languages/razor/razor.js +0 -10
- package/assets/lib/vs/basic-languages/redis/redis.js +0 -10
- package/assets/lib/vs/basic-languages/redshift/redshift.js +0 -10
- package/assets/lib/vs/basic-languages/restructuredtext/restructuredtext.js +0 -10
- package/assets/lib/vs/basic-languages/ruby/ruby.js +0 -10
- package/assets/lib/vs/basic-languages/rust/rust.js +0 -10
- package/assets/lib/vs/basic-languages/sb/sb.js +0 -10
- package/assets/lib/vs/basic-languages/scala/scala.js +0 -10
- package/assets/lib/vs/basic-languages/scheme/scheme.js +0 -10
- package/assets/lib/vs/basic-languages/scss/scss.js +0 -12
- package/assets/lib/vs/basic-languages/shell/shell.js +0 -10
- package/assets/lib/vs/basic-languages/solidity/solidity.js +0 -10
- package/assets/lib/vs/basic-languages/sophia/sophia.js +0 -10
- package/assets/lib/vs/basic-languages/sparql/sparql.js +0 -10
- package/assets/lib/vs/basic-languages/sql/sql.js +0 -10
- package/assets/lib/vs/basic-languages/st/st.js +0 -10
- package/assets/lib/vs/basic-languages/swift/swift.js +0 -13
- package/assets/lib/vs/basic-languages/systemverilog/systemverilog.js +0 -10
- package/assets/lib/vs/basic-languages/tcl/tcl.js +0 -10
- package/assets/lib/vs/basic-languages/twig/twig.js +0 -10
- package/assets/lib/vs/basic-languages/typescript/typescript.js +0 -10
- package/assets/lib/vs/basic-languages/vb/vb.js +0 -10
- package/assets/lib/vs/basic-languages/wgsl/wgsl.js +0 -307
- package/assets/lib/vs/basic-languages/xml/xml.js +0 -10
- package/assets/lib/vs/basic-languages/yaml/yaml.js +0 -10
- package/assets/lib/vs/editor/editor.main.css +0 -6
- package/assets/lib/vs/editor/editor.main.js +0 -752
- package/assets/lib/vs/editor/editor.main.nls.de.js +0 -31
- package/assets/lib/vs/editor/editor.main.nls.es.js +0 -31
- package/assets/lib/vs/editor/editor.main.nls.fr.js +0 -29
- package/assets/lib/vs/editor/editor.main.nls.it.js +0 -29
- package/assets/lib/vs/editor/editor.main.nls.ja.js +0 -31
- package/assets/lib/vs/editor/editor.main.nls.js +0 -29
- package/assets/lib/vs/editor/editor.main.nls.ko.js +0 -29
- package/assets/lib/vs/editor/editor.main.nls.ru.js +0 -31
- package/assets/lib/vs/editor/editor.main.nls.zh-cn.js +0 -31
- package/assets/lib/vs/editor/editor.main.nls.zh-tw.js +0 -29
- package/assets/lib/vs/language/css/cssMode.js +0 -13
- package/assets/lib/vs/language/css/cssWorker.js +0 -81
- package/assets/lib/vs/language/html/htmlMode.js +0 -13
- package/assets/lib/vs/language/html/htmlWorker.js +0 -453
- package/assets/lib/vs/language/json/jsonMode.js +0 -15
- package/assets/lib/vs/language/json/jsonWorker.js +0 -36
- package/assets/lib/vs/language/typescript/tsMode.js +0 -20
- package/assets/lib/vs/language/typescript/tsWorker.js +0 -37016
- package/assets/lib/vs/loader.js +0 -11
- package/assets/mat-icons.ts +0 -5704
- package/assets/material/3d.svg +0 -1
- package/assets/material/abc.svg +0 -1
- package/assets/material/actionscript.svg +0 -1
- package/assets/material/ada.svg +0 -1
- package/assets/material/adonis.svg +0 -1
- package/assets/material/advpl_include.svg +0 -1
- package/assets/material/advpl_prw.svg +0 -1
- package/assets/material/advpl_ptm.svg +0 -1
- package/assets/material/advpl_tlpp.svg +0 -1
- package/assets/material/android.svg +0 -1
- package/assets/material/angular-component.svg +0 -1
- package/assets/material/angular-directive.svg +0 -1
- package/assets/material/angular-guard.svg +0 -1
- package/assets/material/angular-pipe.svg +0 -1
- package/assets/material/angular-resolver.svg +0 -1
- package/assets/material/angular-service.svg +0 -1
- package/assets/material/angular.svg +0 -1
- package/assets/material/antlr.svg +0 -1
- package/assets/material/apiblueprint.svg +0 -1
- package/assets/material/apollo.svg +0 -1
- package/assets/material/applescript.svg +0 -1
- package/assets/material/appveyor.svg +0 -1
- package/assets/material/architecture.svg +0 -1
- package/assets/material/arduino.svg +0 -1
- package/assets/material/asciidoc.svg +0 -1
- package/assets/material/assembly.svg +0 -1
- package/assets/material/astro.svg +0 -1
- package/assets/material/astyle.svg +0 -1
- package/assets/material/audio.svg +0 -1
- package/assets/material/aurelia.svg +0 -1
- package/assets/material/authors.svg +0 -1
- package/assets/material/auto.svg +0 -1
- package/assets/material/auto_light.svg +0 -1
- package/assets/material/autohotkey.svg +0 -1
- package/assets/material/autoit.svg +0 -1
- package/assets/material/azure-pipelines.svg +0 -1
- package/assets/material/azure.svg +0 -1
- package/assets/material/babel.svg +0 -1
- package/assets/material/ballerina.svg +0 -1
- package/assets/material/bazel.svg +0 -1
- package/assets/material/bicep.svg +0 -1
- package/assets/material/bitbucket.svg +0 -13
- package/assets/material/bithound.svg +0 -1
- package/assets/material/blink.svg +0 -1
- package/assets/material/blink_light.svg +0 -1
- package/assets/material/blitz.svg +0 -1
- package/assets/material/bower.svg +0 -1
- package/assets/material/brainfuck.svg +0 -1
- package/assets/material/browserlist.svg +0 -1
- package/assets/material/browserlist_light.svg +0 -1
- package/assets/material/buck.svg +0 -1
- package/assets/material/bucklescript.svg +0 -1
- package/assets/material/buildkite.svg +0 -1
- package/assets/material/bun.svg +0 -2
- package/assets/material/bun_light.svg +0 -2
- package/assets/material/c.svg +0 -4
- package/assets/material/cabal.svg +0 -1
- package/assets/material/caddy.svg +0 -1
- package/assets/material/cadence.svg +0 -1
- package/assets/material/cake.svg +0 -1
- package/assets/material/capacitor.svg +0 -1
- package/assets/material/certificate.svg +0 -1
- package/assets/material/changelog.svg +0 -1
- package/assets/material/chess.svg +0 -1
- package/assets/material/chess_light.svg +0 -1
- package/assets/material/circleci.svg +0 -1
- package/assets/material/circleci_light.svg +0 -1
- package/assets/material/clojure.svg +0 -1
- package/assets/material/cloudfoundry.svg +0 -1
- package/assets/material/cmake.svg +0 -1
- package/assets/material/coala.svg +0 -1
- package/assets/material/cobol.svg +0 -1
- package/assets/material/coconut.svg +0 -1
- package/assets/material/code-climate.svg +0 -1
- package/assets/material/code-climate_light.svg +0 -1
- package/assets/material/codecov.svg +0 -1
- package/assets/material/codeowners.svg +0 -1
- package/assets/material/coffee.svg +0 -1
- package/assets/material/coldfusion.svg +0 -1
- package/assets/material/command.svg +0 -1
- package/assets/material/commitlint.svg +0 -1
- package/assets/material/conduct.svg +0 -1
- package/assets/material/console.svg +0 -1
- package/assets/material/contributing.svg +0 -1
- package/assets/material/cpp.svg +0 -4
- package/assets/material/craco.svg +0 -45
- package/assets/material/credits.svg +0 -1
- package/assets/material/crystal.svg +0 -1
- package/assets/material/crystal_light.svg +0 -1
- package/assets/material/csharp.svg +0 -4
- package/assets/material/css-map.svg +0 -1
- package/assets/material/css.svg +0 -1
- package/assets/material/cucumber.svg +0 -1
- package/assets/material/cuda.svg +0 -1
- package/assets/material/cypress.svg +0 -1
- package/assets/material/d.svg +0 -1
- package/assets/material/dart.svg +0 -1
- package/assets/material/dart_generated.svg +0 -1
- package/assets/material/database.svg +0 -1
- package/assets/material/denizenscript.svg +0 -1
- package/assets/material/deno.svg +0 -1
- package/assets/material/deno_light.svg +0 -1
- package/assets/material/dependabot.svg +0 -1
- package/assets/material/dhall.svg +0 -1
- package/assets/material/diff.svg +0 -1
- package/assets/material/dinophp.svg +0 -1
- package/assets/material/disc.svg +0 -1
- package/assets/material/django.svg +0 -1
- package/assets/material/docker.svg +0 -1
- package/assets/material/document.svg +0 -1
- package/assets/material/dotjs.svg +0 -1
- package/assets/material/drawio.svg +0 -1
- package/assets/material/drone.svg +0 -1
- package/assets/material/drone_light.svg +0 -1
- package/assets/material/dune.svg +0 -1
- package/assets/material/edge.svg +0 -1
- package/assets/material/editorconfig.svg +0 -1
- package/assets/material/ejs.svg +0 -1
- package/assets/material/elixir.svg +0 -1
- package/assets/material/elm.svg +0 -1
- package/assets/material/email.svg +0 -1
- package/assets/material/ember.svg +0 -1
- package/assets/material/erlang.svg +0 -1
- package/assets/material/eslint.svg +0 -1
- package/assets/material/exe.svg +0 -1
- package/assets/material/fastlane.svg +0 -1
- package/assets/material/favicon.svg +0 -1
- package/assets/material/figma.svg +0 -1
- package/assets/material/file.svg +0 -1
- package/assets/material/firebase.svg +0 -1
- package/assets/material/flash.svg +0 -1
- package/assets/material/flow.svg +0 -1
- package/assets/material/folder-admin-open.svg +0 -1
- package/assets/material/folder-admin.svg +0 -1
- package/assets/material/folder-android-open.svg +0 -1
- package/assets/material/folder-android.svg +0 -1
- package/assets/material/folder-angular-open.svg +0 -1
- package/assets/material/folder-angular.svg +0 -1
- package/assets/material/folder-animation-open.svg +0 -1
- package/assets/material/folder-animation.svg +0 -1
- package/assets/material/folder-ansible-open.svg +0 -1
- package/assets/material/folder-ansible.svg +0 -1
- package/assets/material/folder-api-open.svg +0 -1
- package/assets/material/folder-api.svg +0 -1
- package/assets/material/folder-apollo-open.svg +0 -1
- package/assets/material/folder-apollo.svg +0 -1
- package/assets/material/folder-app-open.svg +0 -1
- package/assets/material/folder-app.svg +0 -1
- package/assets/material/folder-archive-open.svg +0 -1
- package/assets/material/folder-archive.svg +0 -1
- package/assets/material/folder-audio-open.svg +0 -1
- package/assets/material/folder-audio.svg +0 -1
- package/assets/material/folder-aurelia-open.svg +0 -1
- package/assets/material/folder-aurelia.svg +0 -1
- package/assets/material/folder-aws-open.svg +0 -1
- package/assets/material/folder-aws.svg +0 -1
- package/assets/material/folder-azure-pipelines-open.svg +0 -1
- package/assets/material/folder-azure-pipelines.svg +0 -1
- package/assets/material/folder-base-open.svg +0 -1
- package/assets/material/folder-base.svg +0 -1
- package/assets/material/folder-batch-open.svg +0 -1
- package/assets/material/folder-batch.svg +0 -1
- package/assets/material/folder-benchmark-open.svg +0 -1
- package/assets/material/folder-benchmark.svg +0 -1
- package/assets/material/folder-bower-open.svg +0 -1
- package/assets/material/folder-bower.svg +0 -1
- package/assets/material/folder-buildkite-open.svg +0 -1
- package/assets/material/folder-buildkite.svg +0 -1
- package/assets/material/folder-cart-open.svg +0 -1
- package/assets/material/folder-cart.svg +0 -1
- package/assets/material/folder-changesets-open.svg +0 -5
- package/assets/material/folder-changesets.svg +0 -2
- package/assets/material/folder-ci-open.svg +0 -1
- package/assets/material/folder-ci.svg +0 -1
- package/assets/material/folder-circleci-open.svg +0 -1
- package/assets/material/folder-circleci.svg +0 -1
- package/assets/material/folder-class-open.svg +0 -1
- package/assets/material/folder-class.svg +0 -1
- package/assets/material/folder-client-open.svg +0 -1
- package/assets/material/folder-client.svg +0 -1
- package/assets/material/folder-cluster-open.svg +0 -1
- package/assets/material/folder-cluster.svg +0 -1
- package/assets/material/folder-cobol-open.svg +0 -1
- package/assets/material/folder-cobol.svg +0 -1
- package/assets/material/folder-command-open.svg +0 -1
- package/assets/material/folder-command.svg +0 -1
- package/assets/material/folder-components-open.svg +0 -1
- package/assets/material/folder-components.svg +0 -1
- package/assets/material/folder-config-open.svg +0 -1
- package/assets/material/folder-config.svg +0 -1
- package/assets/material/folder-connection-open.svg +0 -1
- package/assets/material/folder-connection.svg +0 -1
- package/assets/material/folder-constant-open.svg +0 -1
- package/assets/material/folder-constant.svg +0 -1
- package/assets/material/folder-container-open.svg +0 -1
- package/assets/material/folder-container.svg +0 -1
- package/assets/material/folder-content-open.svg +0 -1
- package/assets/material/folder-content.svg +0 -1
- package/assets/material/folder-context-open.svg +0 -1
- package/assets/material/folder-context.svg +0 -1
- package/assets/material/folder-contract-open.svg +0 -1
- package/assets/material/folder-contract.svg +0 -1
- package/assets/material/folder-controller-open.svg +0 -1
- package/assets/material/folder-controller.svg +0 -1
- package/assets/material/folder-core-open.svg +0 -1
- package/assets/material/folder-core.svg +0 -1
- package/assets/material/folder-coverage-open.svg +0 -1
- package/assets/material/folder-coverage.svg +0 -1
- package/assets/material/folder-css-open.svg +0 -1
- package/assets/material/folder-css.svg +0 -1
- package/assets/material/folder-custom-open.svg +0 -1
- package/assets/material/folder-custom.svg +0 -1
- package/assets/material/folder-cypress-open.svg +0 -1
- package/assets/material/folder-cypress.svg +0 -1
- package/assets/material/folder-database-open.svg +0 -1
- package/assets/material/folder-database.svg +0 -1
- package/assets/material/folder-debug-open.svg +0 -1
- package/assets/material/folder-debug.svg +0 -1
- package/assets/material/folder-decorators-open.svg +0 -2
- package/assets/material/folder-decorators.svg +0 -5
- package/assets/material/folder-delta-open.svg +0 -1
- package/assets/material/folder-delta.svg +0 -1
- package/assets/material/folder-dist-open.svg +0 -1
- package/assets/material/folder-dist.svg +0 -1
- package/assets/material/folder-docker-open.svg +0 -1
- package/assets/material/folder-docker.svg +0 -1
- package/assets/material/folder-docs-open.svg +0 -1
- package/assets/material/folder-docs.svg +0 -1
- package/assets/material/folder-download-open.svg +0 -1
- package/assets/material/folder-download.svg +0 -1
- package/assets/material/folder-dump-open.svg +0 -1
- package/assets/material/folder-dump.svg +0 -1
- package/assets/material/folder-environment-open.svg +0 -1
- package/assets/material/folder-environment.svg +0 -1
- package/assets/material/folder-error-open.svg +0 -1
- package/assets/material/folder-error.svg +0 -1
- package/assets/material/folder-event-open.svg +0 -1
- package/assets/material/folder-event.svg +0 -1
- package/assets/material/folder-examples-open.svg +0 -1
- package/assets/material/folder-examples.svg +0 -1
- package/assets/material/folder-expo-open.svg +0 -1
- package/assets/material/folder-expo.svg +0 -1
- package/assets/material/folder-export-open.svg +0 -1
- package/assets/material/folder-export.svg +0 -1
- package/assets/material/folder-fastlane-open.svg +0 -1
- package/assets/material/folder-fastlane.svg +0 -1
- package/assets/material/folder-firebase-open.svg +0 -1
- package/assets/material/folder-firebase.svg +0 -1
- package/assets/material/folder-flow-open.svg +0 -1
- package/assets/material/folder-flow.svg +0 -1
- package/assets/material/folder-font-open.svg +0 -1
- package/assets/material/folder-font.svg +0 -1
- package/assets/material/folder-functions-open.svg +0 -1
- package/assets/material/folder-functions.svg +0 -1
- package/assets/material/folder-gamemaker-open.svg +0 -2
- package/assets/material/folder-gamemaker.svg +0 -2
- package/assets/material/folder-generator-open.svg +0 -1
- package/assets/material/folder-generator.svg +0 -1
- package/assets/material/folder-git-open.svg +0 -1
- package/assets/material/folder-git.svg +0 -1
- package/assets/material/folder-github-open.svg +0 -1
- package/assets/material/folder-github.svg +0 -1
- package/assets/material/folder-gitlab-open.svg +0 -1
- package/assets/material/folder-gitlab.svg +0 -1
- package/assets/material/folder-global-open.svg +0 -1
- package/assets/material/folder-global.svg +0 -1
- package/assets/material/folder-godot-open.svg +0 -2
- package/assets/material/folder-godot.svg +0 -8
- package/assets/material/folder-gradle-open.svg +0 -1
- package/assets/material/folder-gradle.svg +0 -1
- package/assets/material/folder-graphql-open.svg +0 -1
- package/assets/material/folder-graphql.svg +0 -1
- package/assets/material/folder-guard-open.svg +0 -1
- package/assets/material/folder-guard.svg +0 -1
- package/assets/material/folder-gulp-open.svg +0 -1
- package/assets/material/folder-gulp.svg +0 -1
- package/assets/material/folder-helper-open.svg +0 -1
- package/assets/material/folder-helper.svg +0 -1
- package/assets/material/folder-home-open.svg +0 -1
- package/assets/material/folder-home.svg +0 -1
- package/assets/material/folder-hook-open.svg +0 -1
- package/assets/material/folder-hook.svg +0 -1
- package/assets/material/folder-husky-open.svg +0 -1
- package/assets/material/folder-husky.svg +0 -1
- package/assets/material/folder-i18n-open.svg +0 -1
- package/assets/material/folder-i18n.svg +0 -1
- package/assets/material/folder-images-open.svg +0 -1
- package/assets/material/folder-images.svg +0 -1
- package/assets/material/folder-import-open.svg +0 -1
- package/assets/material/folder-import.svg +0 -1
- package/assets/material/folder-include-open.svg +0 -1
- package/assets/material/folder-include.svg +0 -1
- package/assets/material/folder-intellij-open.svg +0 -1
- package/assets/material/folder-intellij-open_light.svg +0 -1
- package/assets/material/folder-intellij.svg +0 -1
- package/assets/material/folder-intellij_light.svg +0 -1
- package/assets/material/folder-interface-open.svg +0 -1
- package/assets/material/folder-interface.svg +0 -1
- package/assets/material/folder-ios-open.svg +0 -1
- package/assets/material/folder-ios.svg +0 -1
- package/assets/material/folder-java-open.svg +0 -1
- package/assets/material/folder-java.svg +0 -1
- package/assets/material/folder-javascript-open.svg +0 -1
- package/assets/material/folder-javascript.svg +0 -1
- package/assets/material/folder-jinja-open.svg +0 -1
- package/assets/material/folder-jinja-open_light.svg +0 -1
- package/assets/material/folder-jinja.svg +0 -1
- package/assets/material/folder-jinja_light.svg +0 -1
- package/assets/material/folder-job-open.svg +0 -1
- package/assets/material/folder-job.svg +0 -1
- package/assets/material/folder-json-open.svg +0 -1
- package/assets/material/folder-json.svg +0 -1
- package/assets/material/folder-keys-open.svg +0 -1
- package/assets/material/folder-keys.svg +0 -1
- package/assets/material/folder-kubernetes-open.svg +0 -1
- package/assets/material/folder-kubernetes.svg +0 -1
- package/assets/material/folder-layout-open.svg +0 -1
- package/assets/material/folder-layout.svg +0 -1
- package/assets/material/folder-less-open.svg +0 -1
- package/assets/material/folder-less.svg +0 -1
- package/assets/material/folder-lib-open.svg +0 -1
- package/assets/material/folder-lib.svg +0 -1
- package/assets/material/folder-log-open.svg +0 -1
- package/assets/material/folder-log.svg +0 -1
- package/assets/material/folder-lua-open.svg +0 -1
- package/assets/material/folder-lua.svg +0 -1
- package/assets/material/folder-mail-open.svg +0 -1
- package/assets/material/folder-mail.svg +0 -1
- package/assets/material/folder-mappings-open.svg +0 -1
- package/assets/material/folder-mappings.svg +0 -1
- package/assets/material/folder-markdown-open.svg +0 -1
- package/assets/material/folder-markdown.svg +0 -1
- package/assets/material/folder-mercurial-open.svg +0 -5
- package/assets/material/folder-mercurial.svg +0 -2
- package/assets/material/folder-messages-open.svg +0 -1
- package/assets/material/folder-messages.svg +0 -1
- package/assets/material/folder-meta-open.svg +0 -1
- package/assets/material/folder-meta.svg +0 -1
- package/assets/material/folder-middleware-open.svg +0 -1
- package/assets/material/folder-middleware.svg +0 -1
- package/assets/material/folder-mjml-open.svg +0 -1
- package/assets/material/folder-mjml.svg +0 -1
- package/assets/material/folder-mobile-open.svg +0 -1
- package/assets/material/folder-mobile.svg +0 -1
- package/assets/material/folder-mock-open.svg +0 -1
- package/assets/material/folder-mock.svg +0 -1
- package/assets/material/folder-netlify-open.svg +0 -5
- package/assets/material/folder-netlify.svg +0 -2
- package/assets/material/folder-next-open.svg +0 -1
- package/assets/material/folder-next.svg +0 -1
- package/assets/material/folder-ngrx-actions-open.svg +0 -1
- package/assets/material/folder-ngrx-actions.svg +0 -1
- package/assets/material/folder-ngrx-effects-open.svg +0 -1
- package/assets/material/folder-ngrx-effects.svg +0 -1
- package/assets/material/folder-ngrx-entities-open.svg +0 -1
- package/assets/material/folder-ngrx-entities.svg +0 -1
- package/assets/material/folder-ngrx-reducer-open.svg +0 -1
- package/assets/material/folder-ngrx-reducer.svg +0 -1
- package/assets/material/folder-ngrx-selectors-open.svg +0 -1
- package/assets/material/folder-ngrx-selectors.svg +0 -1
- package/assets/material/folder-ngrx-state-open.svg +0 -1
- package/assets/material/folder-ngrx-state.svg +0 -1
- package/assets/material/folder-ngrx-store-open.svg +0 -1
- package/assets/material/folder-ngrx-store.svg +0 -1
- package/assets/material/folder-node-open.svg +0 -1
- package/assets/material/folder-node.svg +0 -1
- package/assets/material/folder-nuxt-open.svg +0 -1
- package/assets/material/folder-nuxt.svg +0 -1
- package/assets/material/folder-open.svg +0 -1
- package/assets/material/folder-other-open.svg +0 -1
- package/assets/material/folder-other.svg +0 -1
- package/assets/material/folder-packages-open.svg +0 -1
- package/assets/material/folder-packages.svg +0 -1
- package/assets/material/folder-pdf-open.svg +0 -1
- package/assets/material/folder-pdf.svg +0 -1
- package/assets/material/folder-php-open.svg +0 -1
- package/assets/material/folder-php.svg +0 -1
- package/assets/material/folder-phpmailer-open.svg +0 -1
- package/assets/material/folder-phpmailer.svg +0 -1
- package/assets/material/folder-pipe-open.svg +0 -1
- package/assets/material/folder-pipe.svg +0 -1
- package/assets/material/folder-plastic-open.svg +0 -8
- package/assets/material/folder-plastic.svg +0 -2
- package/assets/material/folder-plugin-open.svg +0 -1
- package/assets/material/folder-plugin.svg +0 -1
- package/assets/material/folder-prisma-open.svg +0 -1
- package/assets/material/folder-prisma.svg +0 -1
- package/assets/material/folder-private-open.svg +0 -1
- package/assets/material/folder-private.svg +0 -1
- package/assets/material/folder-project-open.svg +0 -1
- package/assets/material/folder-project.svg +0 -1
- package/assets/material/folder-proto-open.svg +0 -1
- package/assets/material/folder-proto.svg +0 -1
- package/assets/material/folder-public-open.svg +0 -1
- package/assets/material/folder-public.svg +0 -1
- package/assets/material/folder-python-open.svg +0 -1
- package/assets/material/folder-python.svg +0 -1
- package/assets/material/folder-quasar-open.svg +0 -1
- package/assets/material/folder-quasar.svg +0 -1
- package/assets/material/folder-queue-open.svg +0 -1
- package/assets/material/folder-queue.svg +0 -1
- package/assets/material/folder-react-components-open.svg +0 -1
- package/assets/material/folder-react-components.svg +0 -1
- package/assets/material/folder-redux-actions-open.svg +0 -1
- package/assets/material/folder-redux-actions.svg +0 -1
- package/assets/material/folder-redux-reducer-open.svg +0 -1
- package/assets/material/folder-redux-reducer.svg +0 -1
- package/assets/material/folder-redux-selector-open.svg +0 -1
- package/assets/material/folder-redux-selector.svg +0 -1
- package/assets/material/folder-redux-store-open.svg +0 -1
- package/assets/material/folder-redux-store.svg +0 -1
- package/assets/material/folder-resolver-open.svg +0 -1
- package/assets/material/folder-resolver.svg +0 -1
- package/assets/material/folder-resource-open.svg +0 -1
- package/assets/material/folder-resource.svg +0 -1
- package/assets/material/folder-review-open.svg +0 -1
- package/assets/material/folder-review.svg +0 -1
- package/assets/material/folder-root-open.svg +0 -1
- package/assets/material/folder-root.svg +0 -1
- package/assets/material/folder-routes-open.svg +0 -1
- package/assets/material/folder-routes.svg +0 -1
- package/assets/material/folder-rules-open.svg +0 -1
- package/assets/material/folder-rules.svg +0 -1
- package/assets/material/folder-sass-open.svg +0 -1
- package/assets/material/folder-sass.svg +0 -1
- package/assets/material/folder-scala-open.svg +0 -1
- package/assets/material/folder-scala.svg +0 -1
- package/assets/material/folder-scripts-open.svg +0 -1
- package/assets/material/folder-scripts.svg +0 -1
- package/assets/material/folder-secure-open.svg +0 -1
- package/assets/material/folder-secure.svg +0 -1
- package/assets/material/folder-server-open.svg +0 -1
- package/assets/material/folder-server.svg +0 -1
- package/assets/material/folder-serverless-open.svg +0 -1
- package/assets/material/folder-serverless.svg +0 -1
- package/assets/material/folder-shader-open.svg +0 -1
- package/assets/material/folder-shader.svg +0 -1
- package/assets/material/folder-shared-open.svg +0 -1
- package/assets/material/folder-shared.svg +0 -1
- package/assets/material/folder-src-open.svg +0 -1
- package/assets/material/folder-src.svg +0 -1
- package/assets/material/folder-stack-open.svg +0 -1
- package/assets/material/folder-stack.svg +0 -1
- package/assets/material/folder-stencil-open.svg +0 -1
- package/assets/material/folder-stencil.svg +0 -1
- package/assets/material/folder-storybook-open.svg +0 -1
- package/assets/material/folder-storybook.svg +0 -1
- package/assets/material/folder-stylus-open.svg +0 -1
- package/assets/material/folder-stylus.svg +0 -1
- package/assets/material/folder-sublime-open.svg +0 -1
- package/assets/material/folder-sublime.svg +0 -1
- package/assets/material/folder-supabase-open.svg +0 -5
- package/assets/material/folder-supabase.svg +0 -2
- package/assets/material/folder-svelte-open.svg +0 -1
- package/assets/material/folder-svelte.svg +0 -1
- package/assets/material/folder-svg-open.svg +0 -1
- package/assets/material/folder-svg.svg +0 -1
- package/assets/material/folder-syntax-open.svg +0 -1
- package/assets/material/folder-syntax.svg +0 -1
- package/assets/material/folder-target-open.svg +0 -1
- package/assets/material/folder-target.svg +0 -1
- package/assets/material/folder-tasks-open.svg +0 -1
- package/assets/material/folder-tasks.svg +0 -1
- package/assets/material/folder-temp-open.svg +0 -1
- package/assets/material/folder-temp.svg +0 -1
- package/assets/material/folder-template-open.svg +0 -1
- package/assets/material/folder-template.svg +0 -1
- package/assets/material/folder-terraform-open.svg +0 -1
- package/assets/material/folder-terraform.svg +0 -1
- package/assets/material/folder-test-open.svg +0 -1
- package/assets/material/folder-test.svg +0 -1
- package/assets/material/folder-theme-open.svg +0 -1
- package/assets/material/folder-theme.svg +0 -1
- package/assets/material/folder-tools-open.svg +0 -1
- package/assets/material/folder-tools.svg +0 -1
- package/assets/material/folder-typescript-open.svg +0 -1
- package/assets/material/folder-typescript.svg +0 -1
- package/assets/material/folder-unity-open.svg +0 -1
- package/assets/material/folder-unity.svg +0 -1
- package/assets/material/folder-update-open.svg +0 -1
- package/assets/material/folder-update.svg +0 -1
- package/assets/material/folder-upload-open.svg +0 -1
- package/assets/material/folder-upload.svg +0 -1
- package/assets/material/folder-utils-open.svg +0 -1
- package/assets/material/folder-utils.svg +0 -1
- package/assets/material/folder-vercel-open.svg +0 -1
- package/assets/material/folder-vercel.svg +0 -1
- package/assets/material/folder-verdaccio-open.svg +0 -1
- package/assets/material/folder-verdaccio.svg +0 -1
- package/assets/material/folder-video-open.svg +0 -1
- package/assets/material/folder-video.svg +0 -1
- package/assets/material/folder-views-open.svg +0 -1
- package/assets/material/folder-views.svg +0 -1
- package/assets/material/folder-vm-open.svg +0 -1
- package/assets/material/folder-vm.svg +0 -1
- package/assets/material/folder-vscode-open.svg +0 -1
- package/assets/material/folder-vscode.svg +0 -1
- package/assets/material/folder-vue-directives-open.svg +0 -1
- package/assets/material/folder-vue-directives.svg +0 -1
- package/assets/material/folder-vue-open.svg +0 -1
- package/assets/material/folder-vue.svg +0 -1
- package/assets/material/folder-vuepress-open.svg +0 -1
- package/assets/material/folder-vuepress.svg +0 -1
- package/assets/material/folder-vuex-store-open.svg +0 -1
- package/assets/material/folder-vuex-store.svg +0 -1
- package/assets/material/folder-wakatime-open.svg +0 -1
- package/assets/material/folder-wakatime.svg +0 -1
- package/assets/material/folder-webpack-open.svg +0 -1
- package/assets/material/folder-webpack.svg +0 -1
- package/assets/material/folder-wordpress-open.svg +0 -1
- package/assets/material/folder-wordpress.svg +0 -1
- package/assets/material/folder-yarn-open.svg +0 -1
- package/assets/material/folder-yarn.svg +0 -1
- package/assets/material/folder.svg +0 -1
- package/assets/material/font.svg +0 -1
- package/assets/material/forth.svg +0 -1
- package/assets/material/fortran.svg +0 -1
- package/assets/material/foxpro.svg +0 -1
- package/assets/material/fsharp.svg +0 -1
- package/assets/material/fusebox.svg +0 -1
- package/assets/material/gamemaker.svg +0 -4
- package/assets/material/gatsby.svg +0 -1
- package/assets/material/gcp.svg +0 -1
- package/assets/material/gemfile.svg +0 -1
- package/assets/material/gemini.svg +0 -1
- package/assets/material/git.svg +0 -1
- package/assets/material/gitlab.svg +0 -1
- package/assets/material/gitpod.svg +0 -1
- package/assets/material/gleam.svg +0 -1
- package/assets/material/go-mod.svg +0 -1
- package/assets/material/go.svg +0 -1
- package/assets/material/go_gopher.svg +0 -1
- package/assets/material/godot-assets.svg +0 -7
- package/assets/material/godot.svg +0 -7
- package/assets/material/gradle.svg +0 -1
- package/assets/material/grain.svg +0 -1
- package/assets/material/graphcool.svg +0 -1
- package/assets/material/graphql.svg +0 -1
- package/assets/material/gridsome.svg +0 -1
- package/assets/material/groovy.svg +0 -1
- package/assets/material/grunt.svg +0 -1
- package/assets/material/gulp.svg +0 -1
- package/assets/material/h.svg +0 -1
- package/assets/material/hack.svg +0 -1
- package/assets/material/haml.svg +0 -1
- package/assets/material/handlebars.svg +0 -1
- package/assets/material/hardhat.svg +0 -1
- package/assets/material/haskell.svg +0 -1
- package/assets/material/haxe.svg +0 -1
- package/assets/material/hcl.svg +0 -1
- package/assets/material/hcl_light.svg +0 -1
- package/assets/material/helm.svg +0 -1
- package/assets/material/heroku.svg +0 -1
- package/assets/material/hex.svg +0 -1
- package/assets/material/horusec.svg +0 -1
- package/assets/material/hpp.svg +0 -1
- package/assets/material/html.svg +0 -1
- package/assets/material/http.svg +0 -1
- package/assets/material/husky.svg +0 -1
- package/assets/material/i18n.svg +0 -1
- package/assets/material/idris.svg +0 -1
- package/assets/material/ifanr-cloud.svg +0 -10
- package/assets/material/image.svg +0 -1
- package/assets/material/imba.svg +0 -1
- package/assets/material/ionic.svg +0 -1
- package/assets/material/istanbul.svg +0 -1
- package/assets/material/jar.svg +0 -1
- package/assets/material/java.svg +0 -1
- package/assets/material/javaclass.svg +0 -1
- package/assets/material/javascript-map.svg +0 -1
- package/assets/material/javascript.svg +0 -1
- package/assets/material/jenkins.svg +0 -1
- package/assets/material/jest.svg +0 -1
- package/assets/material/jinja.svg +0 -1
- package/assets/material/jinja_light.svg +0 -1
- package/assets/material/jsconfig.svg +0 -1
- package/assets/material/json.svg +0 -1
- package/assets/material/julia.svg +0 -1
- package/assets/material/jupyter.svg +0 -1
- package/assets/material/karma.svg +0 -1
- package/assets/material/key.svg +0 -1
- package/assets/material/kivy.svg +0 -1
- package/assets/material/kl.svg +0 -1
- package/assets/material/kotlin.svg +0 -1
- package/assets/material/kusto.svg +0 -1
- package/assets/material/laravel.svg +0 -1
- package/assets/material/lerna.svg +0 -1
- package/assets/material/less.svg +0 -1
- package/assets/material/lib.svg +0 -1
- package/assets/material/lighthouse.svg +0 -1
- package/assets/material/lilypond.svg +0 -1
- package/assets/material/liquid.svg +0 -1
- package/assets/material/lisp.svg +0 -1
- package/assets/material/livescript.svg +0 -1
- package/assets/material/lock.svg +0 -1
- package/assets/material/log.svg +0 -1
- package/assets/material/lolcode.svg +0 -1
- package/assets/material/lua.svg +0 -1
- package/assets/material/makefile.svg +0 -1
- package/assets/material/markdown.svg +0 -1
- package/assets/material/markojs.svg +0 -1
- package/assets/material/mathematica.svg +0 -1
- package/assets/material/matlab.svg +0 -1
- package/assets/material/maven.svg +0 -1
- package/assets/material/mdsvex.svg +0 -1
- package/assets/material/mdx.svg +0 -1
- package/assets/material/mercurial.svg +0 -6
- package/assets/material/merlin.svg +0 -1
- package/assets/material/mermaid.svg +0 -4
- package/assets/material/meson.svg +0 -1
- package/assets/material/minecraft.svg +0 -1
- package/assets/material/mint.svg +0 -1
- package/assets/material/mjml.svg +0 -1
- package/assets/material/mocha.svg +0 -1
- package/assets/material/modernizr.svg +0 -1
- package/assets/material/moonscript.svg +0 -1
- package/assets/material/mxml.svg +0 -1
- package/assets/material/nano-staged.svg +0 -1
- package/assets/material/nano-staged_light.svg +0 -1
- package/assets/material/ndst.svg +0 -1
- package/assets/material/nest-controller.svg +0 -1
- package/assets/material/nest-decorator.svg +0 -1
- package/assets/material/nest-filter.svg +0 -1
- package/assets/material/nest-gateway.svg +0 -1
- package/assets/material/nest-guard.svg +0 -1
- package/assets/material/nest-middleware.svg +0 -1
- package/assets/material/nest-module.svg +0 -1
- package/assets/material/nest-pipe.svg +0 -1
- package/assets/material/nest-resolver.svg +0 -1
- package/assets/material/nest-service.svg +0 -1
- package/assets/material/nest.svg +0 -1
- package/assets/material/netlify.svg +0 -7
- package/assets/material/netlify_light.svg +0 -7
- package/assets/material/next.svg +0 -1
- package/assets/material/next_light.svg +0 -1
- package/assets/material/nginx.svg +0 -1
- package/assets/material/ngrx-actions.svg +0 -1
- package/assets/material/ngrx-effects.svg +0 -1
- package/assets/material/ngrx-entity.svg +0 -1
- package/assets/material/ngrx-reducer.svg +0 -1
- package/assets/material/ngrx-selectors.svg +0 -1
- package/assets/material/ngrx-state.svg +0 -1
- package/assets/material/nim.svg +0 -1
- package/assets/material/nix.svg +0 -1
- package/assets/material/nodejs.svg +0 -1
- package/assets/material/nodejs_alt.svg +0 -1
- package/assets/material/nodemon.svg +0 -1
- package/assets/material/npm.svg +0 -1
- package/assets/material/nrwl.svg +0 -1
- package/assets/material/nuget.svg +0 -1
- package/assets/material/nunjucks.svg +0 -1
- package/assets/material/nuxt.svg +0 -1
- package/assets/material/objective-c.svg +0 -4
- package/assets/material/objective-cpp.svg +0 -1
- package/assets/material/ocaml.svg +0 -1
- package/assets/material/odin.svg +0 -1
- package/assets/material/opa.svg +0 -1
- package/assets/material/opam.svg +0 -1
- package/assets/material/otne.svg +0 -1
- package/assets/material/parcel.svg +0 -1
- package/assets/material/pascal.svg +0 -6
- package/assets/material/pawn.svg +0 -1
- package/assets/material/pdf.svg +0 -1
- package/assets/material/percy.svg +0 -1
- package/assets/material/perl.svg +0 -1
- package/assets/material/php-cs-fixer.svg +0 -1
- package/assets/material/php.svg +0 -1
- package/assets/material/php_elephant.svg +0 -1
- package/assets/material/php_elephant_pink.svg +0 -1
- package/assets/material/phpunit.svg +0 -1
- package/assets/material/pinejs.svg +0 -1
- package/assets/material/pipeline.svg +0 -1
- package/assets/material/plastic.svg +0 -7
- package/assets/material/playwright.svg +0 -1
- package/assets/material/plop.svg +0 -1
- package/assets/material/pnpm.svg +0 -1
- package/assets/material/pnpm_light.svg +0 -1
- package/assets/material/poetry.svg +0 -1
- package/assets/material/postcss.svg +0 -1
- package/assets/material/posthtml.svg +0 -1
- package/assets/material/powerpoint.svg +0 -1
- package/assets/material/powershell.svg +0 -1
- package/assets/material/prettier.svg +0 -1
- package/assets/material/prisma.svg +0 -1
- package/assets/material/processing.svg +0 -1
- package/assets/material/prolog.svg +0 -1
- package/assets/material/proto.svg +0 -1
- package/assets/material/protractor.svg +0 -1
- package/assets/material/pug.svg +0 -1
- package/assets/material/puppet.svg +0 -1
- package/assets/material/purescript.svg +0 -1
- package/assets/material/python-misc.svg +0 -1
- package/assets/material/python.svg +0 -1
- package/assets/material/qsharp.svg +0 -1
- package/assets/material/quasar.svg +0 -1
- package/assets/material/qwik.svg +0 -2
- package/assets/material/r.svg +0 -1
- package/assets/material/racket.svg +0 -1
- package/assets/material/raml.svg +0 -1
- package/assets/material/razor.svg +0 -1
- package/assets/material/rc.svg +0 -2
- package/assets/material/react.svg +0 -1
- package/assets/material/react_ts.svg +0 -1
- package/assets/material/readme.svg +0 -1
- package/assets/material/reason.svg +0 -1
- package/assets/material/red.svg +0 -1
- package/assets/material/redux-action.svg +0 -1
- package/assets/material/redux-reducer.svg +0 -1
- package/assets/material/redux-selector.svg +0 -1
- package/assets/material/redux-store.svg +0 -1
- package/assets/material/remix.svg +0 -1
- package/assets/material/remix_light.svg +0 -1
- package/assets/material/renovate.svg +0 -1
- package/assets/material/replit.svg +0 -1
- package/assets/material/rescript-interface.svg +0 -1
- package/assets/material/rescript.svg +0 -1
- package/assets/material/restql.svg +0 -1
- package/assets/material/riot.svg +0 -1
- package/assets/material/roadmap.svg +0 -1
- package/assets/material/robot.svg +0 -1
- package/assets/material/robots.svg +0 -1
- package/assets/material/rollup.svg +0 -1
- package/assets/material/rome.svg +0 -1
- package/assets/material/routing.svg +0 -1
- package/assets/material/rubocop.svg +0 -1
- package/assets/material/rubocop_light.svg +0 -1
- package/assets/material/ruby.svg +0 -1
- package/assets/material/rust.svg +0 -1
- package/assets/material/salesforce.svg +0 -1
- package/assets/material/san.svg +0 -1
- package/assets/material/sas.svg +0 -1
- package/assets/material/sass.svg +0 -1
- package/assets/material/sbt.svg +0 -1
- package/assets/material/scala.svg +0 -1
- package/assets/material/scheme.svg +0 -1
- package/assets/material/search.svg +0 -1
- package/assets/material/semantic-release.svg +0 -1
- package/assets/material/semantic-release_light.svg +0 -1
- package/assets/material/sentry.svg +0 -1
- package/assets/material/sequelize.svg +0 -1
- package/assets/material/serverless.svg +0 -1
- package/assets/material/settings.svg +0 -1
- package/assets/material/shader.svg +0 -1
- package/assets/material/shaderlab.svg +0 -1
- package/assets/material/silverstripe.svg +0 -1
- package/assets/material/siyuan.svg +0 -1
- package/assets/material/sketch.svg +0 -1
- package/assets/material/slim.svg +0 -1
- package/assets/material/slug.svg +0 -1
- package/assets/material/smarty.svg +0 -1
- package/assets/material/sml.svg +0 -1
- package/assets/material/snowpack.svg +0 -1
- package/assets/material/snowpack_light.svg +0 -1
- package/assets/material/snyk.svg +0 -1
- package/assets/material/solidity.svg +0 -1
- package/assets/material/sonarcloud.svg +0 -4
- package/assets/material/steadybit.svg +0 -1
- package/assets/material/stencil.svg +0 -1
- package/assets/material/stitches.svg +0 -1
- package/assets/material/stitches_light.svg +0 -1
- package/assets/material/storybook.svg +0 -1
- package/assets/material/stryker.svg +0 -1
- package/assets/material/stylable.svg +0 -10
- package/assets/material/stylelint.svg +0 -1
- package/assets/material/stylelint_light.svg +0 -1
- package/assets/material/stylus.svg +0 -1
- package/assets/material/sublime.svg +0 -1
- package/assets/material/supabase.svg +0 -4
- package/assets/material/svelte.svg +0 -1
- package/assets/material/svg.svg +0 -1
- package/assets/material/svgo.svg +0 -1
- package/assets/material/svgr.svg +0 -1
- package/assets/material/swc.svg +0 -1
- package/assets/material/swift.svg +0 -1
- package/assets/material/table.svg +0 -1
- package/assets/material/tailwindcss.svg +0 -1
- package/assets/material/tauri.svg +0 -1
- package/assets/material/tcl.svg +0 -1
- package/assets/material/teal.svg +0 -1
- package/assets/material/template.svg +0 -1
- package/assets/material/terraform.svg +0 -1
- package/assets/material/test-js.svg +0 -1
- package/assets/material/test-jsx.svg +0 -1
- package/assets/material/test-ts.svg +0 -1
- package/assets/material/tex.svg +0 -1
- package/assets/material/textlint.svg +0 -1
- package/assets/material/tilt.svg +0 -1
- package/assets/material/tldraw.svg +0 -4
- package/assets/material/tldraw_light.svg +0 -4
- package/assets/material/tobi.svg +0 -1
- package/assets/material/tobimake.svg +0 -1
- package/assets/material/todo.svg +0 -1
- package/assets/material/travis.svg +0 -1
- package/assets/material/tree.svg +0 -1
- package/assets/material/tsconfig.svg +0 -1
- package/assets/material/tune.svg +0 -1
- package/assets/material/turborepo.svg +0 -1
- package/assets/material/turborepo_light.svg +0 -1
- package/assets/material/twig.svg +0 -1
- package/assets/material/twine.svg +0 -1
- package/assets/material/typescript-def.svg +0 -1
- package/assets/material/typescript.svg +0 -1
- package/assets/material/typst.svg +0 -2
- package/assets/material/uml.svg +0 -1
- package/assets/material/uml_light.svg +0 -1
- package/assets/material/url.svg +0 -1
- package/assets/material/vagrant.svg +0 -1
- package/assets/material/vala.svg +0 -1
- package/assets/material/velocity.svg +0 -1
- package/assets/material/vercel.svg +0 -1
- package/assets/material/vercel_light.svg +0 -1
- package/assets/material/verdaccio.svg +0 -1
- package/assets/material/verilog.svg +0 -1
- package/assets/material/vfl.svg +0 -1
- package/assets/material/video.svg +0 -1
- package/assets/material/vim.svg +0 -1
- package/assets/material/virtual.svg +0 -1
- package/assets/material/visualstudio.svg +0 -1
- package/assets/material/vite.svg +0 -1
- package/assets/material/vitest.svg +0 -6
- package/assets/material/vlang.svg +0 -1
- package/assets/material/vscode.svg +0 -1
- package/assets/material/vue-config.svg +0 -1
- package/assets/material/vue.svg +0 -1
- package/assets/material/vuex-store.svg +0 -1
- package/assets/material/wakatime.svg +0 -1
- package/assets/material/wakatime_light.svg +0 -1
- package/assets/material/wallaby.svg +0 -1
- package/assets/material/watchman.svg +0 -1
- package/assets/material/webassembly.svg +0 -1
- package/assets/material/webhint.svg +0 -1
- package/assets/material/webpack.svg +0 -1
- package/assets/material/wepy.svg +0 -1
- package/assets/material/windicss.svg +0 -1
- package/assets/material/wolframlanguage.svg +0 -1
- package/assets/material/word.svg +0 -1
- package/assets/material/xaml.svg +0 -1
- package/assets/material/xml.svg +0 -1
- package/assets/material/yaml.svg +0 -1
- package/assets/material/yang.svg +0 -1
- package/assets/material/yarn.svg +0 -1
- package/assets/material/zig.svg +0 -1
- package/assets/material/zip.svg +0 -1
- package/assets/pop/LICENSE +0 -2
- package/assets/pop/binary.svg +0 -1
- package/assets/pop/compressed.svg +0 -1
- package/assets/pop/database.svg +0 -1
- package/assets/pop/exts/7z.svg +0 -1
- package/assets/pop/exts/apk.svg +0 -1
- package/assets/pop/exts/arc.svg +0 -1
- package/assets/pop/exts/bz.svg +0 -1
- package/assets/pop/exts/deb.svg +0 -1
- package/assets/pop/exts/gz.svg +0 -1
- package/assets/pop/exts/pdf.svg +0 -1
- package/assets/pop/exts/rar.svg +0 -1
- package/assets/pop/exts/rpm.svg +0 -1
- package/assets/pop/exts/tar.svg +0 -1
- package/assets/pop/exts/xar.svg +0 -1
- package/assets/pop/exts/xz.svg +0 -1
- package/assets/pop/exts/zip.svg +0 -1
- package/assets/pop/folder-open.svg +0 -1
- package/assets/pop/folder.svg +0 -1
- package/assets/pop/generic.svg +0 -1
- package/assets/pop/presentation.svg +0 -1
- package/assets/pop/richtext.svg +0 -1
- package/assets/pop/spreadsheet.svg +0 -1
- package/assets/pop/text.svg +0 -1
- package/esm2022/components/lazy-loader/lazy-loader.component.mjs +0 -383
- package/esm2022/components/lazy-loader/lazy-loader.module.mjs +0 -33
- package/esm2022/components/lazy-loader/lazy-loader.service.mjs +0 -217
- package/esm2022/components/lazy-loader/types.mjs +0 -26
- package/esm2022/components/menu/menu.component.mjs +0 -433
- package/esm2022/components/parallax-card/parallax-card.component.mjs +0 -138
- package/esm2022/components/tooltip/tooltip.component.mjs +0 -205
- package/esm2022/components/types.mjs +0 -3
- package/esm2022/directives/image-cache.directive.mjs +0 -143
- package/esm2022/directives/menu.directive.mjs +0 -159
- package/esm2022/directives/tooltip.directive.mjs +0 -154
- package/esm2022/directives/utils.mjs +0 -120
- package/esm2022/pipes/html-bypass.pipe.mjs +0 -27
- package/esm2022/pipes/resource-bypass.pipe.mjs +0 -27
- package/esm2022/pipes/script-bypass.pipe.mjs +0 -27
- package/esm2022/pipes/style-bypass.pipe.mjs +0 -27
- package/esm2022/pipes/url-bypass.pipe.mjs +0 -27
- package/esm2022/public-api.mjs +0 -46
- package/esm2022/services/dependency.service.mjs +0 -55
- package/esm2022/services/dialog.service.mjs +0 -69
- package/esm2022/services/fetch.service.mjs +0 -74
- package/esm2022/services/file.service.mjs +0 -42
- package/esm2022/services/keyboard.service.mjs +0 -128
- package/esm2022/services/navigation.service.mjs +0 -52
- package/esm2022/services/theme.service.mjs +0 -64
- package/esm2022/types/menu.mjs +0 -2
- package/esm2022/types/popup.mjs +0 -2
- package/esm2022/types/tooltip.mjs +0 -2
- package/esm2022/utils/index.mjs +0 -205
- package/utils/index.d.ts +0 -128
- /package/{components → core/components}/lazy-loader/lazy-loader.component.d.ts +0 -0
- /package/{components → core/components}/lazy-loader/lazy-loader.module.d.ts +0 -0
- /package/{components → core/components}/lazy-loader/lazy-loader.service.d.ts +0 -0
- /package/{components → core/components}/lazy-loader/types.d.ts +0 -0
- /package/{components → core/components}/parallax-card/parallax-card.component.d.ts +0 -0
- /package/{directives → core/directives}/image-cache.directive.d.ts +0 -0
- /package/{directives → core/directives}/utils.d.ts +0 -0
- /package/{pipes → core/pipes}/html-bypass.pipe.d.ts +0 -0
- /package/{pipes → core/pipes}/resource-bypass.pipe.d.ts +0 -0
- /package/{pipes → core/pipes}/script-bypass.pipe.d.ts +0 -0
- /package/{pipes → core/pipes}/style-bypass.pipe.d.ts +0 -0
- /package/{pipes → core/pipes}/url-bypass.pipe.d.ts +0 -0
- /package/{services → core/services}/dependency.service.d.ts +0 -0
- /package/{services → core/services}/dialog.service.d.ts +0 -0
- /package/{services → core/services}/fetch.service.d.ts +0 -0
- /package/{services → core/services}/file.service.d.ts +0 -0
- /package/{services → core/services}/keyboard.service.d.ts +0 -0
- /package/{services → core/services}/theme.service.d.ts +0 -0
- /package/{types → core/types}/popup.d.ts +0 -0
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
-
import { Component, HostListener, Inject, Input, Optional, TemplateRef } from '@angular/core';
|
|
3
|
-
import { createApplication } from '@angular/platform-browser';
|
|
4
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
5
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
7
|
-
import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
|
|
8
|
-
import { firstValueFrom } from 'rxjs';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/platform-browser";
|
|
11
|
-
import * as i2 from "@angular/material/dialog";
|
|
12
|
-
import * as i3 from "@angular/cdk/portal";
|
|
13
|
-
import * as i4 from "@angular/material/icon";
|
|
14
|
-
import * as i5 from "@angular/material/progress-spinner";
|
|
15
|
-
const zone = new Zone(Zone.current, { name: "@dotglitch_menu", properties: {} });
|
|
16
|
-
export const calcMenuItemBounds = async (menuItems, dataObj) => {
|
|
17
|
-
const data = {
|
|
18
|
-
data: dataObj,
|
|
19
|
-
items: menuItems,
|
|
20
|
-
config: {},
|
|
21
|
-
selfCords: { left: "0px", top: "0px" },
|
|
22
|
-
ownerCords: { x: 0, y: 0, width: 0, height: 0 },
|
|
23
|
-
id: null
|
|
24
|
-
};
|
|
25
|
-
return calcComponentBounds(MenuComponent, data);
|
|
26
|
-
};
|
|
27
|
-
const calcComponentBounds = async (component, data) => {
|
|
28
|
-
return new Promise((res, rej) => {
|
|
29
|
-
zone.run(async () => {
|
|
30
|
-
const app = await createApplication({
|
|
31
|
-
providers: [
|
|
32
|
-
{ provide: MAT_DIALOG_DATA, useValue: data }
|
|
33
|
-
]
|
|
34
|
-
});
|
|
35
|
-
const del = document.createElement("div");
|
|
36
|
-
del.classList.add("ngx-menu");
|
|
37
|
-
del.style.position = "absolute";
|
|
38
|
-
del.style.left = '-1000vw';
|
|
39
|
-
document.body.append(del);
|
|
40
|
-
const base = app.bootstrap(component, del);
|
|
41
|
-
const { instance } = base;
|
|
42
|
-
await firstValueFrom(app.isStable);
|
|
43
|
-
const el = instance.viewContainer?.element?.nativeElement;
|
|
44
|
-
const rect = el.getBoundingClientRect();
|
|
45
|
-
app.destroy();
|
|
46
|
-
del.remove();
|
|
47
|
-
res(rect);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
};
|
|
51
|
-
const $data = Symbol("data");
|
|
52
|
-
const $hover = Symbol("hover");
|
|
53
|
-
export class MenuComponent {
|
|
54
|
-
constructor(viewContainer, sanitizer, _data, dialog, // optional only for the purpose of estimating dimensions
|
|
55
|
-
dialogRef) {
|
|
56
|
-
this.viewContainer = viewContainer;
|
|
57
|
-
this.sanitizer = sanitizer;
|
|
58
|
-
this._data = _data;
|
|
59
|
-
this.dialog = dialog;
|
|
60
|
-
this.dialogRef = dialogRef;
|
|
61
|
-
this.overlayOverlap = 32;
|
|
62
|
-
this.hoverDelay = 400;
|
|
63
|
-
this.showDebugOverlay = false;
|
|
64
|
-
this.isLockedOpen = false;
|
|
65
|
-
this.hasBootstrapped = false;
|
|
66
|
-
this.pointerIsOnVoid = false;
|
|
67
|
-
this.pointerHasBeenOverMask = false;
|
|
68
|
-
this.parentIsNgxMenu = false;
|
|
69
|
-
this.coverRectCords = {
|
|
70
|
-
top: 0,
|
|
71
|
-
left: 0,
|
|
72
|
-
height: 0,
|
|
73
|
-
width: 0
|
|
74
|
-
};
|
|
75
|
-
// Check if there are any slashes or dots -- that will clearly exclude it from being a mat icon
|
|
76
|
-
this.matIconRx = /[\/\.]/i;
|
|
77
|
-
this.showIconColumn = true;
|
|
78
|
-
this.showShortcutColumn = true;
|
|
79
|
-
this.childDialogs = [];
|
|
80
|
-
// Defaults are set before @Input() hooks evaluate
|
|
81
|
-
this.dialog = this.dialog || this._data?.dialog;
|
|
82
|
-
this.data = this._data?.data;
|
|
83
|
-
this.ownerCords = this._data?.ownerCords;
|
|
84
|
-
this.selfCords = this._data?.selfCords;
|
|
85
|
-
this.items = this._data?.items;
|
|
86
|
-
this.config = this._data?.config;
|
|
87
|
-
this.id = this._data?.id;
|
|
88
|
-
this.parentItem = this._data?.parentItem;
|
|
89
|
-
this.parentContext = this._data?.parentContext;
|
|
90
|
-
this.isLockedOpen = this.isLockedOpen || this._data?.config?.['_isLockedOpen'];
|
|
91
|
-
this.parentIsNgxMenu = this._data?.parentIsNgxMenu;
|
|
92
|
-
this.targetBounds = this._data?.targetBounds;
|
|
93
|
-
this.template = this._data?.template;
|
|
94
|
-
this.templateType = this.template instanceof TemplateRef ? "template" : "component";
|
|
95
|
-
if (this.templateType == "component") {
|
|
96
|
-
this.componentPortal = new ComponentPortal(this.template);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
ngOnInit() {
|
|
100
|
-
this.items?.forEach(i => {
|
|
101
|
-
if (typeof i == "string")
|
|
102
|
-
return;
|
|
103
|
-
// Set defaults
|
|
104
|
-
i['_disabled'] = false;
|
|
105
|
-
i['_visible'] = true;
|
|
106
|
-
i['_context'] = (typeof i.context == "function")
|
|
107
|
-
? i.context(this.data)
|
|
108
|
-
: i.context;
|
|
109
|
-
if (i.label)
|
|
110
|
-
try {
|
|
111
|
-
i['_formattedLabel'] = this.formatLabel(i.label);
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
console.warn(e);
|
|
115
|
-
}
|
|
116
|
-
if (typeof i.isDisabled == "function")
|
|
117
|
-
try {
|
|
118
|
-
i['_disabled'] = i.isDisabled(this.data || {}, i['_context']);
|
|
119
|
-
}
|
|
120
|
-
catch (e) {
|
|
121
|
-
console.warn(e);
|
|
122
|
-
}
|
|
123
|
-
if (typeof i.isVisible == "function")
|
|
124
|
-
try {
|
|
125
|
-
i['_visible'] = i.isVisible(this.data || {}, i['_context']);
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
console.warn(e);
|
|
129
|
-
}
|
|
130
|
-
if (typeof i.linkTemplate == "function")
|
|
131
|
-
try {
|
|
132
|
-
i['_link'] = i.linkTemplate(this.data || {}, i['_context']);
|
|
133
|
-
}
|
|
134
|
-
catch (e) {
|
|
135
|
-
console.warn(e);
|
|
136
|
-
}
|
|
137
|
-
if (typeof i.iconTemplate == "function")
|
|
138
|
-
try {
|
|
139
|
-
i['_icon'] = i.iconTemplate(this.data || {}, i['_context']);
|
|
140
|
-
}
|
|
141
|
-
catch (e) {
|
|
142
|
-
console.warn(e);
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
// Show the icon column if there are any items with an icon
|
|
146
|
-
this.showIconColumn = !!this.items?.find(i => typeof i == "object" &&
|
|
147
|
-
typeof i['icon'] == "string" &&
|
|
148
|
-
i['icon'].length > 2);
|
|
149
|
-
this.showShortcutColumn = !!this.items?.find(i => typeof i == "object" &&
|
|
150
|
-
typeof i['shortcut'] == "string" &&
|
|
151
|
-
i['shortcut'].length > 2);
|
|
152
|
-
if (this.ownerCords) {
|
|
153
|
-
const selfY = parseInt(this.selfCords.top?.replace('px', '') || '0');
|
|
154
|
-
const selfX = parseInt(this.selfCords.left?.replace('px', '') || '0');
|
|
155
|
-
this.coverRectCords = {
|
|
156
|
-
top: this.ownerCords.y - selfY - (this.overlayOverlap / 2),
|
|
157
|
-
left: this.ownerCords.x - selfX - (this.overlayOverlap / 2),
|
|
158
|
-
height: this.ownerCords.height + this.overlayOverlap,
|
|
159
|
-
width: this.ownerCords.width + this.overlayOverlap
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
if (this.config?.stayOpen)
|
|
163
|
-
this.isLockedOpen = true;
|
|
164
|
-
setTimeout(() => {
|
|
165
|
-
this.hasBootstrapped = true;
|
|
166
|
-
}, 200);
|
|
167
|
-
}
|
|
168
|
-
ngAfterViewInit() {
|
|
169
|
-
const el = this.viewContainer.element.nativeElement;
|
|
170
|
-
el.addEventListener("keydown", evt => {
|
|
171
|
-
this.isLockedOpen = true;
|
|
172
|
-
});
|
|
173
|
-
el.addEventListener("pointerdown", evt => {
|
|
174
|
-
this.isLockedOpen = true;
|
|
175
|
-
});
|
|
176
|
-
el.addEventListener("touch", evt => {
|
|
177
|
-
this.isLockedOpen = true;
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
ngOnDestroy() {
|
|
181
|
-
//
|
|
182
|
-
this.childDialogs.forEach(d => d.close({ [$data]: true }));
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
*
|
|
186
|
-
*/
|
|
187
|
-
async onMenuItemClick(item, row, keepOpen = false) {
|
|
188
|
-
if (typeof item == 'string')
|
|
189
|
-
return null;
|
|
190
|
-
if (item.separator)
|
|
191
|
-
return null;
|
|
192
|
-
const context = await item['_context'];
|
|
193
|
-
// If cache is enabled, only load if we don't have any children.
|
|
194
|
-
const forceLoad = (item.cacheResolvedChildren ? !item.children : true);
|
|
195
|
-
if (item.childrenResolver && forceLoad) {
|
|
196
|
-
item['_isResolving'] = true;
|
|
197
|
-
item['_children'] = await item.childrenResolver(this.data, context);
|
|
198
|
-
item['_isResolving'] = false;
|
|
199
|
-
}
|
|
200
|
-
else if (typeof item.children == "function" && forceLoad) {
|
|
201
|
-
item['_isResolving'] = true;
|
|
202
|
-
item['_children'] = await item.children(this.data, context);
|
|
203
|
-
item['_isResolving'] = false;
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
item['_children'] = item.children;
|
|
207
|
-
}
|
|
208
|
-
if (item['_children'] || item.childTemplate)
|
|
209
|
-
row['_open'] = true;
|
|
210
|
-
if (!item.childTemplate && !item.children) {
|
|
211
|
-
if (typeof item.action == "function") {
|
|
212
|
-
const res = await item.action(this.data, context);
|
|
213
|
-
this.close(res === undefined ? true : res);
|
|
214
|
-
return res;
|
|
215
|
-
}
|
|
216
|
-
// If no action, this is simply a text item.
|
|
217
|
-
return null;
|
|
218
|
-
}
|
|
219
|
-
// Need X pos, Y pos, width and height
|
|
220
|
-
const bounds = row.getBoundingClientRect();
|
|
221
|
-
const cords = {
|
|
222
|
-
top: null,
|
|
223
|
-
left: null,
|
|
224
|
-
bottom: null,
|
|
225
|
-
// right: null
|
|
226
|
-
};
|
|
227
|
-
// Set position coordinates
|
|
228
|
-
const targetBounds = await (item.childTemplate
|
|
229
|
-
? calcComponentBounds(MenuComponent, { template: item.childTemplate })
|
|
230
|
-
: calcMenuItemBounds(item['_children'], this.data));
|
|
231
|
-
const { width, height } = targetBounds;
|
|
232
|
-
if (bounds.y + height > window.innerHeight)
|
|
233
|
-
cords.bottom = "0px";
|
|
234
|
-
if (bounds.x + bounds.width + width > window.innerWidth)
|
|
235
|
-
cords.left = ((bounds.x - width)) + "px";
|
|
236
|
-
if (!cords.bottom)
|
|
237
|
-
cords.top = bounds.y + "px";
|
|
238
|
-
if (!cords.left)
|
|
239
|
-
cords.left = bounds.x + bounds.width + "px";
|
|
240
|
-
const config = structuredClone(this.config);
|
|
241
|
-
config['_isLockedOpen'] = keepOpen;
|
|
242
|
-
// Do not project in the top left corner -- this scenario
|
|
243
|
-
// happens when a dialog opens as the parent is killed.
|
|
244
|
-
if (cords.left == '0px' && cords.top == '0px')
|
|
245
|
-
return;
|
|
246
|
-
const dialogRef = this.dialog.open(MenuComponent, {
|
|
247
|
-
position: cords,
|
|
248
|
-
panelClass: ["ngx-menu"].concat(this.config?.customClass || []),
|
|
249
|
-
backdropClass: "ngx-menu-backdrop",
|
|
250
|
-
hasBackdrop: false,
|
|
251
|
-
data: {
|
|
252
|
-
data: this.data,
|
|
253
|
-
ownerCords: row.getBoundingClientRect(),
|
|
254
|
-
selfCords: cords,
|
|
255
|
-
parentItem: item,
|
|
256
|
-
parentContext: context,
|
|
257
|
-
items: item['_children'],
|
|
258
|
-
template: item.childTemplate,
|
|
259
|
-
config: config,
|
|
260
|
-
parentIsNgxMenu: true,
|
|
261
|
-
targetBounds
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
let _s = dialogRef
|
|
265
|
-
.afterClosed()
|
|
266
|
-
.subscribe(async (result) => {
|
|
267
|
-
// Clicked "void" on a submenu
|
|
268
|
-
if (typeof result == "object" && result[$data] == true) {
|
|
269
|
-
this.close(result);
|
|
270
|
-
}
|
|
271
|
-
// Went back to parent menu -- do not close (same as result == null)
|
|
272
|
-
else if (typeof result == "object" && result[$data] == false) {
|
|
273
|
-
}
|
|
274
|
-
// Got some other result value
|
|
275
|
-
else if (result != null) {
|
|
276
|
-
// Perform action callback
|
|
277
|
-
if (typeof item.action == 'function') {
|
|
278
|
-
this.close(await item.action(result, context));
|
|
279
|
-
}
|
|
280
|
-
// Just close.
|
|
281
|
-
else {
|
|
282
|
-
this.close();
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
row['_open'] = false;
|
|
286
|
-
this.childDialogs.splice(this.childDialogs.indexOf(dialogRef), 1);
|
|
287
|
-
_s.unsubscribe();
|
|
288
|
-
});
|
|
289
|
-
this.childDialogs.push(dialogRef);
|
|
290
|
-
return dialogRef;
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
*
|
|
294
|
-
* @param label
|
|
295
|
-
* @returns
|
|
296
|
-
*/
|
|
297
|
-
formatLabel(label) {
|
|
298
|
-
return label.replace(/_([a-z0-9])_/i, (match, group) => `<u>${group}</u>`);
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Close the context menu under these circumstances
|
|
302
|
-
*/
|
|
303
|
-
// @HostListener("window:resize", ['event'])
|
|
304
|
-
// @HostListener("window:blur", ['event'])
|
|
305
|
-
close(result) {
|
|
306
|
-
this.childDialogs.forEach(d => d.close());
|
|
307
|
-
this.dialogRef?.close(result);
|
|
308
|
-
}
|
|
309
|
-
closeOnVoid(force = false) {
|
|
310
|
-
if (!this.isLockedOpen || force) {
|
|
311
|
-
this.close({ [$data]: force });
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
startHoverTimer(item, row) {
|
|
315
|
-
// Invert check to make the logic simpler
|
|
316
|
-
// TL;DR: if (any) of these are true, we will do the hover action
|
|
317
|
-
if (!(Array.isArray(item.children) && item.children.length > 0 ||
|
|
318
|
-
typeof item.children == "function" ||
|
|
319
|
-
item.childTemplate ||
|
|
320
|
-
item.childrenResolver))
|
|
321
|
-
return;
|
|
322
|
-
item[$hover] = setTimeout(() => {
|
|
323
|
-
delete item[$hover];
|
|
324
|
-
if (!this.pointerIsOnVoid) {
|
|
325
|
-
this.childDialogs.forEach(cd => cd.close());
|
|
326
|
-
row['_open'] = true;
|
|
327
|
-
this.onMenuItemClick(item, row);
|
|
328
|
-
}
|
|
329
|
-
}, this.hoverDelay);
|
|
330
|
-
}
|
|
331
|
-
stopHoverTimer(item) {
|
|
332
|
-
item[$hover] && clearTimeout(item[$hover]);
|
|
333
|
-
delete item[$hover];
|
|
334
|
-
}
|
|
335
|
-
startCloseTimer() {
|
|
336
|
-
this.closeTimer = setTimeout(() => {
|
|
337
|
-
this.closeOnVoid();
|
|
338
|
-
}, 500);
|
|
339
|
-
}
|
|
340
|
-
stopCloseTimer() {
|
|
341
|
-
clearTimeout(this.closeTimer);
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Check if the dialog is clipping offscreen
|
|
345
|
-
* if so, move it back into view.
|
|
346
|
-
*/
|
|
347
|
-
onResize() {
|
|
348
|
-
const el = this.viewContainer?.element?.nativeElement;
|
|
349
|
-
if (!el)
|
|
350
|
-
return;
|
|
351
|
-
const { width, height, x, y } = el.getBoundingClientRect();
|
|
352
|
-
const target = document.querySelector(".ngx-menu");
|
|
353
|
-
if (!target)
|
|
354
|
-
return;
|
|
355
|
-
// Move back into view if we're clipping outside of the bottom
|
|
356
|
-
if (y + height > window.innerHeight) {
|
|
357
|
-
const newTop = (window.innerHeight - (height + (this.config.edgePadding || 12))) + "px";
|
|
358
|
-
target.style['margin-top'] = newTop;
|
|
359
|
-
}
|
|
360
|
-
// Move back into view if we're clipping off the right
|
|
361
|
-
if (x + width > window.innerWidth) {
|
|
362
|
-
const newLeft = (window.innerWidth - (width + (this.config.edgePadding || 12))) + "px";
|
|
363
|
-
target.style['margin-left'] = newLeft;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
// If the void element gets stuck open, make wheel events pass through.
|
|
367
|
-
onWheel(evt) {
|
|
368
|
-
const el = this.viewContainer.element.nativeElement;
|
|
369
|
-
el.style.display = "none";
|
|
370
|
-
const target = document.elementFromPoint(evt.clientX, evt.clientY);
|
|
371
|
-
el.style.display = "block";
|
|
372
|
-
target.scroll({
|
|
373
|
-
top: evt.deltaY + target.scrollTop,
|
|
374
|
-
left: evt.deltaX + target.scrollLeft,
|
|
375
|
-
behavior: "smooth"
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.DomSanitizer }, { token: MAT_DIALOG_DATA, optional: true }, { token: i2.MatDialog, optional: true }, { token: i2.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
379
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MenuComponent, isStandalone: true, selector: "ngx-menu", inputs: { data: "data", items: "items", config: "config", id: "id", overlayOverlap: "overlayOverlap", hoverDelay: "hoverDelay", showDebugOverlay: "showDebugOverlay", targetBounds: "targetBounds", ownerCords: "ownerCords", selfCords: "selfCords", parentItem: "parentItem", parentContext: "parentContext", isLockedOpen: "isLockedOpen" }, host: { listeners: { "window:resize": "onResize()" }, properties: { "attr.tx": "targetBounds?.x", "attr.ty": "targetBounds?.y", "attr.th": "targetBounds?.height", "attr.tw": "targetBounds?.width" } }, ngImport: i0, template: "<!-- Mouse event blocker for pointer leave -->\n@if (coverRectCords && !parentIsNgxMenu) {\n <div\n class=\"owner-mask\"\n [style.top]=\"coverRectCords.top + 'px'\"\n [style.left]=\"coverRectCords.left + 'px'\"\n [style.height]=\"coverRectCords.height + 'px'\"\n [style.width]=\"coverRectCords.width + 'px'\"\n [style.background]=\"showDebugOverlay ? '#f004' : '#0000'\"\n style=\"z-index: -1\"\n (pointerenter)=\"pointerHasBeenOverMask=true\"\n (pointerleave)=\"stopCloseTimer()\"\n (pointermove)=\"pointerHasBeenOverMask=true\"\n (click)=\"isLockedOpen = true\"\n ></div>\n}\n\n@if (!parentIsNgxMenu) {\n <div class=\"void\"\n [style.background]=\"showDebugOverlay ? '#00f4' : '#0000'\"\n (pointerenter)=\"pointerIsOnVoid = true; hasBootstrapped && !isLockedOpen && startCloseTimer()\"\n (pointerleave)=\"pointerIsOnVoid = false\"\n (pointerdown)=\"hasBootstrapped && closeOnVoid(true)\"\n (pointermove)=\"hasBootstrapped && !isLockedOpen && startCloseTimer()\"\n (click)=\"closeOnVoid(true)\"\n (wheel)=\"onWheel($event)\"\n ></div>\n}\n\n@if (!template) {\n <table (pointerenter)=\"stopCloseTimer()\">\n <tbody>\n @for (item of items; track item) {\n <!-- A row with a click action -->\n @if (item != 'separator' && item.separator != true && item['_visible']) {\n <tr #row\n [class.disabled]=\"item['_disabled']\"\n (click)=\"!item['_disabled'] && onMenuItemClick(item, row, true)\"\n [class.hover]=\"row['hover']\"\n [class.open]=\"row['_open']\"\n (pointerenter)=\"row['hover'] = true; startHoverTimer(item, row)\"\n (pointerleave)=\"row['hover'] = false; stopHoverTimer(item)\"\n >\n\n @if (showIconColumn) {\n <td class=\"icon\">\n @if (matIconRx.test(item['_icon'] ?? item.icon)) {\n <img [src]=\"item['_icon'] ?? item.icon\"/>\n }\n @else {\n <mat-icon\n [fontIcon]=\"item['_icon'] ?? item.icon\"\n [style.color]=\"item.iconColor\"\n />\n }\n </td>\n }\n\n <!-- 'Normal' action based item -->\n <td class=\"label\"\n [style.padding-left]=\"showIconColumn ? 0 : '16px'\"\n >\n <a\n #anchor\n [attr.target]=\"item.linkTarget\"\n [attr.href]=\"(item['_link'] || item.link) ? sanitizer.bypassSecurityTrustUrl(item['_link'] || item.link) : undefined\"\n >\n @if ($any(item.labelTemplate)?.prototype) {\n <ng-container\n [ngTemplateOutlet]=\"$any(item).labelTemplate\"\n [ngTemplateOutletContext]=\"{\n '$implicit': data,\n 'dialog': dialogRef,\n 'context': item['_context'],\n 'item': item,\n 'element': anchor,\n 'menu': this\n }\"\n />\n }\n @else {\n @if ($any(item)?.labelTemplate) {\n {{$any(item)?.labelTemplate(data || {})}}\n }\n @else {\n <div [innerHTML]=\"item['_formattedLabel']\"></div>\n }\n }\n </a>\n </td>\n\n @if (showShortcutColumn) {\n <td class=\"shortcut\">\n {{item.shortcutLabel}}\n </td>\n }\n\n <td style=\"min-width: 16px\">\n @if ((\n (item['children']?.length > 0) ||\n (item['_children']?.length > 0) ||\n item.childTemplate ||\n item.children?.['call'] ||\n item.childrenResolver\n ) &&\n !item['_isResolving']\n ) {\n <mat-icon\n style=\"transform: translateY(2px)\"\n >\n chevron_right\n </mat-icon>\n }\n\n @if (item['_isResolving']) {\n <mat-progress-spinner\n mode=\"indeterminate\"\n [diameter]=\"20\"\n style=\"margin-right: 4px\"\n />\n }\n </td>\n </tr>\n }\n @else if (item != 'separator' && item.separator == true) {\n <!-- Separator with label -->\n <tr\n class=\"disabled separator\"\n >\n <td\n class=\"center\"\n [attr.colspan]=\"2 + (showIconColumn ? 1 : 0) + (showShortcutColumn ? 1 : 0)\"\n >\n <span class=\"hr\">\n {{item['label'] || ''}}\n </span>\n </td>\n </tr>\n }\n @else if (item == 'separator') {\n <!-- Separator -->\n <tr\n class=\"disabled separator\"\n >\n <td\n [attr.colspan]=\"2 + (showIconColumn ? 1 : 0) + (showShortcutColumn ? 1 : 0)\"\n >\n <hr/>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n}\n@else {\n @if (templateType == 'template') {\n <div style=\"display: contents;\" (pointerenter)=\"stopCloseTimer()\">\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n '$implicit': data,\n 'dialog': dialogRef,\n 'context': parentContext,\n 'item': parentItem,\n 'element': this.viewContainer?.element?.nativeElement,\n 'menu': this\n }\"\n />\n </div>\n }\n @else {\n <div style=\"display: contents;\" (pointerenter)=\"stopCloseTimer()\">\n <ng-container\n [cdkPortalOutlet]=\"componentPortal\"\n />\n </div>\n }\n}\n\n@if (showDebugOverlay) {\n <div>\n <div>hbs: {{hasBootstrapped}}</div>\n <div>pov: {{pointerIsOnVoid}}</div>\n <div>ilo: {{isLockedOpen}}</div>\n <div>hbom: {{pointerHasBeenOverMask}}</div>\n\n <div>type: {{templateType}}</div>\n </div>\n}\n", styles: ["::ng-deep .cdk-overlay-container .ngx-menu{--mdc-dialog-container-color: var(--ngx-menu-background-color, #2f2f2f)}::ng-deep .cdk-overlay-container .ngx-menu .mdc-dialog__container{transform-origin:top left}::ng-deep .cdk-overlay-container .ngx-menu .mdc-dialog--open .mdc-dialog__container{transform:none}::ng-deep .cdk-overlay-pane.ngx-menu .mat-mdc-dialog-surface{overflow:visible}:host{-webkit-user-select:none;user-select:none;z-index:1;position:relative;display:block}table{border-spacing:0;border-radius:5px;padding:4px 0;overflow:hidden}tr{color:var(--ngx-menu-text-color, #ccc);font-size:var(--ngx-menu-font-size, 14px);cursor:pointer;transition:background-color 75ms ease,color 75ms ease}tr:not(.disabled).hover,tr:not(.disabled).open{background-color:var(--ngx-menu-hover-background-color, #94ebeb);color:var(--ngx-menu-hover-text-color, #000)}tr:not(.disabled).hover a,tr:not(.disabled).open a{color:var(--ngx-menu-hover-text-color, #000)}tr:not(.separator){height:36px}tr.disabled .label{color:var(--ngx-menu-disabled-text-color, #919191)}tr .center{text-align:center}tr a{outline:0;display:flex;align-items:center;gap:10px;justify-content:space-between;height:100%;width:100%;position:relative;left:-16px;width:calc(100% + 32px);padding:0 16px}tr .label{min-width:100px}tr img{max-width:100%;max-height:100%;aspect-ratio:1}.hr{height:1px;text-align:center;position:relative}.hr:before,.hr:after{content:\"\";background:var(--ngx-menu-separator-color, #2a2a2a);display:block;position:absolute;top:0;bottom:0;height:1px;margin:auto;width:300px}.hr:before{right:calc(100% + 4px)}.hr:after{left:calc(100% + 4px)}hr{background:var(--ngx-menu-separator-color, #2a2a2a);border:0;height:1px;margin:0}.icon{width:24px;height:24px;padding-left:10px}.icon mat-icon{transform:translateY(2px)}.shortcut{color:var(--ngx-menu-shortcut-text-color, #848484);text-align:end;padding-right:10px;padding-left:12px}.label{height:var(--ngx-menu-item-height, 30px)}td{vertical-align:middle}.void,.owner-mask{position:absolute}.void{top:-100vh;right:-100vw;bottom:-100vh;left:-100vw;z-index:-2}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
380
|
-
}
|
|
381
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuComponent, decorators: [{
|
|
382
|
-
type: Component,
|
|
383
|
-
args: [{ selector: 'ngx-menu', imports: [
|
|
384
|
-
NgTemplateOutlet,
|
|
385
|
-
PortalModule,
|
|
386
|
-
MatIconModule,
|
|
387
|
-
MatProgressSpinnerModule
|
|
388
|
-
], standalone: true, host: {
|
|
389
|
-
"[attr.tx]": "targetBounds?.x",
|
|
390
|
-
"[attr.ty]": "targetBounds?.y",
|
|
391
|
-
"[attr.th]": "targetBounds?.height",
|
|
392
|
-
"[attr.tw]": "targetBounds?.width",
|
|
393
|
-
}, template: "<!-- Mouse event blocker for pointer leave -->\n@if (coverRectCords && !parentIsNgxMenu) {\n <div\n class=\"owner-mask\"\n [style.top]=\"coverRectCords.top + 'px'\"\n [style.left]=\"coverRectCords.left + 'px'\"\n [style.height]=\"coverRectCords.height + 'px'\"\n [style.width]=\"coverRectCords.width + 'px'\"\n [style.background]=\"showDebugOverlay ? '#f004' : '#0000'\"\n style=\"z-index: -1\"\n (pointerenter)=\"pointerHasBeenOverMask=true\"\n (pointerleave)=\"stopCloseTimer()\"\n (pointermove)=\"pointerHasBeenOverMask=true\"\n (click)=\"isLockedOpen = true\"\n ></div>\n}\n\n@if (!parentIsNgxMenu) {\n <div class=\"void\"\n [style.background]=\"showDebugOverlay ? '#00f4' : '#0000'\"\n (pointerenter)=\"pointerIsOnVoid = true; hasBootstrapped && !isLockedOpen && startCloseTimer()\"\n (pointerleave)=\"pointerIsOnVoid = false\"\n (pointerdown)=\"hasBootstrapped && closeOnVoid(true)\"\n (pointermove)=\"hasBootstrapped && !isLockedOpen && startCloseTimer()\"\n (click)=\"closeOnVoid(true)\"\n (wheel)=\"onWheel($event)\"\n ></div>\n}\n\n@if (!template) {\n <table (pointerenter)=\"stopCloseTimer()\">\n <tbody>\n @for (item of items; track item) {\n <!-- A row with a click action -->\n @if (item != 'separator' && item.separator != true && item['_visible']) {\n <tr #row\n [class.disabled]=\"item['_disabled']\"\n (click)=\"!item['_disabled'] && onMenuItemClick(item, row, true)\"\n [class.hover]=\"row['hover']\"\n [class.open]=\"row['_open']\"\n (pointerenter)=\"row['hover'] = true; startHoverTimer(item, row)\"\n (pointerleave)=\"row['hover'] = false; stopHoverTimer(item)\"\n >\n\n @if (showIconColumn) {\n <td class=\"icon\">\n @if (matIconRx.test(item['_icon'] ?? item.icon)) {\n <img [src]=\"item['_icon'] ?? item.icon\"/>\n }\n @else {\n <mat-icon\n [fontIcon]=\"item['_icon'] ?? item.icon\"\n [style.color]=\"item.iconColor\"\n />\n }\n </td>\n }\n\n <!-- 'Normal' action based item -->\n <td class=\"label\"\n [style.padding-left]=\"showIconColumn ? 0 : '16px'\"\n >\n <a\n #anchor\n [attr.target]=\"item.linkTarget\"\n [attr.href]=\"(item['_link'] || item.link) ? sanitizer.bypassSecurityTrustUrl(item['_link'] || item.link) : undefined\"\n >\n @if ($any(item.labelTemplate)?.prototype) {\n <ng-container\n [ngTemplateOutlet]=\"$any(item).labelTemplate\"\n [ngTemplateOutletContext]=\"{\n '$implicit': data,\n 'dialog': dialogRef,\n 'context': item['_context'],\n 'item': item,\n 'element': anchor,\n 'menu': this\n }\"\n />\n }\n @else {\n @if ($any(item)?.labelTemplate) {\n {{$any(item)?.labelTemplate(data || {})}}\n }\n @else {\n <div [innerHTML]=\"item['_formattedLabel']\"></div>\n }\n }\n </a>\n </td>\n\n @if (showShortcutColumn) {\n <td class=\"shortcut\">\n {{item.shortcutLabel}}\n </td>\n }\n\n <td style=\"min-width: 16px\">\n @if ((\n (item['children']?.length > 0) ||\n (item['_children']?.length > 0) ||\n item.childTemplate ||\n item.children?.['call'] ||\n item.childrenResolver\n ) &&\n !item['_isResolving']\n ) {\n <mat-icon\n style=\"transform: translateY(2px)\"\n >\n chevron_right\n </mat-icon>\n }\n\n @if (item['_isResolving']) {\n <mat-progress-spinner\n mode=\"indeterminate\"\n [diameter]=\"20\"\n style=\"margin-right: 4px\"\n />\n }\n </td>\n </tr>\n }\n @else if (item != 'separator' && item.separator == true) {\n <!-- Separator with label -->\n <tr\n class=\"disabled separator\"\n >\n <td\n class=\"center\"\n [attr.colspan]=\"2 + (showIconColumn ? 1 : 0) + (showShortcutColumn ? 1 : 0)\"\n >\n <span class=\"hr\">\n {{item['label'] || ''}}\n </span>\n </td>\n </tr>\n }\n @else if (item == 'separator') {\n <!-- Separator -->\n <tr\n class=\"disabled separator\"\n >\n <td\n [attr.colspan]=\"2 + (showIconColumn ? 1 : 0) + (showShortcutColumn ? 1 : 0)\"\n >\n <hr/>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n}\n@else {\n @if (templateType == 'template') {\n <div style=\"display: contents;\" (pointerenter)=\"stopCloseTimer()\">\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n '$implicit': data,\n 'dialog': dialogRef,\n 'context': parentContext,\n 'item': parentItem,\n 'element': this.viewContainer?.element?.nativeElement,\n 'menu': this\n }\"\n />\n </div>\n }\n @else {\n <div style=\"display: contents;\" (pointerenter)=\"stopCloseTimer()\">\n <ng-container\n [cdkPortalOutlet]=\"componentPortal\"\n />\n </div>\n }\n}\n\n@if (showDebugOverlay) {\n <div>\n <div>hbs: {{hasBootstrapped}}</div>\n <div>pov: {{pointerIsOnVoid}}</div>\n <div>ilo: {{isLockedOpen}}</div>\n <div>hbom: {{pointerHasBeenOverMask}}</div>\n\n <div>type: {{templateType}}</div>\n </div>\n}\n", styles: ["::ng-deep .cdk-overlay-container .ngx-menu{--mdc-dialog-container-color: var(--ngx-menu-background-color, #2f2f2f)}::ng-deep .cdk-overlay-container .ngx-menu .mdc-dialog__container{transform-origin:top left}::ng-deep .cdk-overlay-container .ngx-menu .mdc-dialog--open .mdc-dialog__container{transform:none}::ng-deep .cdk-overlay-pane.ngx-menu .mat-mdc-dialog-surface{overflow:visible}:host{-webkit-user-select:none;user-select:none;z-index:1;position:relative;display:block}table{border-spacing:0;border-radius:5px;padding:4px 0;overflow:hidden}tr{color:var(--ngx-menu-text-color, #ccc);font-size:var(--ngx-menu-font-size, 14px);cursor:pointer;transition:background-color 75ms ease,color 75ms ease}tr:not(.disabled).hover,tr:not(.disabled).open{background-color:var(--ngx-menu-hover-background-color, #94ebeb);color:var(--ngx-menu-hover-text-color, #000)}tr:not(.disabled).hover a,tr:not(.disabled).open a{color:var(--ngx-menu-hover-text-color, #000)}tr:not(.separator){height:36px}tr.disabled .label{color:var(--ngx-menu-disabled-text-color, #919191)}tr .center{text-align:center}tr a{outline:0;display:flex;align-items:center;gap:10px;justify-content:space-between;height:100%;width:100%;position:relative;left:-16px;width:calc(100% + 32px);padding:0 16px}tr .label{min-width:100px}tr img{max-width:100%;max-height:100%;aspect-ratio:1}.hr{height:1px;text-align:center;position:relative}.hr:before,.hr:after{content:\"\";background:var(--ngx-menu-separator-color, #2a2a2a);display:block;position:absolute;top:0;bottom:0;height:1px;margin:auto;width:300px}.hr:before{right:calc(100% + 4px)}.hr:after{left:calc(100% + 4px)}hr{background:var(--ngx-menu-separator-color, #2a2a2a);border:0;height:1px;margin:0}.icon{width:24px;height:24px;padding-left:10px}.icon mat-icon{transform:translateY(2px)}.shortcut{color:var(--ngx-menu-shortcut-text-color, #848484);text-align:end;padding-right:10px;padding-left:12px}.label{height:var(--ngx-menu-item-height, 30px)}td{vertical-align:middle}.void,.owner-mask{position:absolute}.void{top:-100vh;right:-100vw;bottom:-100vh;left:-100vw;z-index:-2}\n"] }]
|
|
394
|
-
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1.DomSanitizer }, { type: undefined, decorators: [{
|
|
395
|
-
type: Optional
|
|
396
|
-
}, {
|
|
397
|
-
type: Inject,
|
|
398
|
-
args: [MAT_DIALOG_DATA]
|
|
399
|
-
}] }, { type: i2.MatDialog, decorators: [{
|
|
400
|
-
type: Optional
|
|
401
|
-
}] }, { type: i2.MatDialogRef, decorators: [{
|
|
402
|
-
type: Optional
|
|
403
|
-
}] }], propDecorators: { data: [{
|
|
404
|
-
type: Input
|
|
405
|
-
}], items: [{
|
|
406
|
-
type: Input
|
|
407
|
-
}], config: [{
|
|
408
|
-
type: Input
|
|
409
|
-
}], id: [{
|
|
410
|
-
type: Input
|
|
411
|
-
}], overlayOverlap: [{
|
|
412
|
-
type: Input
|
|
413
|
-
}], hoverDelay: [{
|
|
414
|
-
type: Input
|
|
415
|
-
}], showDebugOverlay: [{
|
|
416
|
-
type: Input
|
|
417
|
-
}], targetBounds: [{
|
|
418
|
-
type: Input
|
|
419
|
-
}], ownerCords: [{
|
|
420
|
-
type: Input
|
|
421
|
-
}], selfCords: [{
|
|
422
|
-
type: Input
|
|
423
|
-
}], parentItem: [{
|
|
424
|
-
type: Input
|
|
425
|
-
}], parentContext: [{
|
|
426
|
-
type: Input
|
|
427
|
-
}], isLockedOpen: [{
|
|
428
|
-
type: Input
|
|
429
|
-
}], onResize: [{
|
|
430
|
-
type: HostListener,
|
|
431
|
-
args: ["window:resize"]
|
|
432
|
-
}] } });
|
|
433
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQWdCLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUUsT0FBTyxFQUEyQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBSXRDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFakYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLFNBQXFCLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDNUUsTUFBTSxJQUFJLEdBQUc7UUFDVCxJQUFJLEVBQUUsT0FBTztRQUNiLEtBQUssRUFBRSxTQUFTO1FBQ2hCLE1B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LFlBQVk7c0JBQTNCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQXVVRSxRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZiwgVHlwZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBjcmVhdGVBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcblxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9tZW51JztcblxuZGVjbGFyZSBjb25zdCBab25lOiBhbnk7XG5jb25zdCB6b25lID0gbmV3IFpvbmUoWm9uZS5jdXJyZW50LCB7IG5hbWU6IFwiQGRvdGdsaXRjaF9tZW51XCIsIHByb3BlcnRpZXM6IHt9IH0pO1xuXG5leHBvcnQgY29uc3QgY2FsY01lbnVJdGVtQm91bmRzID0gYXN5bmMgKG1lbnVJdGVtczogTWVudUl0ZW1bXSwgZGF0YU9iajogYW55KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgZGF0YTogZGF0YU9iaixcbiAgICAgICAgaXRlbXM6IG1lbnVJdGVtcyxcbiAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgc2VsZkNvcmRzOiB7IGxlZnQ6IFwiMHB4XCIsIHRvcDogXCIwcHhcIiB9LFxuICAgICAgICBvd25lckNvcmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcbiAgICAgICAgaWQ6IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY0NvbXBvbmVudEJvdW5kcyhNZW51Q29tcG9uZW50LCBkYXRhKTtcbn1cblxuY29uc3QgY2FsY0NvbXBvbmVudEJvdW5kcyA9IGFzeW5jIChjb21wb25lbnQ6IFR5cGU8YW55PiwgZGF0YTogYW55KSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPERPTVJlY3Q+KChyZXMsIHJlaikgPT4ge1xuICAgICAgICB6b25lLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBhd2FpdCBjcmVhdGVBcHBsaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTUFUX0RJQUxPR19EQVRBLCB1c2VWYWx1ZTogZGF0YSB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICBkZWwuY2xhc3NMaXN0LmFkZChcIm5neC1tZW51XCIpO1xuICAgICAgICAgICAgZGVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICAgICAgZGVsLnN0eWxlLmxlZnQgPSAnLTEwMDB2dyc7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChkZWwpO1xuXG4gICAgICAgICAgICBjb25zdCBiYXNlID0gYXBwLmJvb3RzdHJhcChjb21wb25lbnQsIGRlbCk7XG4gICAgICAgICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSBiYXNlO1xuXG4gICAgICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShhcHAuaXNTdGFibGUpO1xuXG4gICAgICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSBpbnN0YW5jZS52aWV3Q29udGFpbmVyPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBhcHAuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICByZXMocmVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pXG59XG5cbmNvbnN0ICRkYXRhID0gU3ltYm9sKFwiZGF0YVwiKTtcbmNvbnN0ICRob3ZlciA9IFN5bWJvbChcImhvdmVyXCIpO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tZW51JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9ydGFsTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDoge1xuICAgICAgICBcIlthdHRyLnR4XVwiOiBcInRhcmdldEJvdW5kcz8ueFwiLFxuICAgICAgICBcIlthdHRyLnR5XVwiOiBcInRhcmdldEJvdW5kcz8ueVwiLFxuICAgICAgICBcIlthdHRyLnRoXVwiOiBcInRhcmdldEJvdW5kcz8uaGVpZ2h0XCIsXG4gICAgICAgIFwiW2F0dHIudHddXCI6IFwidGFyZ2V0Qm91bmRzPy53aWR0aFwiLFxuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCB7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YTogYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogTWVudUl0ZW1bXTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBNZW51T3B0aW9ucztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgb3ZlcmxheU92ZXJsYXAgPSAzMjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaG92ZXJEZWxheSA9IDQwMDtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0RlYnVnT3ZlcmxheSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0YXJnZXRCb3VuZHM6IERPTVJlY3Q7XG5cbiAgICBASW5wdXQoKSBvd25lckNvcmRzOiBET01SZWN0O1xuICAgIEBJbnB1dCgpIHNlbGZDb3JkcztcbiAgICBASW5wdXQoKSBwYXJlbnRJdGVtO1xuICAgIEBJbnB1dCgpIHBhcmVudENvbnRleHQ7XG4gICAgQElucHV0KCkgaXNMb2NrZWRPcGVuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaGFzQm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gICAgcHVibGljIHBvaW50ZXJJc09uVm9pZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBwb2ludGVySGFzQmVlbk92ZXJNYXNrID0gZmFsc2U7XG4gICAgcGFyZW50SXNOZ3hNZW51ID0gZmFsc2U7XG5cbiAgICBjb3ZlclJlY3RDb3JkcyA9IHtcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIHdpZHRoOiAwXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzbGFzaGVzIG9yIGRvdHMgLS0gdGhhdCB3aWxsIGNsZWFybHkgZXhjbHVkZSBpdCBmcm9tIGJlaW5nIGEgbWF0IGljb25cbiAgICBwdWJsaWMgcmVhZG9ubHkgbWF0SWNvblJ4ID0gL1tcXC9cXC5dL2k7XG4gICAgc2hvd0ljb25Db2x1bW4gPSB0cnVlO1xuICAgIHNob3dTaG9ydGN1dENvbHVtbiA9IHRydWU7XG5cbiAgICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICB0ZW1wbGF0ZVR5cGU6IFwidGVtcGxhdGVcIiB8IFwiY29tcG9uZW50XCI7XG4gICAgY29tcG9uZW50UG9ydGFsOiBDb21wb25lbnRQb3J0YWw8YW55PjtcbiAgICBwcml2YXRlIGNoaWxkRGlhbG9nczogTWF0RGlhbG9nUmVmPGFueT5bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhOiBhbnksXG4gICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgLy8gb3B0aW9uYWwgb25seSBmb3IgdGhlIHB1cnBvc2Ugb2YgZXN0aW1hdGluZyBkaW1lbnNpb25zXG4gICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnk+XG4gICAgKSB7XG4gICAgICAgIC8vIERlZmF1bHRzIGFyZSBzZXQgYmVmb3JlIEBJbnB1dCgpIGhvb2tzIGV2YWx1YXRlXG4gICAgICAgIHRoaXMuZGlhbG9nID0gdGhpcy5kaWFsb2cgfHwgdGhpcy5fZGF0YT8uZGlhbG9nO1xuICAgICAgICB0aGlzLmRhdGEgID0gdGhpcy5fZGF0YT8uZGF0YTtcbiAgICAgICAgdGhpcy5vd25lckNvcmRzID0gdGhpcy5fZGF0YT8ub3duZXJDb3JkcztcbiAgICAgICAgdGhpcy5zZWxmQ29yZHMgPSB0aGlzLl9kYXRhPy5zZWxmQ29yZHM7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLl9kYXRhPy5pdGVtcztcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLl9kYXRhPy5jb25maWc7XG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLl9kYXRhPy5pZDtcbiAgICAgICAgdGhpcy5wYXJlbnRJdGVtID0gdGhpcy5fZGF0YT8ucGFyZW50SXRlbTtcbiAgICAgICAgdGhpcy5wYXJlbnRDb250ZXh0ID0gdGhpcy5fZGF0YT8ucGFyZW50Q29udGV4dDtcbiAgICAgICAgdGhpcy5pc0xvY2tlZE9wZW4gPSB0aGlzLmlzTG9ja2VkT3BlbiB8fCB0aGlzLl9kYXRhPy5jb25maWc/LlsnX2lzTG9ja2VkT3BlbiddO1xuICAgICAgICB0aGlzLnBhcmVudElzTmd4TWVudSA9IHRoaXMuX2RhdGE/LnBhcmVudElzTmd4TWVudTtcbiAgICAgICAgdGhpcy50YXJnZXRCb3VuZHMgPSB0aGlzLl9kYXRhPy50YXJnZXRCb3VuZHM7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRoaXMuX2RhdGE/LnRlbXBsYXRlO1xuXG4gICAgICAgIHRoaXMudGVtcGxhdGVUeXBlID0gdGhpcy50ZW1wbGF0ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmID8gXCJ0ZW1wbGF0ZVwiIDogXCJjb21wb25lbnRcIjtcblxuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZVR5cGUgPT0gXCJjb21wb25lbnRcIikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKHRoaXMudGVtcGxhdGUgYXMgYW55KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuXG4gICAgICAgIHRoaXMuaXRlbXM/LmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGkgPT0gXCJzdHJpbmdcIikgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgICAgICAgIGlbJ19kaXNhYmxlZCddID0gZmFsc2U7XG4gICAgICAgICAgICBpWydfdmlzaWJsZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIGlbJ19jb250ZXh0J10gPSAodHlwZW9mIGkuY29udGV4dCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gaS5jb250ZXh0KHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpLmNvbnRleHQ7XG5cbiAgICAgICAgICAgIGlmIChpLmxhYmVsKVxuICAgICAgICAgICAgICAgIHRyeSB7IGlbJ19mb3JtYXR0ZWRMYWJlbCddID0gdGhpcy5mb3JtYXRMYWJlbChpLmxhYmVsKTsgfSBjYXRjaCAoZSkgeyBjb25zb2xlLndhcm4oZSkgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGkuaXNEaXNhYmxlZCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgdHJ5IHsgaVsnX2Rpc2FibGVkJ10gPSBpLmlzRGlzYWJsZWQodGhpcy5kYXRhIHx8IHt9LCBpWydfY29udGV4dCddKTsgfSBjYXRjaChlKSB7IGNvbnNvbGUud2FybihlKSB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaS5pc1Zpc2libGUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIHRyeSB7IGlbJ192aXNpYmxlJ10gPSBpLmlzVmlzaWJsZSh0aGlzLmRhdGEgfHwge30sIGlbJ19jb250ZXh0J10pOyB9IGNhdGNoIChlKSB7IGNvbnNvbGUud2FybihlKSB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaS5saW5rVGVtcGxhdGUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIHRyeSB7IGlbJ19saW5rJ10gPSBpLmxpbmtUZW1wbGF0ZSh0aGlzLmRhdGEgfHwge30sIGlbJ19jb250ZXh0J10pOyB9IGNhdGNoIChlKSB7IGNvbnNvbGUud2FybihlKSB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaS5pY29uVGVtcGxhdGUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIHRyeSB7IGlbJ19pY29uJ10gPSBpLmljb25UZW1wbGF0ZSh0aGlzLmRhdGEgfHwge30sIGlbJ19jb250ZXh0J10pOyB9IGNhdGNoIChlKSB7IGNvbnNvbGUud2FybihlKTsgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTaG93IHRoZSBpY29uIGNvbHVtbiBpZiB0aGVyZSBhcmUgYW55IGl0ZW1zIHdpdGggYW4gaWNvblxuICAgICAgICB0aGlzLnNob3dJY29uQ29sdW1uID0gISF0aGlzLml0ZW1zPy5maW5kKGkgPT5cbiAgICAgICAgICAgICAgICB0eXBlb2YgaSA9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGlbJ2ljb24nXSA9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgaVsnaWNvbiddLmxlbmd0aCA+IDJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaG93U2hvcnRjdXRDb2x1bW4gPSAhIXRoaXMuaXRlbXM/LmZpbmQoaSA9PlxuICAgICAgICAgICAgICAgIHR5cGVvZiBpID09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgaVsnc2hvcnRjdXQnXSA9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgaVsnc2hvcnRjdXQnXS5sZW5ndGggPiAyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLm93bmVyQ29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGZZID0gcGFyc2VJbnQodGhpcy5zZWxmQ29yZHMudG9wPy5yZXBsYWNlKCdweCcsICcnKSB8fCAnMCcpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZlggPSBwYXJzZUludCh0aGlzLnNlbGZDb3Jkcy5sZWZ0Py5yZXBsYWNlKCdweCcsICcnKSB8fCAnMCcpO1xuXG4gICAgICAgICAgICB0aGlzLmNvdmVyUmVjdENvcmRzID0ge1xuICAgICAgICAgICAgICAgIHRvcDogdGhpcy5vd25lckNvcmRzLnkgLSBzZWxmWSAtICh0aGlzLm92ZXJsYXlPdmVybGFwLzIpLFxuICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMub3duZXJDb3Jkcy54IC0gc2VsZlggLSAodGhpcy5vdmVybGF5T3ZlcmxhcC8yKSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMub3duZXJDb3Jkcy5oZWlnaHQgKyB0aGlzLm92ZXJsYXlPdmVybGFwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLm93bmVyQ29yZHMud2lkdGggKyB0aGlzLm92ZXJsYXlPdmVybGFwXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWc/LnN0YXlPcGVuKVxuICAgICAgICAgICAgdGhpcy5pc0xvY2tlZE9wZW4gPSB0cnVlO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNCb290c3RyYXBwZWQgPSB0cnVlO1xuICAgICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLnZpZXdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvY2tlZE9wZW4gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9ja2VkT3BlbiA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2NrZWRPcGVuID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vXG4gICAgICAgIHRoaXMuY2hpbGREaWFsb2dzLmZvckVhY2goZCA9PiBkLmNsb3NlKHtbJGRhdGFdOiB0cnVlfSkpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBhc3luYyBvbk1lbnVJdGVtQ2xpY2soaXRlbTogTWVudUl0ZW0sIHJvdzogSFRNTFRhYmxlUm93RWxlbWVudCwga2VlcE9wZW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoaXRlbS5zZXBhcmF0b3IpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCBpdGVtWydfY29udGV4dCddO1xuXG4gICAgICAgIC8vIElmIGNhY2hlIGlzIGVuYWJsZWQsIG9ubHkgbG9hZCBpZiB3ZSBkb24ndCBoYXZlIGFueSBjaGlsZHJlbi5cbiAgICAgICAgY29uc3QgZm9yY2VMb2FkID0gKGl0ZW0uY2FjaGVSZXNvbHZlZENoaWxkcmVuID8gIWl0ZW0uY2hpbGRyZW4gOiB0cnVlKTtcblxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlblJlc29sdmVyICYmIGZvcmNlTG9hZCkge1xuICAgICAgICAgICAgaXRlbVsnX2lzUmVzb2x2aW5nJ10gPSB0cnVlO1xuICAgICAgICAgICAgaXRlbVsnX2NoaWxkcmVuJ10gPSBhd2FpdCBpdGVtLmNoaWxkcmVuUmVzb2x2ZXIodGhpcy5kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGl0ZW1bJ19pc1Jlc29sdmluZyddID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGl0ZW0uY2hpbGRyZW4gPT0gXCJmdW5jdGlvblwiICYmIGZvcmNlTG9hZCkge1xuICAgICAgICAgICAgaXRlbVsnX2lzUmVzb2x2aW5nJ10gPSB0cnVlO1xuICAgICAgICAgICAgaXRlbVsnX2NoaWxkcmVuJ10gPSBhd2FpdCBpdGVtLmNoaWxkcmVuKHRoaXMuZGF0YSwgY29udGV4dCk7XG4gICAgICAgICAgICBpdGVtWydfaXNSZXNvbHZpbmcnXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlbVsnX2NoaWxkcmVuJ10gPSBpdGVtLmNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1bJ19jaGlsZHJlbiddIHx8IGl0ZW0uY2hpbGRUZW1wbGF0ZSlcbiAgICAgICAgICAgIHJvd1snX29wZW4nXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFpdGVtLmNoaWxkVGVtcGxhdGUgJiYgIWl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS5hY3Rpb24gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgaXRlbS5hY3Rpb24odGhpcy5kYXRhLCBjb250ZXh0KVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UocmVzID09PSB1bmRlZmluZWQgPyB0cnVlIDogcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBubyBhY3Rpb24sIHRoaXMgaXMgc2ltcGx5IGEgdGV4dCBpdGVtLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZWVkIFggcG9zLCBZIHBvcywgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBjb25zdCBib3VuZHMgPSByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgY29yZHMgPSB7XG4gICAgICAgICAgICB0b3A6IG51bGwsXG4gICAgICAgICAgICBsZWZ0OiBudWxsLFxuICAgICAgICAgICAgYm90dG9tOiBudWxsLFxuICAgICAgICAgICAgLy8gcmlnaHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTZXQgcG9zaXRpb24gY29vcmRpbmF0ZXNcbiAgICAgICAgY29uc3QgdGFyZ2V0Qm91bmRzID0gYXdhaXQgKGl0ZW0uY2hpbGRUZW1wbGF0ZVxuICAgICAgICAgICAgPyBjYWxjQ29tcG9uZW50Qm91bmRzKE1lbnVDb21wb25lbnQsIHsgdGVtcGxhdGU6IGl0ZW0uY2hpbGRUZW1wbGF0ZSB9KVxuICAgICAgICAgICAgOiBjYWxjTWVudUl0ZW1Cb3VuZHMoaXRlbVsnX2NoaWxkcmVuJ10sIHRoaXMuZGF0YSkpO1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRhcmdldEJvdW5kcztcblxuICAgICAgICBpZiAoYm91bmRzLnkgKyBoZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpXG4gICAgICAgICAgICBjb3Jkcy5ib3R0b20gPSBcIjBweFwiO1xuICAgICAgICBpZiAoYm91bmRzLnggKyBib3VuZHMud2lkdGggKyB3aWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoKVxuICAgICAgICAgICAgY29yZHMubGVmdCA9ICgoYm91bmRzLnggLSB3aWR0aCkpICsgXCJweFwiO1xuXG4gICAgICAgIGlmICghY29yZHMuYm90dG9tKSBjb3Jkcy50b3AgID0gYm91bmRzLnkgKyBcInB4XCI7XG4gICAgICAgIGlmICghY29yZHMubGVmdCkgICBjb3Jkcy5sZWZ0ID0gYm91bmRzLnggKyBib3VuZHMud2lkdGggKyBcInB4XCI7XG5cblxuICAgICAgICBjb25zdCBjb25maWcgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5jb25maWcpXG4gICAgICAgIGNvbmZpZ1snX2lzTG9ja2VkT3BlbiddID0ga2VlcE9wZW47XG5cbiAgICAgICAgLy8gRG8gbm90IHByb2plY3QgaW4gdGhlIHRvcCBsZWZ0IGNvcm5lciAtLSB0aGlzIHNjZW5hcmlvXG4gICAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIGRpYWxvZyBvcGVucyBhcyB0aGUgcGFyZW50IGlzIGtpbGxlZC5cbiAgICAgICAgaWYgKGNvcmRzLmxlZnQgPT0gJzBweCcgJiYgY29yZHMudG9wID09ICcwcHgnKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTWVudUNvbXBvbmVudCwge1xuICAgICAgICAgICAgcG9zaXRpb246IGNvcmRzLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogW1wibmd4LW1lbnVcIl0uY29uY2F0KHRoaXMuY29uZmlnPy5jdXN0b21DbGFzcyB8fCBbXSksXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiBcIm5neC1tZW51LWJhY2tkcm9wXCIsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgICAgIG93bmVyQ29yZHM6IHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgICAgICBzZWxmQ29yZHM6IGNvcmRzLFxuICAgICAgICAgICAgICAgIHBhcmVudEl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgcGFyZW50Q29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgICAgICBpdGVtczogaXRlbVsnX2NoaWxkcmVuJ10sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW0uY2hpbGRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICBwYXJlbnRJc05neE1lbnU6IHRydWUsXG4gICAgICAgICAgICAgICAgdGFyZ2V0Qm91bmRzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBfcyA9IGRpYWxvZ1JlZlxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xpY2tlZCBcInZvaWRcIiBvbiBhIHN1Ym1lbnVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gXCJvYmplY3RcIiAmJiByZXN1bHRbJGRhdGFdID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBXZW50IGJhY2sgdG8gcGFyZW50IG1lbnUgLS0gZG8gbm90IGNsb3NlIChzYW1lIGFzIHJlc3VsdCA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09IFwib2JqZWN0XCIgJiYgcmVzdWx0WyRkYXRhXSA9PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gR290IHNvbWUgb3RoZXIgcmVzdWx0IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGFjdGlvbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmFjdGlvbiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZShhd2FpdCBpdGVtLmFjdGlvbihyZXN1bHQsIGNvbnRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3QgY2xvc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByb3dbJ19vcGVuJ10gPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkRGlhbG9ncy5zcGxpY2UodGhpcy5jaGlsZERpYWxvZ3MuaW5kZXhPZihkaWFsb2dSZWYpLCAxKTtcblxuICAgICAgICAgICAgICAgICAgICBfcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2hpbGREaWFsb2dzLnB1c2goZGlhbG9nUmVmKTtcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYWJlbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZm9ybWF0TGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBsYWJlbC5yZXBsYWNlKC9fKFthLXowLTldKV8vaSwgKG1hdGNoLCBncm91cCkgPT4gYDx1PiR7Z3JvdXB9PC91PmApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBjb250ZXh0IG1lbnUgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlc1xuICAgICAqL1xuICAgIC8vIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIsIFsnZXZlbnQnXSlcbiAgICAvLyBASG9zdExpc3RlbmVyKFwid2luZG93OmJsdXJcIiwgWydldmVudCddKVxuICAgIGNsb3NlKHJlc3VsdD8pIHtcbiAgICAgICAgdGhpcy5jaGlsZERpYWxvZ3MuZm9yRWFjaChkID0+IGQuY2xvc2UoKSlcbiAgICAgICAgdGhpcy5kaWFsb2dSZWY/LmNsb3NlKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgY2xvc2VPblZvaWQoZm9yY2UgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NrZWRPcGVuIHx8IGZvcmNlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKHtbJGRhdGFdOiBmb3JjZX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhcnRIb3ZlclRpbWVyKGl0ZW0sIHJvdykge1xuXG4gICAgICAgIC8vIEludmVydCBjaGVjayB0byBtYWtlIHRoZSBsb2dpYyBzaW1wbGVyXG4gICAgICAgIC8vIFRMO0RSOiBpZiAoYW55KSBvZiB0aGVzZSBhcmUgdHJ1ZSwgd2Ugd2lsbCBkbyB0aGUgaG92ZXIgYWN0aW9uXG4gICAgICAgIGlmICghKFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgIHR5cGVvZiBpdGVtLmNoaWxkcmVuID09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgICAgaXRlbS5jaGlsZFRlbXBsYXRlIHx8XG4gICAgICAgICAgICBpdGVtLmNoaWxkcmVuUmVzb2x2ZXJcbiAgICAgICAgKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpdGVtWyRob3Zlcl0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBpdGVtWyRob3Zlcl07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5wb2ludGVySXNPblZvaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkRGlhbG9ncy5mb3JFYWNoKGNkID0+IGNkLmNsb3NlKCkpO1xuICAgICAgICAgICAgICAgIHJvd1snX29wZW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1lbnVJdGVtQ2xpY2soaXRlbSwgcm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5ob3ZlckRlbGF5KTtcbiAgICB9XG5cbiAgICBzdG9wSG92ZXJUaW1lcihpdGVtKSB7XG4gICAgICAgIGl0ZW1bJGhvdmVyXSAmJiBjbGVhclRpbWVvdXQoaXRlbVskaG92ZXJdKTtcbiAgICAgICAgZGVsZXRlIGl0ZW1bJGhvdmVyXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlVGltZXI6IG51bWJlcjtcbiAgICBzdGFydENsb3NlVGltZXIoKSB7XG4gICAgICAgIHRoaXMuY2xvc2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU9uVm9pZCgpO1xuICAgICAgICB9LCA1MDApIGFzIGFueTtcbiAgICB9XG4gICAgc3RvcENsb3NlVGltZXIoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBkaWFsb2cgaXMgY2xpcHBpbmcgb2Zmc2NyZWVuXG4gICAgICogaWYgc28sIG1vdmUgaXQgYmFjayBpbnRvIHZpZXcuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIilcbiAgICBwcml2YXRlIG9uUmVzaXplKCkge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMudmlld0NvbnRhaW5lcj8uZWxlbWVudD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5uZ3gtbWVudVwiKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCF0YXJnZXQpIHJldHVybjtcblxuICAgICAgICAvLyBNb3ZlIGJhY2sgaW50byB2aWV3IGlmIHdlJ3JlIGNsaXBwaW5nIG91dHNpZGUgb2YgdGhlIGJvdHRvbVxuICAgICAgICBpZiAoeSArIGhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgICAgICAgY29uc3QgbmV3VG9wID0gKHdpbmRvdy5pbm5lckhlaWdodCAtIChoZWlnaHQgKyAodGhpcy5jb25maWcuZWRnZVBhZGRpbmcgfHwgMTIpKSkgKyBcInB4XCI7XG4gICAgICAgICAgICB0YXJnZXQuc3R5bGVbJ21hcmdpbi10b3AnXSA9IG5ld1RvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgYmFjayBpbnRvIHZpZXcgaWYgd2UncmUgY2xpcHBpbmcgb2ZmIHRoZSByaWdodFxuICAgICAgICBpZiAoeCArIHdpZHRoID4gd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSAod2luZG93LmlubmVyV2lkdGggLSAod2lkdGggKyAodGhpcy5jb25maWcuZWRnZVBhZGRpbmcgfHwgMTIpKSkgKyBcInB4XCJcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZVsnbWFyZ2luLWxlZnQnXSA9IG5ld0xlZnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgdm9pZCBlbGVtZW50IGdldHMgc3R1Y2sgb3BlbiwgbWFrZSB3aGVlbCBldmVudHMgcGFzcyB0aHJvdWdoLlxuICAgIG9uV2hlZWwoZXZ0OiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy52aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2dC5jbGllbnRYLCBldnQuY2xpZW50WSk7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cbiAgICAgICAgdGFyZ2V0LnNjcm9sbCh7XG4gICAgICAgICAgICB0b3A6IGV2dC5kZWx0YVkgKyB0YXJnZXQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgbGVmdDogZXZ0LmRlbHRhWCArIHRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCJcbiAgICAgICAgfSlcbiAgICB9XG59XG4iLCI8IS0tIE1vdXNlIGV2ZW50IGJsb2NrZXIgZm9yIHBvaW50ZXIgbGVhdmUgLS0+XG5AaWYgKGNvdmVyUmVjdENvcmRzICYmICFwYXJlbnRJc05neE1lbnUpIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwib3duZXItbWFza1wiXG4gICAgICAgIFtzdHlsZS50b3BdPVwiY292ZXJSZWN0Q29yZHMudG9wICsgJ3B4J1wiXG4gICAgICAgIFtzdHlsZS5sZWZ0XT1cImNvdmVyUmVjdENvcmRzLmxlZnQgKyAncHgnXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjb3ZlclJlY3RDb3Jkcy5oZWlnaHQgKyAncHgnXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvdmVyUmVjdENvcmRzLndpZHRoICsgJ3B4J1wiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInNob3dEZWJ1Z092ZXJsYXkgPyAnI2YwMDQnIDogJyMwMDAwJ1wiXG4gICAgICAgIHN0eWxlPVwiei1pbmRleDogLTFcIlxuICAgICAgICAocG9pbnRlcmVudGVyKT1cInBvaW50ZXJIYXNCZWVuT3Zlck1hc2s9dHJ1ZVwiXG4gICAgICAgIChwb2ludGVybGVhdmUpPVwic3RvcENsb3NlVGltZXIoKVwiXG4gICAgICAgIChwb2ludGVybW92ZSk9XCJwb2ludGVySGFzQmVlbk92ZXJNYXNrPXRydWVcIlxuICAgICAgICAoY2xpY2spPVwiaXNMb2NrZWRPcGVuID0gdHJ1ZVwiXG4gICAgPjwvZGl2PlxufVxuXG5AaWYgKCFwYXJlbnRJc05neE1lbnUpIHtcbiAgICA8ZGl2IGNsYXNzPVwidm9pZFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInNob3dEZWJ1Z092ZXJsYXkgPyAnIzAwZjQnIDogJyMwMDAwJ1wiXG4gICAgICAgIChwb2ludGVyZW50ZXIpPVwicG9pbnRlcklzT25Wb2lkID0gdHJ1ZTsgaGFzQm9vdHN0cmFwcGVkICYmICFpc0xvY2tlZE9wZW4gJiYgc3RhcnRDbG9zZVRpbWVyKClcIlxuICAgICAgICAocG9pbnRlcmxlYXZlKT1cInBvaW50ZXJJc09uVm9pZCA9IGZhbHNlXCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cImhhc0Jvb3RzdHJhcHBlZCAmJiBjbG9zZU9uVm9pZCh0cnVlKVwiXG4gICAgICAgIChwb2ludGVybW92ZSk9XCJoYXNCb290c3RyYXBwZWQgJiYgIWlzTG9ja2VkT3BlbiAmJiBzdGFydENsb3NlVGltZXIoKVwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZU9uVm9pZCh0cnVlKVwiXG4gICAgICAgICh3aGVlbCk9XCJvbldoZWVsKCRldmVudClcIlxuICAgID48L2Rpdj5cbn1cblxuQGlmICghdGVtcGxhdGUpIHtcbiAgICA8dGFibGUgKHBvaW50ZXJlbnRlcik9XCJzdG9wQ2xvc2VUaW1lcigpXCI+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICA8IS0tIEEgcm93IHdpdGggYSBjbGljayBhY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtICE9ICdzZXBhcmF0b3InICYmIGl0ZW0uc2VwYXJhdG9yICE9IHRydWUgJiYgaXRlbVsnX3Zpc2libGUnXSkge1xuICAgICAgICAgICAgICAgICAgICA8dHIgI3Jvd1xuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW1bJ19kaXNhYmxlZCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIhaXRlbVsnX2Rpc2FibGVkJ10gJiYgb25NZW51SXRlbUNsaWNrKGl0ZW0sIHJvdywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhvdmVyXT1cInJvd1snaG92ZXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3Blbl09XCJyb3dbJ19vcGVuJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJlbnRlcik9XCJyb3dbJ2hvdmVyJ10gPSB0cnVlOyBzdGFydEhvdmVyVGltZXIoaXRlbSwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmxlYXZlKT1cInJvd1snaG92ZXInXSA9IGZhbHNlOyBzdG9wSG92ZXJUaW1lcihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93SWNvbkNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtYXRJY29uUngudGVzdChpdGVtWydfaWNvbiddID8/IGl0ZW0uaWNvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtWydfaWNvbiddID8/IGl0ZW0uaWNvblwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9udEljb25dPVwiaXRlbVsnX2ljb24nXSA/PyBpdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJpdGVtLmljb25Db2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAnTm9ybWFsJyBhY3Rpb24gYmFzZWQgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0XT1cInNob3dJY29uQ29sdW1uID8gMCA6ICcxNnB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FuY2hvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiaXRlbS5saW5rVGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCIoaXRlbVsnX2xpbmsnXSB8fCBpdGVtLmxpbmspID8gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoaXRlbVsnX2xpbmsnXSB8fCBpdGVtLmxpbmspIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoJGFueShpdGVtLmxhYmVsVGVtcGxhdGUpPy5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGl0ZW0pLmxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICckaW1wbGljaXQnOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlhbG9nJzogZGlhbG9nUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGV4dCc6IGl0ZW1bJ19jb250ZXh0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdGVtJzogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnQnOiBhbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZW51JzogdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCRhbnkoaXRlbSk/LmxhYmVsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyRhbnkoaXRlbSk/LmxhYmVsVGVtcGxhdGUoZGF0YSB8fCB7fSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJpdGVtWydfZm9ybWF0dGVkTGFiZWwnXVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93U2hvcnRjdXRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzaG9ydGN1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uc2hvcnRjdXRMYWJlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwibWluLXdpZHRoOiAxNnB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbVsnY2hpbGRyZW4nXT8ubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtWydfY2hpbGRyZW4nXT8ubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGRUZW1wbGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbj8uWydjYWxsJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW5SZXNvbHZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpdGVtWydfaXNSZXNvbHZpbmcnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGVZKDJweClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGV2cm9uX3JpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtWydfaXNSZXNvbHZpbmcnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZWxzZSBpZiAoaXRlbSAhPSAnc2VwYXJhdG9yJyAmJiBpdGVtLnNlcGFyYXRvciA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU2VwYXJhdG9yIHdpdGggbGFiZWwgLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkaXNhYmxlZCBzZXBhcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCIyICsgKHNob3dJY29uQ29sdW1uID8gMSA6IDApICsgKHNob3dTaG9ydGN1dENvbHVtbiA/IDEgOiAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1bJ2xhYmVsJ10gfHwgJyd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBlbHNlIGlmIChpdGVtID09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGlzYWJsZWQgc2VwYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCIyICsgKHNob3dJY29uQ29sdW1uID8gMSA6IDApICsgKHNob3dTaG9ydGN1dENvbHVtbiA/IDEgOiAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG59XG5AZWxzZSB7XG4gICAgQGlmICh0ZW1wbGF0ZVR5cGUgPT0gJ3RlbXBsYXRlJykge1xuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogY29udGVudHM7XCIgKHBvaW50ZXJlbnRlcik9XCJzdG9wQ2xvc2VUaW1lcigpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICckaW1wbGljaXQnOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAnZGlhbG9nJzogZGlhbG9nUmVmLFxuICAgICAgICAgICAgICAgICAgICAnY29udGV4dCc6IHBhcmVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICdpdGVtJzogcGFyZW50SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnQnOiB0aGlzLnZpZXdDb250YWluZXI/LmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICdtZW51JzogdGhpc1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGNvbnRlbnRzO1wiIChwb2ludGVyZW50ZXIpPVwic3RvcENsb3NlVGltZXIoKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtjZGtQb3J0YWxPdXRsZXRdPVwiY29tcG9uZW50UG9ydGFsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbn1cblxuQGlmIChzaG93RGVidWdPdmVybGF5KSB7XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdj5oYnM6IHt7aGFzQm9vdHN0cmFwcGVkfX08L2Rpdj5cbiAgICAgICAgPGRpdj5wb3Y6IHt7cG9pbnRlcklzT25Wb2lkfX08L2Rpdj5cbiAgICAgICAgPGRpdj5pbG86IHt7aXNMb2NrZWRPcGVufX08L2Rpdj5cbiAgICAgICAgPGRpdj5oYm9tOiB7e3BvaW50ZXJIYXNCZWVuT3Zlck1hc2t9fTwvZGl2PlxuXG4gICAgICAgIDxkaXY+dHlwZToge3t0ZW1wbGF0ZVR5cGV9fTwvZGl2PlxuICAgIDwvZGl2PlxufVxuIl19
|