@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.
Files changed (1157) hide show
  1. package/command-palette/breadcrumb/breadcrumb.component.d.ts +16 -0
  2. package/command-palette/command-palette.component.d.ts +38 -0
  3. package/command-palette/command-palette.service.d.ts +128 -0
  4. package/command-palette/index.d.ts +2 -0
  5. package/command-palette/shortcut/shortcut.component.d.ts +9 -0
  6. package/{components → core/components}/menu/menu.component.d.ts +2 -2
  7. package/{directives → core/components/menu}/menu.directive.d.ts +1 -1
  8. package/{types/menu.d.ts → core/components/menu/types.d.ts} +1 -1
  9. package/{components → core/components}/types.d.ts +0 -1
  10. package/{public-api.d.ts → core/index.d.ts} +8 -4
  11. package/{services → core/services}/navigation.service.d.ts +1 -1
  12. package/core/utils/index.d.ts +18 -0
  13. package/esm2022/command-palette/breadcrumb/breadcrumb.component.mjs +30 -0
  14. package/esm2022/command-palette/command-palette.component.mjs +257 -0
  15. package/esm2022/command-palette/command-palette.service.mjs +207 -0
  16. package/esm2022/command-palette/dotglitch-ngx-common-command-palette.mjs +5 -0
  17. package/esm2022/command-palette/index.mjs +3 -0
  18. package/esm2022/command-palette/shortcut/shortcut.component.mjs +19 -0
  19. package/esm2022/core/components/lazy-loader/lazy-loader.component.mjs +383 -0
  20. package/esm2022/core/components/lazy-loader/lazy-loader.module.mjs +33 -0
  21. package/esm2022/core/components/lazy-loader/lazy-loader.service.mjs +216 -0
  22. package/esm2022/core/components/lazy-loader/types.mjs +26 -0
  23. package/esm2022/core/components/menu/menu.component.mjs +433 -0
  24. package/esm2022/core/components/menu/menu.directive.mjs +159 -0
  25. package/esm2022/core/components/menu/types.mjs +2 -0
  26. package/esm2022/core/components/parallax-card/parallax-card.component.mjs +138 -0
  27. package/esm2022/core/components/types.mjs +3 -0
  28. package/esm2022/core/directives/image-cache.directive.mjs +143 -0
  29. package/esm2022/core/directives/utils.mjs +120 -0
  30. package/esm2022/core/dotglitch-ngx-common-core.mjs +5 -0
  31. package/esm2022/core/index.mjs +50 -0
  32. package/esm2022/core/pipes/html-bypass.pipe.mjs +27 -0
  33. package/esm2022/core/pipes/resource-bypass.pipe.mjs +27 -0
  34. package/esm2022/core/pipes/script-bypass.pipe.mjs +27 -0
  35. package/esm2022/core/pipes/style-bypass.pipe.mjs +27 -0
  36. package/esm2022/core/pipes/url-bypass.pipe.mjs +27 -0
  37. package/esm2022/core/services/dependency.service.mjs +55 -0
  38. package/esm2022/core/services/dialog.service.mjs +67 -0
  39. package/esm2022/core/services/fetch.service.mjs +74 -0
  40. package/esm2022/core/services/file.service.mjs +42 -0
  41. package/esm2022/core/services/keyboard.service.mjs +128 -0
  42. package/esm2022/core/services/navigation.service.mjs +50 -0
  43. package/esm2022/core/services/theme.service.mjs +64 -0
  44. package/esm2022/core/types/popup.mjs +2 -0
  45. package/esm2022/core/utils/index.mjs +69 -0
  46. package/esm2022/dotglitch-ngx-common.mjs +2 -2
  47. package/esm2022/filemanager/dotglitch-ngx-common-filemanager.mjs +5 -0
  48. package/esm2022/filemanager/file-grid/file-grid.component.mjs +676 -0
  49. package/esm2022/filemanager/filemanager.component.mjs +313 -0
  50. package/esm2022/filemanager/folder-rename/folder-rename.component.mjs +57 -0
  51. package/esm2022/filemanager/helpers.mjs +26 -0
  52. package/esm2022/filemanager/icon-resolver.mjs +155 -0
  53. package/esm2022/filemanager/index.mjs +2 -0
  54. package/esm2022/filemanager/mat-icons.mjs +5705 -0
  55. package/esm2022/filemanager/textextensions.mjs +294 -0
  56. package/esm2022/filemanager/toolbar/breadcrumb/breadcrumb.component.mjs +22 -0
  57. package/esm2022/filemanager/toolbar/icon-button/icon-button.component.mjs +32 -0
  58. package/esm2022/filemanager/toolbar/toolbar.component.mjs +165 -0
  59. package/esm2022/filemanager/tree-view/tree-view.component.mjs +51 -0
  60. package/esm2022/filemanager/types.mjs +2 -0
  61. package/esm2022/index.mjs +3 -0
  62. package/esm2022/monaco-editor/dotglitch-ngx-common-monaco-editor.mjs +5 -0
  63. package/esm2022/monaco-editor/index.mjs +2 -0
  64. package/esm2022/monaco-editor/monaco-editor.component.mjs +234 -0
  65. package/esm2022/monaco-editor/ts-type-resolver/dependency-parser.mjs +91 -0
  66. package/esm2022/monaco-editor/ts-type-resolver/dummy-source-cache.mjs +15 -0
  67. package/esm2022/monaco-editor/ts-type-resolver/import-resolver.mjs +311 -0
  68. package/esm2022/monaco-editor/ts-type-resolver/main.mjs +112 -0
  69. package/esm2022/monaco-editor/ts-type-resolver/recursion-depth.mjs +21 -0
  70. package/esm2022/monaco-editor/ts-type-resolver/types.mjs +14 -0
  71. package/esm2022/monaco-editor/ts-type-resolver/unpkg-source-resolver.mjs +21 -0
  72. package/esm2022/monaco-editor/ts-type-resolver/update-emitter.mjs +37 -0
  73. package/esm2022/overlay-wrapper/dotglitch-ngx-common-overlay-wrapper.mjs +5 -0
  74. package/esm2022/overlay-wrapper/index.mjs +2 -0
  75. package/esm2022/overlay-wrapper/overlay-wrapper.component.mjs +247 -0
  76. package/esm2022/tooltip/dotglitch-ngx-common-tooltip.mjs +5 -0
  77. package/esm2022/tooltip/index.mjs +4 -0
  78. package/esm2022/tooltip/tooltip.component.mjs +204 -0
  79. package/esm2022/tooltip/tooltip.directive.mjs +153 -0
  80. package/esm2022/tooltip/types.mjs +2 -0
  81. package/fesm2022/dotglitch-ngx-common-command-palette.mjs +508 -0
  82. package/fesm2022/dotglitch-ngx-common-command-palette.mjs.map +1 -0
  83. package/fesm2022/dotglitch-ngx-common-core.mjs +2280 -0
  84. package/fesm2022/dotglitch-ngx-common-core.mjs.map +1 -0
  85. package/fesm2022/dotglitch-ngx-common-filemanager-folder-rename.component-CnKuU8nn.mjs +60 -0
  86. package/fesm2022/dotglitch-ngx-common-filemanager-folder-rename.component-CnKuU8nn.mjs.map +1 -0
  87. package/fesm2022/dotglitch-ngx-common-filemanager.mjs +7403 -0
  88. package/fesm2022/dotglitch-ngx-common-filemanager.mjs.map +1 -0
  89. package/fesm2022/dotglitch-ngx-common-monaco-editor.mjs +850 -0
  90. package/fesm2022/dotglitch-ngx-common-monaco-editor.mjs.map +1 -0
  91. package/fesm2022/dotglitch-ngx-common-overlay-wrapper.mjs +254 -0
  92. package/fesm2022/dotglitch-ngx-common-overlay-wrapper.mjs.map +1 -0
  93. package/fesm2022/dotglitch-ngx-common-tooltip.mjs +357 -0
  94. package/fesm2022/dotglitch-ngx-common-tooltip.mjs.map +1 -0
  95. package/fesm2022/dotglitch-ngx-common.mjs +3 -2757
  96. package/fesm2022/dotglitch-ngx-common.mjs.map +1 -1
  97. package/filemanager/file-grid/file-grid.component.d.ts +94 -0
  98. package/filemanager/filemanager.component.d.ts +206 -0
  99. package/filemanager/folder-rename/folder-rename.component.d.ts +18 -0
  100. package/filemanager/helpers.d.ts +5 -0
  101. package/filemanager/icon-resolver.d.ts +13 -0
  102. package/filemanager/index.d.ts +1 -0
  103. package/filemanager/mat-icons.d.ts +5705 -0
  104. package/filemanager/textextensions.d.ts +3 -0
  105. package/filemanager/toolbar/breadcrumb/breadcrumb.component.d.ts +16 -0
  106. package/filemanager/toolbar/icon-button/icon-button.component.d.ts +11 -0
  107. package/filemanager/toolbar/toolbar.component.d.ts +31 -0
  108. package/filemanager/tree-view/tree-view.component.d.ts +21 -0
  109. package/filemanager/types.d.ts +1 -0
  110. package/index.d.ts +1 -5
  111. package/monaco-editor/README.md +3 -0
  112. package/monaco-editor/index.d.ts +1 -0
  113. package/monaco-editor/monaco-editor.component.d.ts +53 -0
  114. package/monaco-editor/ts-type-resolver/dependency-parser.d.ts +6 -0
  115. package/monaco-editor/ts-type-resolver/dummy-source-cache.d.ts +7 -0
  116. package/monaco-editor/ts-type-resolver/import-resolver.d.ts +28 -0
  117. package/monaco-editor/ts-type-resolver/main.d.ts +22 -0
  118. package/monaco-editor/ts-type-resolver/recursion-depth.d.ts +11 -0
  119. package/monaco-editor/ts-type-resolver/types.d.ts +179 -0
  120. package/monaco-editor/ts-type-resolver/unpkg-source-resolver.d.ts +5 -0
  121. package/monaco-editor/ts-type-resolver/update-emitter.d.ts +2 -0
  122. package/overlay-wrapper/index.d.ts +1 -0
  123. package/overlay-wrapper/overlay-wrapper.component.d.ts +11 -0
  124. package/package.json +104 -64
  125. package/tooltip/index.d.ts +3 -0
  126. package/{components/tooltip → tooltip}/tooltip.component.d.ts +3 -3
  127. package/{directives → tooltip}/tooltip.directive.d.ts +2 -2
  128. package/{types/tooltip.d.ts → tooltip/types.d.ts} +1 -1
  129. package/assets/lib/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  130. package/assets/lib/vs/base/common/worker/simpleWorker.nls.de.js +0 -8
  131. package/assets/lib/vs/base/common/worker/simpleWorker.nls.es.js +0 -8
  132. package/assets/lib/vs/base/common/worker/simpleWorker.nls.fr.js +0 -8
  133. package/assets/lib/vs/base/common/worker/simpleWorker.nls.it.js +0 -8
  134. package/assets/lib/vs/base/common/worker/simpleWorker.nls.ja.js +0 -8
  135. package/assets/lib/vs/base/common/worker/simpleWorker.nls.js +0 -8
  136. package/assets/lib/vs/base/common/worker/simpleWorker.nls.ko.js +0 -8
  137. package/assets/lib/vs/base/common/worker/simpleWorker.nls.ru.js +0 -8
  138. package/assets/lib/vs/base/common/worker/simpleWorker.nls.zh-cn.js +0 -8
  139. package/assets/lib/vs/base/common/worker/simpleWorker.nls.zh-tw.js +0 -8
  140. package/assets/lib/vs/base/worker/workerMain.js +0 -24
  141. package/assets/lib/vs/basic-languages/abap/abap.js +0 -10
  142. package/assets/lib/vs/basic-languages/apex/apex.js +0 -10
  143. package/assets/lib/vs/basic-languages/azcli/azcli.js +0 -10
  144. package/assets/lib/vs/basic-languages/bat/bat.js +0 -10
  145. package/assets/lib/vs/basic-languages/bicep/bicep.js +0 -11
  146. package/assets/lib/vs/basic-languages/cameligo/cameligo.js +0 -10
  147. package/assets/lib/vs/basic-languages/clojure/clojure.js +0 -10
  148. package/assets/lib/vs/basic-languages/coffee/coffee.js +0 -10
  149. package/assets/lib/vs/basic-languages/cpp/cpp.js +0 -10
  150. package/assets/lib/vs/basic-languages/csharp/csharp.js +0 -10
  151. package/assets/lib/vs/basic-languages/csp/csp.js +0 -10
  152. package/assets/lib/vs/basic-languages/css/css.js +0 -12
  153. package/assets/lib/vs/basic-languages/cypher/cypher.js +0 -10
  154. package/assets/lib/vs/basic-languages/dart/dart.js +0 -10
  155. package/assets/lib/vs/basic-languages/dockerfile/dockerfile.js +0 -10
  156. package/assets/lib/vs/basic-languages/ecl/ecl.js +0 -10
  157. package/assets/lib/vs/basic-languages/elixir/elixir.js +0 -10
  158. package/assets/lib/vs/basic-languages/flow9/flow9.js +0 -10
  159. package/assets/lib/vs/basic-languages/freemarker2/freemarker2.js +0 -12
  160. package/assets/lib/vs/basic-languages/fsharp/fsharp.js +0 -10
  161. package/assets/lib/vs/basic-languages/go/go.js +0 -10
  162. package/assets/lib/vs/basic-languages/graphql/graphql.js +0 -10
  163. package/assets/lib/vs/basic-languages/handlebars/handlebars.js +0 -10
  164. package/assets/lib/vs/basic-languages/hcl/hcl.js +0 -10
  165. package/assets/lib/vs/basic-languages/html/html.js +0 -10
  166. package/assets/lib/vs/basic-languages/ini/ini.js +0 -10
  167. package/assets/lib/vs/basic-languages/java/java.js +0 -10
  168. package/assets/lib/vs/basic-languages/javascript/javascript.js +0 -10
  169. package/assets/lib/vs/basic-languages/julia/julia.js +0 -10
  170. package/assets/lib/vs/basic-languages/kotlin/kotlin.js +0 -10
  171. package/assets/lib/vs/basic-languages/less/less.js +0 -11
  172. package/assets/lib/vs/basic-languages/lexon/lexon.js +0 -10
  173. package/assets/lib/vs/basic-languages/liquid/liquid.js +0 -10
  174. package/assets/lib/vs/basic-languages/lua/lua.js +0 -10
  175. package/assets/lib/vs/basic-languages/m3/m3.js +0 -10
  176. package/assets/lib/vs/basic-languages/markdown/markdown.js +0 -10
  177. package/assets/lib/vs/basic-languages/mips/mips.js +0 -10
  178. package/assets/lib/vs/basic-languages/msdax/msdax.js +0 -10
  179. package/assets/lib/vs/basic-languages/mysql/mysql.js +0 -10
  180. package/assets/lib/vs/basic-languages/objective-c/objective-c.js +0 -10
  181. package/assets/lib/vs/basic-languages/pascal/pascal.js +0 -10
  182. package/assets/lib/vs/basic-languages/pascaligo/pascaligo.js +0 -10
  183. package/assets/lib/vs/basic-languages/perl/perl.js +0 -10
  184. package/assets/lib/vs/basic-languages/pgsql/pgsql.js +0 -10
  185. package/assets/lib/vs/basic-languages/php/php.js +0 -10
  186. package/assets/lib/vs/basic-languages/pla/pla.js +0 -10
  187. package/assets/lib/vs/basic-languages/postiats/postiats.js +0 -10
  188. package/assets/lib/vs/basic-languages/powerquery/powerquery.js +0 -10
  189. package/assets/lib/vs/basic-languages/powershell/powershell.js +0 -10
  190. package/assets/lib/vs/basic-languages/protobuf/protobuf.js +0 -11
  191. package/assets/lib/vs/basic-languages/pug/pug.js +0 -10
  192. package/assets/lib/vs/basic-languages/python/python.js +0 -10
  193. package/assets/lib/vs/basic-languages/qsharp/qsharp.js +0 -10
  194. package/assets/lib/vs/basic-languages/r/r.js +0 -10
  195. package/assets/lib/vs/basic-languages/razor/razor.js +0 -10
  196. package/assets/lib/vs/basic-languages/redis/redis.js +0 -10
  197. package/assets/lib/vs/basic-languages/redshift/redshift.js +0 -10
  198. package/assets/lib/vs/basic-languages/restructuredtext/restructuredtext.js +0 -10
  199. package/assets/lib/vs/basic-languages/ruby/ruby.js +0 -10
  200. package/assets/lib/vs/basic-languages/rust/rust.js +0 -10
  201. package/assets/lib/vs/basic-languages/sb/sb.js +0 -10
  202. package/assets/lib/vs/basic-languages/scala/scala.js +0 -10
  203. package/assets/lib/vs/basic-languages/scheme/scheme.js +0 -10
  204. package/assets/lib/vs/basic-languages/scss/scss.js +0 -12
  205. package/assets/lib/vs/basic-languages/shell/shell.js +0 -10
  206. package/assets/lib/vs/basic-languages/solidity/solidity.js +0 -10
  207. package/assets/lib/vs/basic-languages/sophia/sophia.js +0 -10
  208. package/assets/lib/vs/basic-languages/sparql/sparql.js +0 -10
  209. package/assets/lib/vs/basic-languages/sql/sql.js +0 -10
  210. package/assets/lib/vs/basic-languages/st/st.js +0 -10
  211. package/assets/lib/vs/basic-languages/swift/swift.js +0 -13
  212. package/assets/lib/vs/basic-languages/systemverilog/systemverilog.js +0 -10
  213. package/assets/lib/vs/basic-languages/tcl/tcl.js +0 -10
  214. package/assets/lib/vs/basic-languages/twig/twig.js +0 -10
  215. package/assets/lib/vs/basic-languages/typescript/typescript.js +0 -10
  216. package/assets/lib/vs/basic-languages/vb/vb.js +0 -10
  217. package/assets/lib/vs/basic-languages/wgsl/wgsl.js +0 -307
  218. package/assets/lib/vs/basic-languages/xml/xml.js +0 -10
  219. package/assets/lib/vs/basic-languages/yaml/yaml.js +0 -10
  220. package/assets/lib/vs/editor/editor.main.css +0 -6
  221. package/assets/lib/vs/editor/editor.main.js +0 -752
  222. package/assets/lib/vs/editor/editor.main.nls.de.js +0 -31
  223. package/assets/lib/vs/editor/editor.main.nls.es.js +0 -31
  224. package/assets/lib/vs/editor/editor.main.nls.fr.js +0 -29
  225. package/assets/lib/vs/editor/editor.main.nls.it.js +0 -29
  226. package/assets/lib/vs/editor/editor.main.nls.ja.js +0 -31
  227. package/assets/lib/vs/editor/editor.main.nls.js +0 -29
  228. package/assets/lib/vs/editor/editor.main.nls.ko.js +0 -29
  229. package/assets/lib/vs/editor/editor.main.nls.ru.js +0 -31
  230. package/assets/lib/vs/editor/editor.main.nls.zh-cn.js +0 -31
  231. package/assets/lib/vs/editor/editor.main.nls.zh-tw.js +0 -29
  232. package/assets/lib/vs/language/css/cssMode.js +0 -13
  233. package/assets/lib/vs/language/css/cssWorker.js +0 -81
  234. package/assets/lib/vs/language/html/htmlMode.js +0 -13
  235. package/assets/lib/vs/language/html/htmlWorker.js +0 -453
  236. package/assets/lib/vs/language/json/jsonMode.js +0 -15
  237. package/assets/lib/vs/language/json/jsonWorker.js +0 -36
  238. package/assets/lib/vs/language/typescript/tsMode.js +0 -20
  239. package/assets/lib/vs/language/typescript/tsWorker.js +0 -37016
  240. package/assets/lib/vs/loader.js +0 -11
  241. package/assets/mat-icons.ts +0 -5704
  242. package/assets/material/3d.svg +0 -1
  243. package/assets/material/abc.svg +0 -1
  244. package/assets/material/actionscript.svg +0 -1
  245. package/assets/material/ada.svg +0 -1
  246. package/assets/material/adonis.svg +0 -1
  247. package/assets/material/advpl_include.svg +0 -1
  248. package/assets/material/advpl_prw.svg +0 -1
  249. package/assets/material/advpl_ptm.svg +0 -1
  250. package/assets/material/advpl_tlpp.svg +0 -1
  251. package/assets/material/android.svg +0 -1
  252. package/assets/material/angular-component.svg +0 -1
  253. package/assets/material/angular-directive.svg +0 -1
  254. package/assets/material/angular-guard.svg +0 -1
  255. package/assets/material/angular-pipe.svg +0 -1
  256. package/assets/material/angular-resolver.svg +0 -1
  257. package/assets/material/angular-service.svg +0 -1
  258. package/assets/material/angular.svg +0 -1
  259. package/assets/material/antlr.svg +0 -1
  260. package/assets/material/apiblueprint.svg +0 -1
  261. package/assets/material/apollo.svg +0 -1
  262. package/assets/material/applescript.svg +0 -1
  263. package/assets/material/appveyor.svg +0 -1
  264. package/assets/material/architecture.svg +0 -1
  265. package/assets/material/arduino.svg +0 -1
  266. package/assets/material/asciidoc.svg +0 -1
  267. package/assets/material/assembly.svg +0 -1
  268. package/assets/material/astro.svg +0 -1
  269. package/assets/material/astyle.svg +0 -1
  270. package/assets/material/audio.svg +0 -1
  271. package/assets/material/aurelia.svg +0 -1
  272. package/assets/material/authors.svg +0 -1
  273. package/assets/material/auto.svg +0 -1
  274. package/assets/material/auto_light.svg +0 -1
  275. package/assets/material/autohotkey.svg +0 -1
  276. package/assets/material/autoit.svg +0 -1
  277. package/assets/material/azure-pipelines.svg +0 -1
  278. package/assets/material/azure.svg +0 -1
  279. package/assets/material/babel.svg +0 -1
  280. package/assets/material/ballerina.svg +0 -1
  281. package/assets/material/bazel.svg +0 -1
  282. package/assets/material/bicep.svg +0 -1
  283. package/assets/material/bitbucket.svg +0 -13
  284. package/assets/material/bithound.svg +0 -1
  285. package/assets/material/blink.svg +0 -1
  286. package/assets/material/blink_light.svg +0 -1
  287. package/assets/material/blitz.svg +0 -1
  288. package/assets/material/bower.svg +0 -1
  289. package/assets/material/brainfuck.svg +0 -1
  290. package/assets/material/browserlist.svg +0 -1
  291. package/assets/material/browserlist_light.svg +0 -1
  292. package/assets/material/buck.svg +0 -1
  293. package/assets/material/bucklescript.svg +0 -1
  294. package/assets/material/buildkite.svg +0 -1
  295. package/assets/material/bun.svg +0 -2
  296. package/assets/material/bun_light.svg +0 -2
  297. package/assets/material/c.svg +0 -4
  298. package/assets/material/cabal.svg +0 -1
  299. package/assets/material/caddy.svg +0 -1
  300. package/assets/material/cadence.svg +0 -1
  301. package/assets/material/cake.svg +0 -1
  302. package/assets/material/capacitor.svg +0 -1
  303. package/assets/material/certificate.svg +0 -1
  304. package/assets/material/changelog.svg +0 -1
  305. package/assets/material/chess.svg +0 -1
  306. package/assets/material/chess_light.svg +0 -1
  307. package/assets/material/circleci.svg +0 -1
  308. package/assets/material/circleci_light.svg +0 -1
  309. package/assets/material/clojure.svg +0 -1
  310. package/assets/material/cloudfoundry.svg +0 -1
  311. package/assets/material/cmake.svg +0 -1
  312. package/assets/material/coala.svg +0 -1
  313. package/assets/material/cobol.svg +0 -1
  314. package/assets/material/coconut.svg +0 -1
  315. package/assets/material/code-climate.svg +0 -1
  316. package/assets/material/code-climate_light.svg +0 -1
  317. package/assets/material/codecov.svg +0 -1
  318. package/assets/material/codeowners.svg +0 -1
  319. package/assets/material/coffee.svg +0 -1
  320. package/assets/material/coldfusion.svg +0 -1
  321. package/assets/material/command.svg +0 -1
  322. package/assets/material/commitlint.svg +0 -1
  323. package/assets/material/conduct.svg +0 -1
  324. package/assets/material/console.svg +0 -1
  325. package/assets/material/contributing.svg +0 -1
  326. package/assets/material/cpp.svg +0 -4
  327. package/assets/material/craco.svg +0 -45
  328. package/assets/material/credits.svg +0 -1
  329. package/assets/material/crystal.svg +0 -1
  330. package/assets/material/crystal_light.svg +0 -1
  331. package/assets/material/csharp.svg +0 -4
  332. package/assets/material/css-map.svg +0 -1
  333. package/assets/material/css.svg +0 -1
  334. package/assets/material/cucumber.svg +0 -1
  335. package/assets/material/cuda.svg +0 -1
  336. package/assets/material/cypress.svg +0 -1
  337. package/assets/material/d.svg +0 -1
  338. package/assets/material/dart.svg +0 -1
  339. package/assets/material/dart_generated.svg +0 -1
  340. package/assets/material/database.svg +0 -1
  341. package/assets/material/denizenscript.svg +0 -1
  342. package/assets/material/deno.svg +0 -1
  343. package/assets/material/deno_light.svg +0 -1
  344. package/assets/material/dependabot.svg +0 -1
  345. package/assets/material/dhall.svg +0 -1
  346. package/assets/material/diff.svg +0 -1
  347. package/assets/material/dinophp.svg +0 -1
  348. package/assets/material/disc.svg +0 -1
  349. package/assets/material/django.svg +0 -1
  350. package/assets/material/docker.svg +0 -1
  351. package/assets/material/document.svg +0 -1
  352. package/assets/material/dotjs.svg +0 -1
  353. package/assets/material/drawio.svg +0 -1
  354. package/assets/material/drone.svg +0 -1
  355. package/assets/material/drone_light.svg +0 -1
  356. package/assets/material/dune.svg +0 -1
  357. package/assets/material/edge.svg +0 -1
  358. package/assets/material/editorconfig.svg +0 -1
  359. package/assets/material/ejs.svg +0 -1
  360. package/assets/material/elixir.svg +0 -1
  361. package/assets/material/elm.svg +0 -1
  362. package/assets/material/email.svg +0 -1
  363. package/assets/material/ember.svg +0 -1
  364. package/assets/material/erlang.svg +0 -1
  365. package/assets/material/eslint.svg +0 -1
  366. package/assets/material/exe.svg +0 -1
  367. package/assets/material/fastlane.svg +0 -1
  368. package/assets/material/favicon.svg +0 -1
  369. package/assets/material/figma.svg +0 -1
  370. package/assets/material/file.svg +0 -1
  371. package/assets/material/firebase.svg +0 -1
  372. package/assets/material/flash.svg +0 -1
  373. package/assets/material/flow.svg +0 -1
  374. package/assets/material/folder-admin-open.svg +0 -1
  375. package/assets/material/folder-admin.svg +0 -1
  376. package/assets/material/folder-android-open.svg +0 -1
  377. package/assets/material/folder-android.svg +0 -1
  378. package/assets/material/folder-angular-open.svg +0 -1
  379. package/assets/material/folder-angular.svg +0 -1
  380. package/assets/material/folder-animation-open.svg +0 -1
  381. package/assets/material/folder-animation.svg +0 -1
  382. package/assets/material/folder-ansible-open.svg +0 -1
  383. package/assets/material/folder-ansible.svg +0 -1
  384. package/assets/material/folder-api-open.svg +0 -1
  385. package/assets/material/folder-api.svg +0 -1
  386. package/assets/material/folder-apollo-open.svg +0 -1
  387. package/assets/material/folder-apollo.svg +0 -1
  388. package/assets/material/folder-app-open.svg +0 -1
  389. package/assets/material/folder-app.svg +0 -1
  390. package/assets/material/folder-archive-open.svg +0 -1
  391. package/assets/material/folder-archive.svg +0 -1
  392. package/assets/material/folder-audio-open.svg +0 -1
  393. package/assets/material/folder-audio.svg +0 -1
  394. package/assets/material/folder-aurelia-open.svg +0 -1
  395. package/assets/material/folder-aurelia.svg +0 -1
  396. package/assets/material/folder-aws-open.svg +0 -1
  397. package/assets/material/folder-aws.svg +0 -1
  398. package/assets/material/folder-azure-pipelines-open.svg +0 -1
  399. package/assets/material/folder-azure-pipelines.svg +0 -1
  400. package/assets/material/folder-base-open.svg +0 -1
  401. package/assets/material/folder-base.svg +0 -1
  402. package/assets/material/folder-batch-open.svg +0 -1
  403. package/assets/material/folder-batch.svg +0 -1
  404. package/assets/material/folder-benchmark-open.svg +0 -1
  405. package/assets/material/folder-benchmark.svg +0 -1
  406. package/assets/material/folder-bower-open.svg +0 -1
  407. package/assets/material/folder-bower.svg +0 -1
  408. package/assets/material/folder-buildkite-open.svg +0 -1
  409. package/assets/material/folder-buildkite.svg +0 -1
  410. package/assets/material/folder-cart-open.svg +0 -1
  411. package/assets/material/folder-cart.svg +0 -1
  412. package/assets/material/folder-changesets-open.svg +0 -5
  413. package/assets/material/folder-changesets.svg +0 -2
  414. package/assets/material/folder-ci-open.svg +0 -1
  415. package/assets/material/folder-ci.svg +0 -1
  416. package/assets/material/folder-circleci-open.svg +0 -1
  417. package/assets/material/folder-circleci.svg +0 -1
  418. package/assets/material/folder-class-open.svg +0 -1
  419. package/assets/material/folder-class.svg +0 -1
  420. package/assets/material/folder-client-open.svg +0 -1
  421. package/assets/material/folder-client.svg +0 -1
  422. package/assets/material/folder-cluster-open.svg +0 -1
  423. package/assets/material/folder-cluster.svg +0 -1
  424. package/assets/material/folder-cobol-open.svg +0 -1
  425. package/assets/material/folder-cobol.svg +0 -1
  426. package/assets/material/folder-command-open.svg +0 -1
  427. package/assets/material/folder-command.svg +0 -1
  428. package/assets/material/folder-components-open.svg +0 -1
  429. package/assets/material/folder-components.svg +0 -1
  430. package/assets/material/folder-config-open.svg +0 -1
  431. package/assets/material/folder-config.svg +0 -1
  432. package/assets/material/folder-connection-open.svg +0 -1
  433. package/assets/material/folder-connection.svg +0 -1
  434. package/assets/material/folder-constant-open.svg +0 -1
  435. package/assets/material/folder-constant.svg +0 -1
  436. package/assets/material/folder-container-open.svg +0 -1
  437. package/assets/material/folder-container.svg +0 -1
  438. package/assets/material/folder-content-open.svg +0 -1
  439. package/assets/material/folder-content.svg +0 -1
  440. package/assets/material/folder-context-open.svg +0 -1
  441. package/assets/material/folder-context.svg +0 -1
  442. package/assets/material/folder-contract-open.svg +0 -1
  443. package/assets/material/folder-contract.svg +0 -1
  444. package/assets/material/folder-controller-open.svg +0 -1
  445. package/assets/material/folder-controller.svg +0 -1
  446. package/assets/material/folder-core-open.svg +0 -1
  447. package/assets/material/folder-core.svg +0 -1
  448. package/assets/material/folder-coverage-open.svg +0 -1
  449. package/assets/material/folder-coverage.svg +0 -1
  450. package/assets/material/folder-css-open.svg +0 -1
  451. package/assets/material/folder-css.svg +0 -1
  452. package/assets/material/folder-custom-open.svg +0 -1
  453. package/assets/material/folder-custom.svg +0 -1
  454. package/assets/material/folder-cypress-open.svg +0 -1
  455. package/assets/material/folder-cypress.svg +0 -1
  456. package/assets/material/folder-database-open.svg +0 -1
  457. package/assets/material/folder-database.svg +0 -1
  458. package/assets/material/folder-debug-open.svg +0 -1
  459. package/assets/material/folder-debug.svg +0 -1
  460. package/assets/material/folder-decorators-open.svg +0 -2
  461. package/assets/material/folder-decorators.svg +0 -5
  462. package/assets/material/folder-delta-open.svg +0 -1
  463. package/assets/material/folder-delta.svg +0 -1
  464. package/assets/material/folder-dist-open.svg +0 -1
  465. package/assets/material/folder-dist.svg +0 -1
  466. package/assets/material/folder-docker-open.svg +0 -1
  467. package/assets/material/folder-docker.svg +0 -1
  468. package/assets/material/folder-docs-open.svg +0 -1
  469. package/assets/material/folder-docs.svg +0 -1
  470. package/assets/material/folder-download-open.svg +0 -1
  471. package/assets/material/folder-download.svg +0 -1
  472. package/assets/material/folder-dump-open.svg +0 -1
  473. package/assets/material/folder-dump.svg +0 -1
  474. package/assets/material/folder-environment-open.svg +0 -1
  475. package/assets/material/folder-environment.svg +0 -1
  476. package/assets/material/folder-error-open.svg +0 -1
  477. package/assets/material/folder-error.svg +0 -1
  478. package/assets/material/folder-event-open.svg +0 -1
  479. package/assets/material/folder-event.svg +0 -1
  480. package/assets/material/folder-examples-open.svg +0 -1
  481. package/assets/material/folder-examples.svg +0 -1
  482. package/assets/material/folder-expo-open.svg +0 -1
  483. package/assets/material/folder-expo.svg +0 -1
  484. package/assets/material/folder-export-open.svg +0 -1
  485. package/assets/material/folder-export.svg +0 -1
  486. package/assets/material/folder-fastlane-open.svg +0 -1
  487. package/assets/material/folder-fastlane.svg +0 -1
  488. package/assets/material/folder-firebase-open.svg +0 -1
  489. package/assets/material/folder-firebase.svg +0 -1
  490. package/assets/material/folder-flow-open.svg +0 -1
  491. package/assets/material/folder-flow.svg +0 -1
  492. package/assets/material/folder-font-open.svg +0 -1
  493. package/assets/material/folder-font.svg +0 -1
  494. package/assets/material/folder-functions-open.svg +0 -1
  495. package/assets/material/folder-functions.svg +0 -1
  496. package/assets/material/folder-gamemaker-open.svg +0 -2
  497. package/assets/material/folder-gamemaker.svg +0 -2
  498. package/assets/material/folder-generator-open.svg +0 -1
  499. package/assets/material/folder-generator.svg +0 -1
  500. package/assets/material/folder-git-open.svg +0 -1
  501. package/assets/material/folder-git.svg +0 -1
  502. package/assets/material/folder-github-open.svg +0 -1
  503. package/assets/material/folder-github.svg +0 -1
  504. package/assets/material/folder-gitlab-open.svg +0 -1
  505. package/assets/material/folder-gitlab.svg +0 -1
  506. package/assets/material/folder-global-open.svg +0 -1
  507. package/assets/material/folder-global.svg +0 -1
  508. package/assets/material/folder-godot-open.svg +0 -2
  509. package/assets/material/folder-godot.svg +0 -8
  510. package/assets/material/folder-gradle-open.svg +0 -1
  511. package/assets/material/folder-gradle.svg +0 -1
  512. package/assets/material/folder-graphql-open.svg +0 -1
  513. package/assets/material/folder-graphql.svg +0 -1
  514. package/assets/material/folder-guard-open.svg +0 -1
  515. package/assets/material/folder-guard.svg +0 -1
  516. package/assets/material/folder-gulp-open.svg +0 -1
  517. package/assets/material/folder-gulp.svg +0 -1
  518. package/assets/material/folder-helper-open.svg +0 -1
  519. package/assets/material/folder-helper.svg +0 -1
  520. package/assets/material/folder-home-open.svg +0 -1
  521. package/assets/material/folder-home.svg +0 -1
  522. package/assets/material/folder-hook-open.svg +0 -1
  523. package/assets/material/folder-hook.svg +0 -1
  524. package/assets/material/folder-husky-open.svg +0 -1
  525. package/assets/material/folder-husky.svg +0 -1
  526. package/assets/material/folder-i18n-open.svg +0 -1
  527. package/assets/material/folder-i18n.svg +0 -1
  528. package/assets/material/folder-images-open.svg +0 -1
  529. package/assets/material/folder-images.svg +0 -1
  530. package/assets/material/folder-import-open.svg +0 -1
  531. package/assets/material/folder-import.svg +0 -1
  532. package/assets/material/folder-include-open.svg +0 -1
  533. package/assets/material/folder-include.svg +0 -1
  534. package/assets/material/folder-intellij-open.svg +0 -1
  535. package/assets/material/folder-intellij-open_light.svg +0 -1
  536. package/assets/material/folder-intellij.svg +0 -1
  537. package/assets/material/folder-intellij_light.svg +0 -1
  538. package/assets/material/folder-interface-open.svg +0 -1
  539. package/assets/material/folder-interface.svg +0 -1
  540. package/assets/material/folder-ios-open.svg +0 -1
  541. package/assets/material/folder-ios.svg +0 -1
  542. package/assets/material/folder-java-open.svg +0 -1
  543. package/assets/material/folder-java.svg +0 -1
  544. package/assets/material/folder-javascript-open.svg +0 -1
  545. package/assets/material/folder-javascript.svg +0 -1
  546. package/assets/material/folder-jinja-open.svg +0 -1
  547. package/assets/material/folder-jinja-open_light.svg +0 -1
  548. package/assets/material/folder-jinja.svg +0 -1
  549. package/assets/material/folder-jinja_light.svg +0 -1
  550. package/assets/material/folder-job-open.svg +0 -1
  551. package/assets/material/folder-job.svg +0 -1
  552. package/assets/material/folder-json-open.svg +0 -1
  553. package/assets/material/folder-json.svg +0 -1
  554. package/assets/material/folder-keys-open.svg +0 -1
  555. package/assets/material/folder-keys.svg +0 -1
  556. package/assets/material/folder-kubernetes-open.svg +0 -1
  557. package/assets/material/folder-kubernetes.svg +0 -1
  558. package/assets/material/folder-layout-open.svg +0 -1
  559. package/assets/material/folder-layout.svg +0 -1
  560. package/assets/material/folder-less-open.svg +0 -1
  561. package/assets/material/folder-less.svg +0 -1
  562. package/assets/material/folder-lib-open.svg +0 -1
  563. package/assets/material/folder-lib.svg +0 -1
  564. package/assets/material/folder-log-open.svg +0 -1
  565. package/assets/material/folder-log.svg +0 -1
  566. package/assets/material/folder-lua-open.svg +0 -1
  567. package/assets/material/folder-lua.svg +0 -1
  568. package/assets/material/folder-mail-open.svg +0 -1
  569. package/assets/material/folder-mail.svg +0 -1
  570. package/assets/material/folder-mappings-open.svg +0 -1
  571. package/assets/material/folder-mappings.svg +0 -1
  572. package/assets/material/folder-markdown-open.svg +0 -1
  573. package/assets/material/folder-markdown.svg +0 -1
  574. package/assets/material/folder-mercurial-open.svg +0 -5
  575. package/assets/material/folder-mercurial.svg +0 -2
  576. package/assets/material/folder-messages-open.svg +0 -1
  577. package/assets/material/folder-messages.svg +0 -1
  578. package/assets/material/folder-meta-open.svg +0 -1
  579. package/assets/material/folder-meta.svg +0 -1
  580. package/assets/material/folder-middleware-open.svg +0 -1
  581. package/assets/material/folder-middleware.svg +0 -1
  582. package/assets/material/folder-mjml-open.svg +0 -1
  583. package/assets/material/folder-mjml.svg +0 -1
  584. package/assets/material/folder-mobile-open.svg +0 -1
  585. package/assets/material/folder-mobile.svg +0 -1
  586. package/assets/material/folder-mock-open.svg +0 -1
  587. package/assets/material/folder-mock.svg +0 -1
  588. package/assets/material/folder-netlify-open.svg +0 -5
  589. package/assets/material/folder-netlify.svg +0 -2
  590. package/assets/material/folder-next-open.svg +0 -1
  591. package/assets/material/folder-next.svg +0 -1
  592. package/assets/material/folder-ngrx-actions-open.svg +0 -1
  593. package/assets/material/folder-ngrx-actions.svg +0 -1
  594. package/assets/material/folder-ngrx-effects-open.svg +0 -1
  595. package/assets/material/folder-ngrx-effects.svg +0 -1
  596. package/assets/material/folder-ngrx-entities-open.svg +0 -1
  597. package/assets/material/folder-ngrx-entities.svg +0 -1
  598. package/assets/material/folder-ngrx-reducer-open.svg +0 -1
  599. package/assets/material/folder-ngrx-reducer.svg +0 -1
  600. package/assets/material/folder-ngrx-selectors-open.svg +0 -1
  601. package/assets/material/folder-ngrx-selectors.svg +0 -1
  602. package/assets/material/folder-ngrx-state-open.svg +0 -1
  603. package/assets/material/folder-ngrx-state.svg +0 -1
  604. package/assets/material/folder-ngrx-store-open.svg +0 -1
  605. package/assets/material/folder-ngrx-store.svg +0 -1
  606. package/assets/material/folder-node-open.svg +0 -1
  607. package/assets/material/folder-node.svg +0 -1
  608. package/assets/material/folder-nuxt-open.svg +0 -1
  609. package/assets/material/folder-nuxt.svg +0 -1
  610. package/assets/material/folder-open.svg +0 -1
  611. package/assets/material/folder-other-open.svg +0 -1
  612. package/assets/material/folder-other.svg +0 -1
  613. package/assets/material/folder-packages-open.svg +0 -1
  614. package/assets/material/folder-packages.svg +0 -1
  615. package/assets/material/folder-pdf-open.svg +0 -1
  616. package/assets/material/folder-pdf.svg +0 -1
  617. package/assets/material/folder-php-open.svg +0 -1
  618. package/assets/material/folder-php.svg +0 -1
  619. package/assets/material/folder-phpmailer-open.svg +0 -1
  620. package/assets/material/folder-phpmailer.svg +0 -1
  621. package/assets/material/folder-pipe-open.svg +0 -1
  622. package/assets/material/folder-pipe.svg +0 -1
  623. package/assets/material/folder-plastic-open.svg +0 -8
  624. package/assets/material/folder-plastic.svg +0 -2
  625. package/assets/material/folder-plugin-open.svg +0 -1
  626. package/assets/material/folder-plugin.svg +0 -1
  627. package/assets/material/folder-prisma-open.svg +0 -1
  628. package/assets/material/folder-prisma.svg +0 -1
  629. package/assets/material/folder-private-open.svg +0 -1
  630. package/assets/material/folder-private.svg +0 -1
  631. package/assets/material/folder-project-open.svg +0 -1
  632. package/assets/material/folder-project.svg +0 -1
  633. package/assets/material/folder-proto-open.svg +0 -1
  634. package/assets/material/folder-proto.svg +0 -1
  635. package/assets/material/folder-public-open.svg +0 -1
  636. package/assets/material/folder-public.svg +0 -1
  637. package/assets/material/folder-python-open.svg +0 -1
  638. package/assets/material/folder-python.svg +0 -1
  639. package/assets/material/folder-quasar-open.svg +0 -1
  640. package/assets/material/folder-quasar.svg +0 -1
  641. package/assets/material/folder-queue-open.svg +0 -1
  642. package/assets/material/folder-queue.svg +0 -1
  643. package/assets/material/folder-react-components-open.svg +0 -1
  644. package/assets/material/folder-react-components.svg +0 -1
  645. package/assets/material/folder-redux-actions-open.svg +0 -1
  646. package/assets/material/folder-redux-actions.svg +0 -1
  647. package/assets/material/folder-redux-reducer-open.svg +0 -1
  648. package/assets/material/folder-redux-reducer.svg +0 -1
  649. package/assets/material/folder-redux-selector-open.svg +0 -1
  650. package/assets/material/folder-redux-selector.svg +0 -1
  651. package/assets/material/folder-redux-store-open.svg +0 -1
  652. package/assets/material/folder-redux-store.svg +0 -1
  653. package/assets/material/folder-resolver-open.svg +0 -1
  654. package/assets/material/folder-resolver.svg +0 -1
  655. package/assets/material/folder-resource-open.svg +0 -1
  656. package/assets/material/folder-resource.svg +0 -1
  657. package/assets/material/folder-review-open.svg +0 -1
  658. package/assets/material/folder-review.svg +0 -1
  659. package/assets/material/folder-root-open.svg +0 -1
  660. package/assets/material/folder-root.svg +0 -1
  661. package/assets/material/folder-routes-open.svg +0 -1
  662. package/assets/material/folder-routes.svg +0 -1
  663. package/assets/material/folder-rules-open.svg +0 -1
  664. package/assets/material/folder-rules.svg +0 -1
  665. package/assets/material/folder-sass-open.svg +0 -1
  666. package/assets/material/folder-sass.svg +0 -1
  667. package/assets/material/folder-scala-open.svg +0 -1
  668. package/assets/material/folder-scala.svg +0 -1
  669. package/assets/material/folder-scripts-open.svg +0 -1
  670. package/assets/material/folder-scripts.svg +0 -1
  671. package/assets/material/folder-secure-open.svg +0 -1
  672. package/assets/material/folder-secure.svg +0 -1
  673. package/assets/material/folder-server-open.svg +0 -1
  674. package/assets/material/folder-server.svg +0 -1
  675. package/assets/material/folder-serverless-open.svg +0 -1
  676. package/assets/material/folder-serverless.svg +0 -1
  677. package/assets/material/folder-shader-open.svg +0 -1
  678. package/assets/material/folder-shader.svg +0 -1
  679. package/assets/material/folder-shared-open.svg +0 -1
  680. package/assets/material/folder-shared.svg +0 -1
  681. package/assets/material/folder-src-open.svg +0 -1
  682. package/assets/material/folder-src.svg +0 -1
  683. package/assets/material/folder-stack-open.svg +0 -1
  684. package/assets/material/folder-stack.svg +0 -1
  685. package/assets/material/folder-stencil-open.svg +0 -1
  686. package/assets/material/folder-stencil.svg +0 -1
  687. package/assets/material/folder-storybook-open.svg +0 -1
  688. package/assets/material/folder-storybook.svg +0 -1
  689. package/assets/material/folder-stylus-open.svg +0 -1
  690. package/assets/material/folder-stylus.svg +0 -1
  691. package/assets/material/folder-sublime-open.svg +0 -1
  692. package/assets/material/folder-sublime.svg +0 -1
  693. package/assets/material/folder-supabase-open.svg +0 -5
  694. package/assets/material/folder-supabase.svg +0 -2
  695. package/assets/material/folder-svelte-open.svg +0 -1
  696. package/assets/material/folder-svelte.svg +0 -1
  697. package/assets/material/folder-svg-open.svg +0 -1
  698. package/assets/material/folder-svg.svg +0 -1
  699. package/assets/material/folder-syntax-open.svg +0 -1
  700. package/assets/material/folder-syntax.svg +0 -1
  701. package/assets/material/folder-target-open.svg +0 -1
  702. package/assets/material/folder-target.svg +0 -1
  703. package/assets/material/folder-tasks-open.svg +0 -1
  704. package/assets/material/folder-tasks.svg +0 -1
  705. package/assets/material/folder-temp-open.svg +0 -1
  706. package/assets/material/folder-temp.svg +0 -1
  707. package/assets/material/folder-template-open.svg +0 -1
  708. package/assets/material/folder-template.svg +0 -1
  709. package/assets/material/folder-terraform-open.svg +0 -1
  710. package/assets/material/folder-terraform.svg +0 -1
  711. package/assets/material/folder-test-open.svg +0 -1
  712. package/assets/material/folder-test.svg +0 -1
  713. package/assets/material/folder-theme-open.svg +0 -1
  714. package/assets/material/folder-theme.svg +0 -1
  715. package/assets/material/folder-tools-open.svg +0 -1
  716. package/assets/material/folder-tools.svg +0 -1
  717. package/assets/material/folder-typescript-open.svg +0 -1
  718. package/assets/material/folder-typescript.svg +0 -1
  719. package/assets/material/folder-unity-open.svg +0 -1
  720. package/assets/material/folder-unity.svg +0 -1
  721. package/assets/material/folder-update-open.svg +0 -1
  722. package/assets/material/folder-update.svg +0 -1
  723. package/assets/material/folder-upload-open.svg +0 -1
  724. package/assets/material/folder-upload.svg +0 -1
  725. package/assets/material/folder-utils-open.svg +0 -1
  726. package/assets/material/folder-utils.svg +0 -1
  727. package/assets/material/folder-vercel-open.svg +0 -1
  728. package/assets/material/folder-vercel.svg +0 -1
  729. package/assets/material/folder-verdaccio-open.svg +0 -1
  730. package/assets/material/folder-verdaccio.svg +0 -1
  731. package/assets/material/folder-video-open.svg +0 -1
  732. package/assets/material/folder-video.svg +0 -1
  733. package/assets/material/folder-views-open.svg +0 -1
  734. package/assets/material/folder-views.svg +0 -1
  735. package/assets/material/folder-vm-open.svg +0 -1
  736. package/assets/material/folder-vm.svg +0 -1
  737. package/assets/material/folder-vscode-open.svg +0 -1
  738. package/assets/material/folder-vscode.svg +0 -1
  739. package/assets/material/folder-vue-directives-open.svg +0 -1
  740. package/assets/material/folder-vue-directives.svg +0 -1
  741. package/assets/material/folder-vue-open.svg +0 -1
  742. package/assets/material/folder-vue.svg +0 -1
  743. package/assets/material/folder-vuepress-open.svg +0 -1
  744. package/assets/material/folder-vuepress.svg +0 -1
  745. package/assets/material/folder-vuex-store-open.svg +0 -1
  746. package/assets/material/folder-vuex-store.svg +0 -1
  747. package/assets/material/folder-wakatime-open.svg +0 -1
  748. package/assets/material/folder-wakatime.svg +0 -1
  749. package/assets/material/folder-webpack-open.svg +0 -1
  750. package/assets/material/folder-webpack.svg +0 -1
  751. package/assets/material/folder-wordpress-open.svg +0 -1
  752. package/assets/material/folder-wordpress.svg +0 -1
  753. package/assets/material/folder-yarn-open.svg +0 -1
  754. package/assets/material/folder-yarn.svg +0 -1
  755. package/assets/material/folder.svg +0 -1
  756. package/assets/material/font.svg +0 -1
  757. package/assets/material/forth.svg +0 -1
  758. package/assets/material/fortran.svg +0 -1
  759. package/assets/material/foxpro.svg +0 -1
  760. package/assets/material/fsharp.svg +0 -1
  761. package/assets/material/fusebox.svg +0 -1
  762. package/assets/material/gamemaker.svg +0 -4
  763. package/assets/material/gatsby.svg +0 -1
  764. package/assets/material/gcp.svg +0 -1
  765. package/assets/material/gemfile.svg +0 -1
  766. package/assets/material/gemini.svg +0 -1
  767. package/assets/material/git.svg +0 -1
  768. package/assets/material/gitlab.svg +0 -1
  769. package/assets/material/gitpod.svg +0 -1
  770. package/assets/material/gleam.svg +0 -1
  771. package/assets/material/go-mod.svg +0 -1
  772. package/assets/material/go.svg +0 -1
  773. package/assets/material/go_gopher.svg +0 -1
  774. package/assets/material/godot-assets.svg +0 -7
  775. package/assets/material/godot.svg +0 -7
  776. package/assets/material/gradle.svg +0 -1
  777. package/assets/material/grain.svg +0 -1
  778. package/assets/material/graphcool.svg +0 -1
  779. package/assets/material/graphql.svg +0 -1
  780. package/assets/material/gridsome.svg +0 -1
  781. package/assets/material/groovy.svg +0 -1
  782. package/assets/material/grunt.svg +0 -1
  783. package/assets/material/gulp.svg +0 -1
  784. package/assets/material/h.svg +0 -1
  785. package/assets/material/hack.svg +0 -1
  786. package/assets/material/haml.svg +0 -1
  787. package/assets/material/handlebars.svg +0 -1
  788. package/assets/material/hardhat.svg +0 -1
  789. package/assets/material/haskell.svg +0 -1
  790. package/assets/material/haxe.svg +0 -1
  791. package/assets/material/hcl.svg +0 -1
  792. package/assets/material/hcl_light.svg +0 -1
  793. package/assets/material/helm.svg +0 -1
  794. package/assets/material/heroku.svg +0 -1
  795. package/assets/material/hex.svg +0 -1
  796. package/assets/material/horusec.svg +0 -1
  797. package/assets/material/hpp.svg +0 -1
  798. package/assets/material/html.svg +0 -1
  799. package/assets/material/http.svg +0 -1
  800. package/assets/material/husky.svg +0 -1
  801. package/assets/material/i18n.svg +0 -1
  802. package/assets/material/idris.svg +0 -1
  803. package/assets/material/ifanr-cloud.svg +0 -10
  804. package/assets/material/image.svg +0 -1
  805. package/assets/material/imba.svg +0 -1
  806. package/assets/material/ionic.svg +0 -1
  807. package/assets/material/istanbul.svg +0 -1
  808. package/assets/material/jar.svg +0 -1
  809. package/assets/material/java.svg +0 -1
  810. package/assets/material/javaclass.svg +0 -1
  811. package/assets/material/javascript-map.svg +0 -1
  812. package/assets/material/javascript.svg +0 -1
  813. package/assets/material/jenkins.svg +0 -1
  814. package/assets/material/jest.svg +0 -1
  815. package/assets/material/jinja.svg +0 -1
  816. package/assets/material/jinja_light.svg +0 -1
  817. package/assets/material/jsconfig.svg +0 -1
  818. package/assets/material/json.svg +0 -1
  819. package/assets/material/julia.svg +0 -1
  820. package/assets/material/jupyter.svg +0 -1
  821. package/assets/material/karma.svg +0 -1
  822. package/assets/material/key.svg +0 -1
  823. package/assets/material/kivy.svg +0 -1
  824. package/assets/material/kl.svg +0 -1
  825. package/assets/material/kotlin.svg +0 -1
  826. package/assets/material/kusto.svg +0 -1
  827. package/assets/material/laravel.svg +0 -1
  828. package/assets/material/lerna.svg +0 -1
  829. package/assets/material/less.svg +0 -1
  830. package/assets/material/lib.svg +0 -1
  831. package/assets/material/lighthouse.svg +0 -1
  832. package/assets/material/lilypond.svg +0 -1
  833. package/assets/material/liquid.svg +0 -1
  834. package/assets/material/lisp.svg +0 -1
  835. package/assets/material/livescript.svg +0 -1
  836. package/assets/material/lock.svg +0 -1
  837. package/assets/material/log.svg +0 -1
  838. package/assets/material/lolcode.svg +0 -1
  839. package/assets/material/lua.svg +0 -1
  840. package/assets/material/makefile.svg +0 -1
  841. package/assets/material/markdown.svg +0 -1
  842. package/assets/material/markojs.svg +0 -1
  843. package/assets/material/mathematica.svg +0 -1
  844. package/assets/material/matlab.svg +0 -1
  845. package/assets/material/maven.svg +0 -1
  846. package/assets/material/mdsvex.svg +0 -1
  847. package/assets/material/mdx.svg +0 -1
  848. package/assets/material/mercurial.svg +0 -6
  849. package/assets/material/merlin.svg +0 -1
  850. package/assets/material/mermaid.svg +0 -4
  851. package/assets/material/meson.svg +0 -1
  852. package/assets/material/minecraft.svg +0 -1
  853. package/assets/material/mint.svg +0 -1
  854. package/assets/material/mjml.svg +0 -1
  855. package/assets/material/mocha.svg +0 -1
  856. package/assets/material/modernizr.svg +0 -1
  857. package/assets/material/moonscript.svg +0 -1
  858. package/assets/material/mxml.svg +0 -1
  859. package/assets/material/nano-staged.svg +0 -1
  860. package/assets/material/nano-staged_light.svg +0 -1
  861. package/assets/material/ndst.svg +0 -1
  862. package/assets/material/nest-controller.svg +0 -1
  863. package/assets/material/nest-decorator.svg +0 -1
  864. package/assets/material/nest-filter.svg +0 -1
  865. package/assets/material/nest-gateway.svg +0 -1
  866. package/assets/material/nest-guard.svg +0 -1
  867. package/assets/material/nest-middleware.svg +0 -1
  868. package/assets/material/nest-module.svg +0 -1
  869. package/assets/material/nest-pipe.svg +0 -1
  870. package/assets/material/nest-resolver.svg +0 -1
  871. package/assets/material/nest-service.svg +0 -1
  872. package/assets/material/nest.svg +0 -1
  873. package/assets/material/netlify.svg +0 -7
  874. package/assets/material/netlify_light.svg +0 -7
  875. package/assets/material/next.svg +0 -1
  876. package/assets/material/next_light.svg +0 -1
  877. package/assets/material/nginx.svg +0 -1
  878. package/assets/material/ngrx-actions.svg +0 -1
  879. package/assets/material/ngrx-effects.svg +0 -1
  880. package/assets/material/ngrx-entity.svg +0 -1
  881. package/assets/material/ngrx-reducer.svg +0 -1
  882. package/assets/material/ngrx-selectors.svg +0 -1
  883. package/assets/material/ngrx-state.svg +0 -1
  884. package/assets/material/nim.svg +0 -1
  885. package/assets/material/nix.svg +0 -1
  886. package/assets/material/nodejs.svg +0 -1
  887. package/assets/material/nodejs_alt.svg +0 -1
  888. package/assets/material/nodemon.svg +0 -1
  889. package/assets/material/npm.svg +0 -1
  890. package/assets/material/nrwl.svg +0 -1
  891. package/assets/material/nuget.svg +0 -1
  892. package/assets/material/nunjucks.svg +0 -1
  893. package/assets/material/nuxt.svg +0 -1
  894. package/assets/material/objective-c.svg +0 -4
  895. package/assets/material/objective-cpp.svg +0 -1
  896. package/assets/material/ocaml.svg +0 -1
  897. package/assets/material/odin.svg +0 -1
  898. package/assets/material/opa.svg +0 -1
  899. package/assets/material/opam.svg +0 -1
  900. package/assets/material/otne.svg +0 -1
  901. package/assets/material/parcel.svg +0 -1
  902. package/assets/material/pascal.svg +0 -6
  903. package/assets/material/pawn.svg +0 -1
  904. package/assets/material/pdf.svg +0 -1
  905. package/assets/material/percy.svg +0 -1
  906. package/assets/material/perl.svg +0 -1
  907. package/assets/material/php-cs-fixer.svg +0 -1
  908. package/assets/material/php.svg +0 -1
  909. package/assets/material/php_elephant.svg +0 -1
  910. package/assets/material/php_elephant_pink.svg +0 -1
  911. package/assets/material/phpunit.svg +0 -1
  912. package/assets/material/pinejs.svg +0 -1
  913. package/assets/material/pipeline.svg +0 -1
  914. package/assets/material/plastic.svg +0 -7
  915. package/assets/material/playwright.svg +0 -1
  916. package/assets/material/plop.svg +0 -1
  917. package/assets/material/pnpm.svg +0 -1
  918. package/assets/material/pnpm_light.svg +0 -1
  919. package/assets/material/poetry.svg +0 -1
  920. package/assets/material/postcss.svg +0 -1
  921. package/assets/material/posthtml.svg +0 -1
  922. package/assets/material/powerpoint.svg +0 -1
  923. package/assets/material/powershell.svg +0 -1
  924. package/assets/material/prettier.svg +0 -1
  925. package/assets/material/prisma.svg +0 -1
  926. package/assets/material/processing.svg +0 -1
  927. package/assets/material/prolog.svg +0 -1
  928. package/assets/material/proto.svg +0 -1
  929. package/assets/material/protractor.svg +0 -1
  930. package/assets/material/pug.svg +0 -1
  931. package/assets/material/puppet.svg +0 -1
  932. package/assets/material/purescript.svg +0 -1
  933. package/assets/material/python-misc.svg +0 -1
  934. package/assets/material/python.svg +0 -1
  935. package/assets/material/qsharp.svg +0 -1
  936. package/assets/material/quasar.svg +0 -1
  937. package/assets/material/qwik.svg +0 -2
  938. package/assets/material/r.svg +0 -1
  939. package/assets/material/racket.svg +0 -1
  940. package/assets/material/raml.svg +0 -1
  941. package/assets/material/razor.svg +0 -1
  942. package/assets/material/rc.svg +0 -2
  943. package/assets/material/react.svg +0 -1
  944. package/assets/material/react_ts.svg +0 -1
  945. package/assets/material/readme.svg +0 -1
  946. package/assets/material/reason.svg +0 -1
  947. package/assets/material/red.svg +0 -1
  948. package/assets/material/redux-action.svg +0 -1
  949. package/assets/material/redux-reducer.svg +0 -1
  950. package/assets/material/redux-selector.svg +0 -1
  951. package/assets/material/redux-store.svg +0 -1
  952. package/assets/material/remix.svg +0 -1
  953. package/assets/material/remix_light.svg +0 -1
  954. package/assets/material/renovate.svg +0 -1
  955. package/assets/material/replit.svg +0 -1
  956. package/assets/material/rescript-interface.svg +0 -1
  957. package/assets/material/rescript.svg +0 -1
  958. package/assets/material/restql.svg +0 -1
  959. package/assets/material/riot.svg +0 -1
  960. package/assets/material/roadmap.svg +0 -1
  961. package/assets/material/robot.svg +0 -1
  962. package/assets/material/robots.svg +0 -1
  963. package/assets/material/rollup.svg +0 -1
  964. package/assets/material/rome.svg +0 -1
  965. package/assets/material/routing.svg +0 -1
  966. package/assets/material/rubocop.svg +0 -1
  967. package/assets/material/rubocop_light.svg +0 -1
  968. package/assets/material/ruby.svg +0 -1
  969. package/assets/material/rust.svg +0 -1
  970. package/assets/material/salesforce.svg +0 -1
  971. package/assets/material/san.svg +0 -1
  972. package/assets/material/sas.svg +0 -1
  973. package/assets/material/sass.svg +0 -1
  974. package/assets/material/sbt.svg +0 -1
  975. package/assets/material/scala.svg +0 -1
  976. package/assets/material/scheme.svg +0 -1
  977. package/assets/material/search.svg +0 -1
  978. package/assets/material/semantic-release.svg +0 -1
  979. package/assets/material/semantic-release_light.svg +0 -1
  980. package/assets/material/sentry.svg +0 -1
  981. package/assets/material/sequelize.svg +0 -1
  982. package/assets/material/serverless.svg +0 -1
  983. package/assets/material/settings.svg +0 -1
  984. package/assets/material/shader.svg +0 -1
  985. package/assets/material/shaderlab.svg +0 -1
  986. package/assets/material/silverstripe.svg +0 -1
  987. package/assets/material/siyuan.svg +0 -1
  988. package/assets/material/sketch.svg +0 -1
  989. package/assets/material/slim.svg +0 -1
  990. package/assets/material/slug.svg +0 -1
  991. package/assets/material/smarty.svg +0 -1
  992. package/assets/material/sml.svg +0 -1
  993. package/assets/material/snowpack.svg +0 -1
  994. package/assets/material/snowpack_light.svg +0 -1
  995. package/assets/material/snyk.svg +0 -1
  996. package/assets/material/solidity.svg +0 -1
  997. package/assets/material/sonarcloud.svg +0 -4
  998. package/assets/material/steadybit.svg +0 -1
  999. package/assets/material/stencil.svg +0 -1
  1000. package/assets/material/stitches.svg +0 -1
  1001. package/assets/material/stitches_light.svg +0 -1
  1002. package/assets/material/storybook.svg +0 -1
  1003. package/assets/material/stryker.svg +0 -1
  1004. package/assets/material/stylable.svg +0 -10
  1005. package/assets/material/stylelint.svg +0 -1
  1006. package/assets/material/stylelint_light.svg +0 -1
  1007. package/assets/material/stylus.svg +0 -1
  1008. package/assets/material/sublime.svg +0 -1
  1009. package/assets/material/supabase.svg +0 -4
  1010. package/assets/material/svelte.svg +0 -1
  1011. package/assets/material/svg.svg +0 -1
  1012. package/assets/material/svgo.svg +0 -1
  1013. package/assets/material/svgr.svg +0 -1
  1014. package/assets/material/swc.svg +0 -1
  1015. package/assets/material/swift.svg +0 -1
  1016. package/assets/material/table.svg +0 -1
  1017. package/assets/material/tailwindcss.svg +0 -1
  1018. package/assets/material/tauri.svg +0 -1
  1019. package/assets/material/tcl.svg +0 -1
  1020. package/assets/material/teal.svg +0 -1
  1021. package/assets/material/template.svg +0 -1
  1022. package/assets/material/terraform.svg +0 -1
  1023. package/assets/material/test-js.svg +0 -1
  1024. package/assets/material/test-jsx.svg +0 -1
  1025. package/assets/material/test-ts.svg +0 -1
  1026. package/assets/material/tex.svg +0 -1
  1027. package/assets/material/textlint.svg +0 -1
  1028. package/assets/material/tilt.svg +0 -1
  1029. package/assets/material/tldraw.svg +0 -4
  1030. package/assets/material/tldraw_light.svg +0 -4
  1031. package/assets/material/tobi.svg +0 -1
  1032. package/assets/material/tobimake.svg +0 -1
  1033. package/assets/material/todo.svg +0 -1
  1034. package/assets/material/travis.svg +0 -1
  1035. package/assets/material/tree.svg +0 -1
  1036. package/assets/material/tsconfig.svg +0 -1
  1037. package/assets/material/tune.svg +0 -1
  1038. package/assets/material/turborepo.svg +0 -1
  1039. package/assets/material/turborepo_light.svg +0 -1
  1040. package/assets/material/twig.svg +0 -1
  1041. package/assets/material/twine.svg +0 -1
  1042. package/assets/material/typescript-def.svg +0 -1
  1043. package/assets/material/typescript.svg +0 -1
  1044. package/assets/material/typst.svg +0 -2
  1045. package/assets/material/uml.svg +0 -1
  1046. package/assets/material/uml_light.svg +0 -1
  1047. package/assets/material/url.svg +0 -1
  1048. package/assets/material/vagrant.svg +0 -1
  1049. package/assets/material/vala.svg +0 -1
  1050. package/assets/material/velocity.svg +0 -1
  1051. package/assets/material/vercel.svg +0 -1
  1052. package/assets/material/vercel_light.svg +0 -1
  1053. package/assets/material/verdaccio.svg +0 -1
  1054. package/assets/material/verilog.svg +0 -1
  1055. package/assets/material/vfl.svg +0 -1
  1056. package/assets/material/video.svg +0 -1
  1057. package/assets/material/vim.svg +0 -1
  1058. package/assets/material/virtual.svg +0 -1
  1059. package/assets/material/visualstudio.svg +0 -1
  1060. package/assets/material/vite.svg +0 -1
  1061. package/assets/material/vitest.svg +0 -6
  1062. package/assets/material/vlang.svg +0 -1
  1063. package/assets/material/vscode.svg +0 -1
  1064. package/assets/material/vue-config.svg +0 -1
  1065. package/assets/material/vue.svg +0 -1
  1066. package/assets/material/vuex-store.svg +0 -1
  1067. package/assets/material/wakatime.svg +0 -1
  1068. package/assets/material/wakatime_light.svg +0 -1
  1069. package/assets/material/wallaby.svg +0 -1
  1070. package/assets/material/watchman.svg +0 -1
  1071. package/assets/material/webassembly.svg +0 -1
  1072. package/assets/material/webhint.svg +0 -1
  1073. package/assets/material/webpack.svg +0 -1
  1074. package/assets/material/wepy.svg +0 -1
  1075. package/assets/material/windicss.svg +0 -1
  1076. package/assets/material/wolframlanguage.svg +0 -1
  1077. package/assets/material/word.svg +0 -1
  1078. package/assets/material/xaml.svg +0 -1
  1079. package/assets/material/xml.svg +0 -1
  1080. package/assets/material/yaml.svg +0 -1
  1081. package/assets/material/yang.svg +0 -1
  1082. package/assets/material/yarn.svg +0 -1
  1083. package/assets/material/zig.svg +0 -1
  1084. package/assets/material/zip.svg +0 -1
  1085. package/assets/pop/LICENSE +0 -2
  1086. package/assets/pop/binary.svg +0 -1
  1087. package/assets/pop/compressed.svg +0 -1
  1088. package/assets/pop/database.svg +0 -1
  1089. package/assets/pop/exts/7z.svg +0 -1
  1090. package/assets/pop/exts/apk.svg +0 -1
  1091. package/assets/pop/exts/arc.svg +0 -1
  1092. package/assets/pop/exts/bz.svg +0 -1
  1093. package/assets/pop/exts/deb.svg +0 -1
  1094. package/assets/pop/exts/gz.svg +0 -1
  1095. package/assets/pop/exts/pdf.svg +0 -1
  1096. package/assets/pop/exts/rar.svg +0 -1
  1097. package/assets/pop/exts/rpm.svg +0 -1
  1098. package/assets/pop/exts/tar.svg +0 -1
  1099. package/assets/pop/exts/xar.svg +0 -1
  1100. package/assets/pop/exts/xz.svg +0 -1
  1101. package/assets/pop/exts/zip.svg +0 -1
  1102. package/assets/pop/folder-open.svg +0 -1
  1103. package/assets/pop/folder.svg +0 -1
  1104. package/assets/pop/generic.svg +0 -1
  1105. package/assets/pop/presentation.svg +0 -1
  1106. package/assets/pop/richtext.svg +0 -1
  1107. package/assets/pop/spreadsheet.svg +0 -1
  1108. package/assets/pop/text.svg +0 -1
  1109. package/esm2022/components/lazy-loader/lazy-loader.component.mjs +0 -383
  1110. package/esm2022/components/lazy-loader/lazy-loader.module.mjs +0 -33
  1111. package/esm2022/components/lazy-loader/lazy-loader.service.mjs +0 -217
  1112. package/esm2022/components/lazy-loader/types.mjs +0 -26
  1113. package/esm2022/components/menu/menu.component.mjs +0 -433
  1114. package/esm2022/components/parallax-card/parallax-card.component.mjs +0 -138
  1115. package/esm2022/components/tooltip/tooltip.component.mjs +0 -205
  1116. package/esm2022/components/types.mjs +0 -3
  1117. package/esm2022/directives/image-cache.directive.mjs +0 -143
  1118. package/esm2022/directives/menu.directive.mjs +0 -159
  1119. package/esm2022/directives/tooltip.directive.mjs +0 -154
  1120. package/esm2022/directives/utils.mjs +0 -120
  1121. package/esm2022/pipes/html-bypass.pipe.mjs +0 -27
  1122. package/esm2022/pipes/resource-bypass.pipe.mjs +0 -27
  1123. package/esm2022/pipes/script-bypass.pipe.mjs +0 -27
  1124. package/esm2022/pipes/style-bypass.pipe.mjs +0 -27
  1125. package/esm2022/pipes/url-bypass.pipe.mjs +0 -27
  1126. package/esm2022/public-api.mjs +0 -46
  1127. package/esm2022/services/dependency.service.mjs +0 -55
  1128. package/esm2022/services/dialog.service.mjs +0 -69
  1129. package/esm2022/services/fetch.service.mjs +0 -74
  1130. package/esm2022/services/file.service.mjs +0 -42
  1131. package/esm2022/services/keyboard.service.mjs +0 -128
  1132. package/esm2022/services/navigation.service.mjs +0 -52
  1133. package/esm2022/services/theme.service.mjs +0 -64
  1134. package/esm2022/types/menu.mjs +0 -2
  1135. package/esm2022/types/popup.mjs +0 -2
  1136. package/esm2022/types/tooltip.mjs +0 -2
  1137. package/esm2022/utils/index.mjs +0 -205
  1138. package/utils/index.d.ts +0 -128
  1139. /package/{components → core/components}/lazy-loader/lazy-loader.component.d.ts +0 -0
  1140. /package/{components → core/components}/lazy-loader/lazy-loader.module.d.ts +0 -0
  1141. /package/{components → core/components}/lazy-loader/lazy-loader.service.d.ts +0 -0
  1142. /package/{components → core/components}/lazy-loader/types.d.ts +0 -0
  1143. /package/{components → core/components}/parallax-card/parallax-card.component.d.ts +0 -0
  1144. /package/{directives → core/directives}/image-cache.directive.d.ts +0 -0
  1145. /package/{directives → core/directives}/utils.d.ts +0 -0
  1146. /package/{pipes → core/pipes}/html-bypass.pipe.d.ts +0 -0
  1147. /package/{pipes → core/pipes}/resource-bypass.pipe.d.ts +0 -0
  1148. /package/{pipes → core/pipes}/script-bypass.pipe.d.ts +0 -0
  1149. /package/{pipes → core/pipes}/style-bypass.pipe.d.ts +0 -0
  1150. /package/{pipes → core/pipes}/url-bypass.pipe.d.ts +0 -0
  1151. /package/{services → core/services}/dependency.service.d.ts +0 -0
  1152. /package/{services → core/services}/dialog.service.d.ts +0 -0
  1153. /package/{services → core/services}/fetch.service.d.ts +0 -0
  1154. /package/{services → core/services}/file.service.d.ts +0 -0
  1155. /package/{services → core/services}/keyboard.service.d.ts +0 -0
  1156. /package/{services → core/services}/theme.service.d.ts +0 -0
  1157. /package/{types → core/types}/popup.d.ts +0 -0
@@ -0,0 +1,257 @@
1
+ import { ScrollingModule } from '@angular/cdk/scrolling';
2
+ import { Component, HostListener, Inject, Input, ViewChild, isDevMode } from '@angular/core';
3
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+ import { MatInputModule } from '@angular/material/input';
6
+ import { NgScrollbar, NgScrollbarModule } from 'ngx-scrollbar';
7
+ import { BreadcrumbComponent } from './breadcrumb/breadcrumb.component';
8
+ import { ShortcutComponent } from './shortcut/shortcut.component';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "./command-palette.service";
11
+ import * as i2 from "@angular/material/dialog";
12
+ import * as i3 from "@angular/material/icon";
13
+ import * as i4 from "@angular/material/input";
14
+ import * as i5 from "@angular/material/form-field";
15
+ import * as i6 from "@angular/cdk/scrolling";
16
+ import * as i7 from "ngx-scrollbar";
17
+ export class CommandPaletteComponent {
18
+ get el() { return this.elementRef.nativeElement; }
19
+ constructor(commandPalette, dialog, elementRef, changeDetector, data) {
20
+ this.commandPalette = commandPalette;
21
+ this.dialog = dialog;
22
+ this.elementRef = elementRef;
23
+ this.changeDetector = changeDetector;
24
+ this.MAT_ICON_REGEX = /[:\/\.]/;
25
+ this.queryString = "";
26
+ this.activeIndex = 0;
27
+ this.rowHeight = 29;
28
+ this.padding = 6;
29
+ this.commands = [];
30
+ this.filteredCommands = [];
31
+ this.breadcrumbs = [];
32
+ this.contextElement = this.contextElement ?? data.contextElement;
33
+ }
34
+ ngOnInit() {
35
+ this.commands = this.commandPalette.getRegisteredCommands(this.contextElement);
36
+ this.setCommandList(this.commands);
37
+ // TODO: custom name
38
+ this.breadcrumbs.push({
39
+ action: { label: "/" },
40
+ commands: this.commands,
41
+ destroying: false,
42
+ selectedIndex: 0
43
+ });
44
+ }
45
+ onKeyDown(evt) {
46
+ switch (evt.key) {
47
+ case "Enter": {
48
+ // Fire the first command
49
+ if (this.filteredCommands.length > 0)
50
+ this.executeCommand(this.filteredCommands[this.activeIndex]);
51
+ evt.stopPropagation();
52
+ return;
53
+ }
54
+ case "ArrowUp": {
55
+ this.activeIndex = Math.max(this.activeIndex - 1, 0);
56
+ evt.stopPropagation();
57
+ this.focusRow();
58
+ return;
59
+ }
60
+ case "ArrowDown": {
61
+ this.activeIndex = Math.min(this.filteredCommands.length - 1, this.activeIndex + 1);
62
+ evt.stopPropagation();
63
+ this.focusRow();
64
+ return;
65
+ }
66
+ case "PageUp": {
67
+ // Fire the first command
68
+ this.activeIndex = Math.max(this.activeIndex - 12, 0);
69
+ evt.stopPropagation();
70
+ this.focusRow();
71
+ return;
72
+ }
73
+ case "PageDown": {
74
+ this.activeIndex = Math.min(this.filteredCommands.length - 1, this.activeIndex + 12);
75
+ evt.stopPropagation();
76
+ this.focusRow();
77
+ return;
78
+ }
79
+ case "Escape": {
80
+ this.dialog.close();
81
+ evt.stopPropagation();
82
+ return;
83
+ }
84
+ case "Backspace": {
85
+ // If we have no characters and we're hitting backspace, go back
86
+ // to the previous menu in the breadcrumb
87
+ if (this.queryString.length == 0 && this.breadcrumbs.length > 1) {
88
+ const layer = this.breadcrumbs.at(-1);
89
+ layer.destroying = true;
90
+ setTimeout(() => {
91
+ this.setCommandList(this.breadcrumbs.at(-2).commands);
92
+ this.breadcrumbs.pop();
93
+ this.activeIndex = layer.selectedIndex;
94
+ }, 190);
95
+ return;
96
+ }
97
+ else {
98
+ break;
99
+ }
100
+ }
101
+ case "Delete": {
102
+ }
103
+ }
104
+ this.activeIndex = 0;
105
+ this.commands.forEach(c => c['_renderedLabel'] = '');
106
+ // Check in the next tick to get the input's
107
+ // value so that it's updated
108
+ setTimeout(() => {
109
+ this.queryString = evt.target.value;
110
+ this.filterResults();
111
+ });
112
+ }
113
+ async filterResults() {
114
+ // Whitespace doesn't count.
115
+ if (this.queryString.trim().length == 0) {
116
+ this.filteredCommands = this.commands;
117
+ return;
118
+ }
119
+ const queryChars = this.queryString
120
+ .toLowerCase()
121
+ .split('');
122
+ const matchedCommands = [];
123
+ for (const command of this.commands) {
124
+ const { label } = command;
125
+ // Check the label
126
+ if (command.label) {
127
+ const commandChars = label
128
+ .toLowerCase()
129
+ .split('');
130
+ let renderedLabel = '';
131
+ let lastIndex = 0;
132
+ let isMatch = true;
133
+ for (const char of queryChars) {
134
+ const index = commandChars.indexOf(char, lastIndex);
135
+ if (index == -1) {
136
+ isMatch = false;
137
+ break;
138
+ }
139
+ else {
140
+ renderedLabel += label.slice(lastIndex, index) + `<b>${label.slice(index, index + 1)}</b>`;
141
+ lastIndex = index + 1;
142
+ }
143
+ }
144
+ renderedLabel += label.slice(lastIndex);
145
+ if (isMatch) {
146
+ command['_renderedLabel'] = renderedLabel;
147
+ matchedCommands.push(command);
148
+ }
149
+ }
150
+ // Check the hint
151
+ if (command.hint) {
152
+ const commandChars = label
153
+ .toLowerCase()
154
+ .split('');
155
+ let renderedHint = '';
156
+ let lastIndex = 0;
157
+ let isMatch = true;
158
+ for (const char of queryChars) {
159
+ const index = commandChars.indexOf(char, lastIndex);
160
+ if (index == -1) {
161
+ isMatch = false;
162
+ break;
163
+ }
164
+ else {
165
+ renderedHint += label.slice(lastIndex, index) + `<b>${label.slice(index, index + 1)}</b>`;
166
+ lastIndex = index + 1;
167
+ }
168
+ }
169
+ renderedHint += label.slice(lastIndex);
170
+ if (isMatch) {
171
+ command['_renderedHint'] = renderedHint;
172
+ matchedCommands.push(command);
173
+ }
174
+ }
175
+ }
176
+ this.filteredCommands = matchedCommands;
177
+ }
178
+ setCommandList(commands) {
179
+ this.commands = commands
180
+ .filter(c => c.visibleInList != false);
181
+ this.filteredCommands = this.commands;
182
+ this.queryString = '';
183
+ this.activeIndex = 0;
184
+ // Reset the filter labels
185
+ this.commands.forEach(command => command['_renderedLabel'] = '');
186
+ }
187
+ focusRow() {
188
+ const top = this.activeIndex * this.rowHeight;
189
+ const height = this.rowHeight;
190
+ const viewTop = this.scrollbar?.viewport?.scrollTop;
191
+ const viewHeight = this.scrollbar?.viewport?.clientHeight;
192
+ const viewBottom = viewTop + viewHeight;
193
+ if (top < viewTop) {
194
+ this.scrollbar.viewport.nativeElement.scrollTo({ top: top + this.padding });
195
+ }
196
+ else if ((top + height) > viewBottom) {
197
+ this.scrollbar.viewport.nativeElement.scrollTo({ top: ((top + this.rowHeight) - viewHeight) + this.padding });
198
+ }
199
+ // Immediately check for changes to update template
200
+ this.changeDetector.detectChanges();
201
+ }
202
+ executeCommand(command) {
203
+ // Open a sub menu of items
204
+ if (Array.isArray(command.subMenu)) {
205
+ this.breadcrumbs.push({
206
+ action: command,
207
+ commands: command.subMenu,
208
+ selectedIndex: this.activeIndex,
209
+ destroying: false
210
+ });
211
+ this.setCommandList(command.subMenu);
212
+ }
213
+ // Directly invoke the action and kill the dialog
214
+ else {
215
+ this.commandPalette.invokeAction(command);
216
+ this.dialog.close();
217
+ }
218
+ }
219
+ onBlur() {
220
+ if (!isDevMode()) {
221
+ this.dialog.close();
222
+ }
223
+ }
224
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommandPaletteComponent, deps: [{ token: i1.CommandPaletteService }, { token: i2.MatDialogRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CommandPaletteComponent, isStandalone: true, selector: "ngx-command-palette", inputs: { contextElement: "contextElement" }, host: { listeners: { "click": "textInput.nativeElement.focus()", "window:blur": "onBlur()", "window:resize": "onBlur()" } }, viewQueries: [{ propertyName: "scrollbar", first: true, predicate: NgScrollbar, descendants: true }, { propertyName: "textInput", first: true, predicate: ["textinput"], descendants: true }], ngImport: i0, template: "<mat-form-field style=\"width: 100%; padding: 8px 8px 0 8px\">\n <ngx-commandpalette-breadcrumb\n [breadcrumbs]=\"breadcrumbs\"\n />\n <input\n #textinput\n matInput\n type=\"text\"\n [value]=\"queryString\"\n (keydown)=\"onKeyDown($event)\"\n >\n</mat-form-field>\n\n@if (filteredCommands.length == 0) {\n <div class=\"commands\">\n <div class=\"command selected\">\n <div class=\"label\">No matching results.</div>\n </div>\n </div>\n}\n@else {\n <div\n class=\"commands\"\n [style.flex]=\"(filteredCommands.length * rowHeight) + 'px'\"\n [class.shadow]=\"scrollbar?.viewport?.scrollTop > 2\"\n >\n <ng-scrollbar #scrollbar>\n <cdk-virtual-scroll-viewport [itemSize]=\"rowHeight\" scrollViewport [minBufferPx]=\"150\">\n <div\n *cdkVirtualFor=\"let command of filteredCommands; let index = index\"\n class=\"command\"\n [style.height]=\"rowHeight + 'px'\"\n [class.selected]=\"index==activeIndex\"\n [class.has-icon]=\"command.icon\"\n [attr.index]=\"index\"\n (click)=\"executeCommand(command)\"\n >\n @if (command.icon) {\n <div class=\"icon\">\n @if (!MAT_ICON_REGEX.test(command.icon)) {\n <mat-icon [fontIcon]=\"command.icon\"></mat-icon>\n }\n @else {\n <img [src]=\"command.icon\"/>\n }\n </div>\n }\n\n <div\n class=\"label\"\n [innerHTML]=\"command['_renderedLabel'] || command.label || command.description\"\n ></div>\n\n @if (command['_renderedHint'] || command.hint) {\n <div\n class=\"hint\"\n [innerHTML]=\"command['_renderedHint'] || command.hint\"\n ></div>\n }\n <div style=\"flex: 1\"></div>\n\n <div>\n @for (shortcut of (command.shortcutKey?.find ? command.shortcutKey : [command.shortcutKey]); track shortcut) {\n @if (shortcut) {\n <ngx-commandpalette-shortcut [shortcut]=\"shortcut\"/>\n }\n }\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n </div>\n}\n\n", styles: [":host{display:flex;flex-direction:column;width:860px;max-height:460px;border:1px solid #484848;border-radius:6px;background-color:#222;-webkit-user-select:none;user-select:none;overflow:hidden;--text-color: #ccc;--transition: .25s ease}.commands{max-height:100%;overflow:hidden;position:relative;padding:0 6px}.commands .command{display:flex;padding-left:16px;padding-right:32px;align-items:center;border-radius:3px;justify-content:space-between;color:var(--text-color);font-size:15.5px;background-color:#0000}.commands .command:hover{background-color:#2a2d2e}.commands .command.selected{background-color:#04395e}.commands .command.has-icon{padding-left:8px}.commands .command .label ::ng-deep b{color:#2196f3}.commands .command .icon{width:38px;height:100%;display:flex;align-items:center;justify-content:center}.commands .command img{max-height:100%;padding:4px}.commands .command .hint{margin-left:12px;opacity:.75}.commands.shadow:after{box-shadow:#000 0 6px 6px -6px inset}.commands:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:6px;box-shadow:#0000 0 6px 6px -6px inset;transition:box-shadow .3s ease}ng-scrollbar.ng-scrollbar{--scrollbar-padding: 0px;--scrollbar-size: 14px;--scrollbar-border-radius: 0;--scrollbar-thumb-color: #4440;--scrollbar-thumb-transition: height ease-out .15s, width ease-out .15s, background-color ease 1.2s;animation:fadeScrollbar 1.2s ease}ng-scrollbar.ng-scrollbar:hover{--scrollbar-thumb-color: #444f}@keyframes fadeScrollbar{0%{--scrollbar-thumb-color: #444f}to{--scrollbar-thumb-color: #4440}}cdk-virtual-scroll-viewport{height:100%;padding-bottom:6px}:host ::ng-deep .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding:2px 0 4px}:host ::ng-deep .mat-mdc-form-field-infix{min-height:32px;display:flex}:host ::ng-deep .mat-mdc-text-field-wrapper{margin-bottom:8px;padding:0 12px}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .light app-command-palette{border:1px solid #e5e5e5;background-color:#f8f8f8;--text-color: #262626}::ng-deep .light app-command-palette .commands .command:hover{background-color:#f2f2f2}::ng-deep .light app-command-palette .commands .command.selected{background-color:#e8e8e8}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i6.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: NgScrollbarModule }, { kind: "component", type: i7.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i7.ScrollViewport, selector: "[scrollViewport]" }, { kind: "component", type: ShortcutComponent, selector: "ngx-commandpalette-shortcut", inputs: ["shortcut"] }, { kind: "component", type: BreadcrumbComponent, selector: "ngx-commandpalette-breadcrumb", inputs: ["breadcrumbs"] }] }); }
226
+ }
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommandPaletteComponent, decorators: [{
228
+ type: Component,
229
+ args: [{ selector: 'ngx-command-palette', host: {
230
+ "(click)": "textInput.nativeElement.focus()"
231
+ }, imports: [
232
+ MatIconModule,
233
+ MatInputModule,
234
+ ScrollingModule,
235
+ NgScrollbarModule,
236
+ ShortcutComponent,
237
+ BreadcrumbComponent
238
+ ], standalone: true, template: "<mat-form-field style=\"width: 100%; padding: 8px 8px 0 8px\">\n <ngx-commandpalette-breadcrumb\n [breadcrumbs]=\"breadcrumbs\"\n />\n <input\n #textinput\n matInput\n type=\"text\"\n [value]=\"queryString\"\n (keydown)=\"onKeyDown($event)\"\n >\n</mat-form-field>\n\n@if (filteredCommands.length == 0) {\n <div class=\"commands\">\n <div class=\"command selected\">\n <div class=\"label\">No matching results.</div>\n </div>\n </div>\n}\n@else {\n <div\n class=\"commands\"\n [style.flex]=\"(filteredCommands.length * rowHeight) + 'px'\"\n [class.shadow]=\"scrollbar?.viewport?.scrollTop > 2\"\n >\n <ng-scrollbar #scrollbar>\n <cdk-virtual-scroll-viewport [itemSize]=\"rowHeight\" scrollViewport [minBufferPx]=\"150\">\n <div\n *cdkVirtualFor=\"let command of filteredCommands; let index = index\"\n class=\"command\"\n [style.height]=\"rowHeight + 'px'\"\n [class.selected]=\"index==activeIndex\"\n [class.has-icon]=\"command.icon\"\n [attr.index]=\"index\"\n (click)=\"executeCommand(command)\"\n >\n @if (command.icon) {\n <div class=\"icon\">\n @if (!MAT_ICON_REGEX.test(command.icon)) {\n <mat-icon [fontIcon]=\"command.icon\"></mat-icon>\n }\n @else {\n <img [src]=\"command.icon\"/>\n }\n </div>\n }\n\n <div\n class=\"label\"\n [innerHTML]=\"command['_renderedLabel'] || command.label || command.description\"\n ></div>\n\n @if (command['_renderedHint'] || command.hint) {\n <div\n class=\"hint\"\n [innerHTML]=\"command['_renderedHint'] || command.hint\"\n ></div>\n }\n <div style=\"flex: 1\"></div>\n\n <div>\n @for (shortcut of (command.shortcutKey?.find ? command.shortcutKey : [command.shortcutKey]); track shortcut) {\n @if (shortcut) {\n <ngx-commandpalette-shortcut [shortcut]=\"shortcut\"/>\n }\n }\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n </div>\n}\n\n", styles: [":host{display:flex;flex-direction:column;width:860px;max-height:460px;border:1px solid #484848;border-radius:6px;background-color:#222;-webkit-user-select:none;user-select:none;overflow:hidden;--text-color: #ccc;--transition: .25s ease}.commands{max-height:100%;overflow:hidden;position:relative;padding:0 6px}.commands .command{display:flex;padding-left:16px;padding-right:32px;align-items:center;border-radius:3px;justify-content:space-between;color:var(--text-color);font-size:15.5px;background-color:#0000}.commands .command:hover{background-color:#2a2d2e}.commands .command.selected{background-color:#04395e}.commands .command.has-icon{padding-left:8px}.commands .command .label ::ng-deep b{color:#2196f3}.commands .command .icon{width:38px;height:100%;display:flex;align-items:center;justify-content:center}.commands .command img{max-height:100%;padding:4px}.commands .command .hint{margin-left:12px;opacity:.75}.commands.shadow:after{box-shadow:#000 0 6px 6px -6px inset}.commands:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:6px;box-shadow:#0000 0 6px 6px -6px inset;transition:box-shadow .3s ease}ng-scrollbar.ng-scrollbar{--scrollbar-padding: 0px;--scrollbar-size: 14px;--scrollbar-border-radius: 0;--scrollbar-thumb-color: #4440;--scrollbar-thumb-transition: height ease-out .15s, width ease-out .15s, background-color ease 1.2s;animation:fadeScrollbar 1.2s ease}ng-scrollbar.ng-scrollbar:hover{--scrollbar-thumb-color: #444f}@keyframes fadeScrollbar{0%{--scrollbar-thumb-color: #444f}to{--scrollbar-thumb-color: #4440}}cdk-virtual-scroll-viewport{height:100%;padding-bottom:6px}:host ::ng-deep .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding:2px 0 4px}:host ::ng-deep .mat-mdc-form-field-infix{min-height:32px;display:flex}:host ::ng-deep .mat-mdc-text-field-wrapper{margin-bottom:8px;padding:0 12px}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .light app-command-palette{border:1px solid #e5e5e5;background-color:#f8f8f8;--text-color: #262626}::ng-deep .light app-command-palette .commands .command:hover{background-color:#f2f2f2}::ng-deep .light app-command-palette .commands .command.selected{background-color:#e8e8e8}\n"] }]
239
+ }], ctorParameters: () => [{ type: i1.CommandPaletteService }, { type: i2.MatDialogRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
240
+ type: Inject,
241
+ args: [MAT_DIALOG_DATA]
242
+ }] }], propDecorators: { scrollbar: [{
243
+ type: ViewChild,
244
+ args: [NgScrollbar]
245
+ }], textInput: [{
246
+ type: ViewChild,
247
+ args: ['textinput']
248
+ }], contextElement: [{
249
+ type: Input
250
+ }], onBlur: [{
251
+ type: HostListener,
252
+ args: ["window:blur"]
253
+ }, {
254
+ type: HostListener,
255
+ args: ["window:resize"]
256
+ }] } });
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1wYWxldHRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9jb21tYW5kLXBhbGV0dGUvY29tbWFuZC1wYWxldHRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9jb21tYW5kLXBhbGV0dGUvY29tbWFuZC1wYWxldHRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFtQmxFLE1BQU0sT0FBTyx1QkFBdUI7SUFPaEMsSUFBSSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQTRCLENBQUMsQ0FBQyxDQUFDO0lBbUJqRSxZQUNxQixjQUFxQyxFQUNyQyxNQUF5QixFQUN6QixVQUFzQixFQUN0QixjQUFpQyxFQUN6QixJQUFTO1FBSmpCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFZ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LENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsaURBQWlEO2FBQzVDLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBSUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQzsrR0F2UVEsdUJBQXVCLDhJQStCcEIsZUFBZTttR0EvQmxCLHVCQUF1QixxU0FFckIsV0FBVyx5SUM3QjFCLDh1RkEwRUEsaXhFRHhEUSxhQUFhLG1MQUNiLGNBQWMscWpCQUNkLGVBQWUsMmpCQUNmLGlCQUFpQixpakJBQ2pCLGlCQUFpQiw4RkFDakIsbUJBQW1COzs0RkFJZCx1QkFBdUI7a0JBakJuQyxTQUFTOytCQUNJLHFCQUFxQixRQUd6Qjt3QkFDRixTQUFTLEVBQUUsaUNBQWlDO3FCQUMvQyxXQUNRO3dCQUNMLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQixtQkFBbUI7cUJBQ3RCLGNBQ1csSUFBSTs7MEJBaUNYLE1BQU07MkJBQUMsZUFBZTt5Q0E3QkgsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNFLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFYixjQUFjO3NCQUF0QixLQUFLO2dCQThQTixNQUFNO3NCQUZMLFlBQVk7dUJBQUMsYUFBYTs7c0JBQzFCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE5nU2Nyb2xsYmFyLCBOZ1Njcm9sbGJhck1vZHVsZSB9IGZyb20gJ25neC1zY3JvbGxiYXInO1xuaW1wb3J0IHsgQnJlYWRjcnVtYkNvbXBvbmVudCB9IGZyb20gJy4vYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tYW5kQWN0aW9uLCBDb21tYW5kUGFsZXR0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbW1hbmQtcGFsZXR0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNob3J0Y3V0Q29tcG9uZW50IH0gZnJvbSAnLi9zaG9ydGN1dC9zaG9ydGN1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1jb21tYW5kLXBhbGV0dGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21tYW5kLXBhbGV0dGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbW1hbmQtcGFsZXR0ZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgXCIoY2xpY2spXCI6IFwidGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKVwiXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgICAgIE5nU2Nyb2xsYmFyTW9kdWxlLFxuICAgICAgICBTaG9ydGN1dENvbXBvbmVudCxcbiAgICAgICAgQnJlYWRjcnVtYkNvbXBvbmVudFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb21tYW5kUGFsZXR0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBAVmlld0NoaWxkKE5nU2Nyb2xsYmFyKSBzY3JvbGxiYXI6IE5nU2Nyb2xsYmFyO1xuICAgIEBWaWV3Q2hpbGQoJ3RleHRpbnB1dCcpIHRleHRJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIEBJbnB1dCgpIGNvbnRleHRFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIGdldCBlbCgpIHsgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50OyB9XG5cbiAgICByZWFkb25seSBNQVRfSUNPTl9SRUdFWCA9IC9bOlxcL1xcLl0vO1xuXG4gICAgcXVlcnlTdHJpbmcgPSBcIlwiO1xuICAgIGFjdGl2ZUluZGV4ID0gMDtcbiAgICByZWFkb25seSByb3dIZWlnaHQgPSAyOTtcbiAgICByZWFkb25seSBwYWRkaW5nID0gNjtcblxuICAgIGNvbW1hbmRzOiBDb21tYW5kQWN0aW9uW10gPSBbXTtcbiAgICBmaWx0ZXJlZENvbW1hbmRzOiBDb21tYW5kQWN0aW9uW10gPSBbXTtcblxuICAgIGJyZWFkY3J1bWJzOiB7XG4gICAgICAgIGFjdGlvbjogQ29tbWFuZEFjdGlvbixcbiAgICAgICAgY29tbWFuZHM6IENvbW1hbmRBY3Rpb25bXSxcbiAgICAgICAgZGVzdHJveWluZzogYm9vbGVhbixcbiAgICAgICAgc2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICAgIH1bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFBhbGV0dGU6IENvbW1hbmRQYWxldHRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZ1JlZjxhbnk+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgZGF0YTogYW55XG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29udGV4dEVsZW1lbnQgPSB0aGlzLmNvbnRleHRFbGVtZW50ID8/IGRhdGEuY29udGV4dEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRQYWxldHRlLmdldFJlZ2lzdGVyZWRDb21tYW5kcyh0aGlzLmNvbnRleHRFbGVtZW50KTtcbiAgICAgICAgdGhpcy5zZXRDb21tYW5kTGlzdCh0aGlzLmNvbW1hbmRzKTtcblxuICAgICAgICAvLyBUT0RPOiBjdXN0b20gbmFtZVxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJzLnB1c2goe1xuICAgICAgICAgICAgYWN0aW9uOiB7IGxhYmVsOiBcIi9cIiB9LFxuICAgICAgICAgICAgY29tbWFuZHM6IHRoaXMuY29tbWFuZHMsXG4gICAgICAgICAgICBkZXN0cm95aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXg6IDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJFbnRlclwiOiB7XG4gICAgICAgICAgICAgICAgLy8gRmlyZSB0aGUgZmlyc3QgY29tbWFuZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmVkQ29tbWFuZHMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZCh0aGlzLmZpbHRlcmVkQ29tbWFuZHNbdGhpcy5hY3RpdmVJbmRleF0pO1xuXG4gICAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gTWF0aC5tYXgodGhpcy5hY3RpdmVJbmRleCAtIDEsIDApO1xuXG4gICAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNSb3coKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gTWF0aC5taW4odGhpcy5maWx0ZXJlZENvbW1hbmRzLmxlbmd0aCAtIDEsIHRoaXMuYWN0aXZlSW5kZXggKyAxKTtcblxuICAgICAgICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUm93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIlBhZ2VVcFwiOiB7XG4gICAgICAgICAgICAgICAgLy8gRmlyZSB0aGUgZmlyc3QgY29tbWFuZFxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBNYXRoLm1heCh0aGlzLmFjdGl2ZUluZGV4IC0gMTIsIDApO1xuXG4gICAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNSb3coKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiUGFnZURvd25cIjoge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBNYXRoLm1pbih0aGlzLmZpbHRlcmVkQ29tbWFuZHMubGVuZ3RoIC0gMSwgdGhpcy5hY3RpdmVJbmRleCArIDEyKTtcblxuICAgICAgICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUm93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIkVzY2FwZVwiOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIkJhY2tzcGFjZVwiOiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBjaGFyYWN0ZXJzIGFuZCB3ZSdyZSBoaXR0aW5nIGJhY2tzcGFjZSwgZ28gYmFja1xuICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBwcmV2aW91cyBtZW51IGluIHRoZSBicmVhZGNydW1iXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlTdHJpbmcubGVuZ3RoID09IDAgJiYgdGhpcy5icmVhZGNydW1icy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5icmVhZGNydW1icy5hdCgtMSk7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyLmRlc3Ryb3lpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29tbWFuZExpc3QodGhpcy5icmVhZGNydW1icy5hdCgtMikuY29tbWFuZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1icy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBsYXllci5zZWxlY3RlZEluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9LCAxOTApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiRGVsZXRlXCI6IHtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuY29tbWFuZHMuZm9yRWFjaChjID0+IGNbJ19yZW5kZXJlZExhYmVsJ10gPSAnJyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaW4gdGhlIG5leHQgdGljayB0byBnZXQgdGhlIGlucHV0J3NcbiAgICAgICAgLy8gdmFsdWUgc28gdGhhdCBpdCdzIHVwZGF0ZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5U3RyaW5nID0gKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclJlc3VsdHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJSZXN1bHRzKCkge1xuICAgICAgICAvLyBXaGl0ZXNwYWNlIGRvZXNuJ3QgY291bnQuXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5U3RyaW5nLnRyaW0oKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZENvbW1hbmRzID0gdGhpcy5jb21tYW5kcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5Q2hhcnMgPSB0aGlzLnF1ZXJ5U3RyaW5nXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLnNwbGl0KCcnKTtcblxuICAgICAgICBjb25zdCBtYXRjaGVkQ29tbWFuZHM6IENvbW1hbmRBY3Rpb25bXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiB0aGlzLmNvbW1hbmRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGxhYmVsIH0gPSBjb21tYW5kO1xuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgbGFiZWxcbiAgICAgICAgICAgIGlmIChjb21tYW5kLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZENoYXJzID0gbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgIGxldCByZW5kZXJlZExhYmVsID0gJyc7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHF1ZXJ5Q2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb21tYW5kQ2hhcnMuaW5kZXhPZihjaGFyLCBsYXN0SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZExhYmVsICs9IGxhYmVsLnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpICsgYDxiPiR7bGFiZWwuc2xpY2UoaW5kZXgsIGluZGV4ICsgMSl9PC9iPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZW5kZXJlZExhYmVsICs9IGxhYmVsLnNsaWNlKGxhc3RJbmRleCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kWydfcmVuZGVyZWRMYWJlbCddID0gcmVuZGVyZWRMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgaGludFxuICAgICAgICAgICAgaWYgKGNvbW1hbmQuaGludCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRDaGFycyA9IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyZWRIaW50ID0gJyc7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHF1ZXJ5Q2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb21tYW5kQ2hhcnMuaW5kZXhPZihjaGFyLCBsYXN0SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZEhpbnQgKz0gbGFiZWwuc2xpY2UobGFzdEluZGV4LCBpbmRleCkgKyBgPGI+JHtsYWJlbC5zbGljZShpbmRleCwgaW5kZXggKyAxKX08L2I+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlbmRlcmVkSGludCArPSBsYWJlbC5zbGljZShsYXN0SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZFsnX3JlbmRlcmVkSGludCddID0gcmVuZGVyZWRIaW50O1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkQ29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmVkQ29tbWFuZHMgPSBtYXRjaGVkQ29tbWFuZHM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbW1hbmRMaXN0KGNvbW1hbmRzOiBDb21tYW5kQWN0aW9uW10pIHtcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IGNvbW1hbmRzXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy52aXNpYmxlSW5MaXN0ICE9IGZhbHNlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbW1hbmRzID0gdGhpcy5jb21tYW5kcztcbiAgICAgICAgdGhpcy5xdWVyeVN0cmluZyA9ICcnO1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcblxuICAgICAgICAvLyBSZXNldCB0aGUgZmlsdGVyIGxhYmVsc1xuICAgICAgICB0aGlzLmNvbW1hbmRzLmZvckVhY2goY29tbWFuZCA9PiBjb21tYW5kWydfcmVuZGVyZWRMYWJlbCddID0gJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNSb3coKSB7XG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMuYWN0aXZlSW5kZXggKiB0aGlzLnJvd0hlaWdodDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG5cbiAgICAgICAgY29uc3Qgdmlld1RvcCA9IHRoaXMuc2Nyb2xsYmFyPy52aWV3cG9ydD8uc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCB2aWV3SGVpZ2h0ID0gdGhpcy5zY3JvbGxiYXI/LnZpZXdwb3J0Py5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHZpZXdCb3R0b20gPSB2aWV3VG9wICsgdmlld0hlaWdodDtcblxuICAgICAgICBpZiAodG9wIDwgdmlld1RvcCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxiYXIudmlld3BvcnQubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7IHRvcDogdG9wICsgdGhpcy5wYWRkaW5nIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCh0b3AgKyBoZWlnaHQpID4gdmlld0JvdHRvbSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxiYXIudmlld3BvcnQubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7IHRvcDogKCh0b3AgKyB0aGlzLnJvd0hlaWdodCkgLSB2aWV3SGVpZ2h0KSArIHRoaXMucGFkZGluZyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEltbWVkaWF0ZWx5IGNoZWNrIGZvciBjaGFuZ2VzIHRvIHVwZGF0ZSB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBDb21tYW5kQWN0aW9uKSB7XG4gICAgICAgIC8vIE9wZW4gYSBzdWIgbWVudSBvZiBpdGVtc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kLnN1Yk1lbnUpKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGFjdGlvbjogY29tbWFuZCxcbiAgICAgICAgICAgICAgICBjb21tYW5kczogY29tbWFuZC5zdWJNZW51LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXg6IHRoaXMuYWN0aXZlSW5kZXgsXG4gICAgICAgICAgICAgICAgZGVzdHJveWluZzogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldENvbW1hbmRMaXN0KGNvbW1hbmQuc3ViTWVudSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGlyZWN0bHkgaW52b2tlIHRoZSBhY3Rpb24gYW5kIGtpbGwgdGhlIGRpYWxvZ1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZFBhbGV0dGUuaW52b2tlQWN0aW9uKGNvbW1hbmQpO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6Ymx1clwiKVxuICAgIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXG4gICAgb25CbHVyKCkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDhweCA4cHggMCA4cHhcIj5cbiAgICA8bmd4LWNvbW1hbmRwYWxldHRlLWJyZWFkY3J1bWJcbiAgICAgICAgW2JyZWFkY3J1bWJzXT1cImJyZWFkY3J1bWJzXCJcbiAgICAvPlxuICAgIDxpbnB1dFxuICAgICAgICAjdGV4dGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3ZhbHVlXT1cInF1ZXJ5U3RyaW5nXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgID5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbkBpZiAoZmlsdGVyZWRDb21tYW5kcy5sZW5ndGggPT0gMCkge1xuICAgIDxkaXYgY2xhc3M9XCJjb21tYW5kc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWFuZCBzZWxlY3RlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+Tm8gbWF0Y2hpbmcgcmVzdWx0cy48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG5AZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbW1hbmRzXCJcbiAgICAgICAgW3N0eWxlLmZsZXhdPVwiKGZpbHRlcmVkQ29tbWFuZHMubGVuZ3RoICogcm93SGVpZ2h0KSArICdweCdcIlxuICAgICAgICBbY2xhc3Muc2hhZG93XT1cInNjcm9sbGJhcj8udmlld3BvcnQ/LnNjcm9sbFRvcCA+IDJcIlxuICAgID5cbiAgICAgICAgPG5nLXNjcm9sbGJhciAjc2Nyb2xsYmFyPlxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBbaXRlbVNpemVdPVwicm93SGVpZ2h0XCIgc2Nyb2xsVmlld3BvcnQgW21pbkJ1ZmZlclB4XT1cIjE1MFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgY29tbWFuZCBvZiBmaWx0ZXJlZENvbW1hbmRzOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tbWFuZFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwicm93SGVpZ2h0ICsgJ3B4J1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpbmRleD09YWN0aXZlSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWljb25dPVwiY29tbWFuZC5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZUNvbW1hbmQoY29tbWFuZClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb21tYW5kLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghTUFUX0lDT05fUkVHRVgudGVzdChjb21tYW5kLmljb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbZm9udEljb25dPVwiY29tbWFuZC5pY29uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY29tbWFuZC5pY29uXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImNvbW1hbmRbJ19yZW5kZXJlZExhYmVsJ10gfHwgY29tbWFuZC5sYWJlbCB8fCBjb21tYW5kLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoY29tbWFuZFsnX3JlbmRlcmVkSGludCddIHx8IGNvbW1hbmQuaGludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJjb21tYW5kWydfcmVuZGVyZWRIaW50J10gfHwgY29tbWFuZC5oaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMVwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzaG9ydGN1dCBvZiAoY29tbWFuZC5zaG9ydGN1dEtleT8uZmluZCA/IGNvbW1hbmQuc2hvcnRjdXRLZXkgOiBbY29tbWFuZC5zaG9ydGN1dEtleV0pOyB0cmFjayBzaG9ydGN1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvcnRjdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1jb21tYW5kcGFsZXR0ZS1zaG9ydGN1dCBbc2hvcnRjdXRdPVwic2hvcnRjdXRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgICA8L25nLXNjcm9sbGJhcj5cbiAgICA8L2Rpdj5cbn1cblxuIl19
@@ -0,0 +1,207 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { CommandPaletteComponent } from './command-palette.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/dialog";
5
+ import * as i2 from "@dotglitch/ngx-common/core";
6
+ export class CommandPaletteService {
7
+ constructor(dialog, lazyLoader) {
8
+ this.dialog = dialog;
9
+ this.lazyLoader = lazyLoader;
10
+ this.commandBlocks = [];
11
+ window.addEventListener("keydown", (evt) => this.onKeyDown(evt));
12
+ this.interval = setInterval(() => {
13
+ // Go backwards since we're splicing items out of the array.
14
+ for (let i = this.commandBlocks.length; i >= 0; i--) {
15
+ let commandBlock = this.commandBlocks[i];
16
+ // If the current index is somehow null, rip it out of
17
+ // the array and wait for cleanup to trigger again
18
+ // for the rest of the array.
19
+ // TODO: Could this lead to leaks where things at the end
20
+ // never get cleaned?
21
+ if (commandBlock == null) {
22
+ this.commandBlocks.splice(i, 1);
23
+ return;
24
+ }
25
+ // If the element has been disconnected from the DOM, we will
26
+ // treat it as having been permanently removed.
27
+ // TODO: Could this ever cause unintended consequences?
28
+ if (!commandBlock?.element.isConnected)
29
+ this.commandBlocks.splice(i, 1);
30
+ }
31
+ }, 5 * 60 * 1000);
32
+ }
33
+ ngOnDestroy() {
34
+ clearInterval(this.interval);
35
+ }
36
+ getCommandBlocks(element = document.body) {
37
+ const elementPath = [element];
38
+ let currentTarget = element;
39
+ do {
40
+ elementPath.unshift(currentTarget = currentTarget.parentElement);
41
+ } while (currentTarget.parentElement);
42
+ // Ordered matching command blocks, closest first
43
+ const matchingCommandBlocks = [];
44
+ for (const element of elementPath) {
45
+ const commandBlock = this.commandBlocks.find(cb => cb.element == element);
46
+ if (commandBlock) {
47
+ matchingCommandBlocks.unshift(commandBlock);
48
+ }
49
+ }
50
+ return matchingCommandBlocks;
51
+ }
52
+ /**
53
+ * Handle keydown events
54
+ *
55
+ * If an event has been removed from the DOM tree, we don't need
56
+ * to explicitly remove the bindings, as they will never fire
57
+ *
58
+ * We periodically check and remove unconnected command blocks
59
+ */
60
+ onKeyDown(evt) {
61
+ const matchingCommandBlocks = this.getCommandBlocks(evt.target);
62
+ // String in format `ctrl+alt+F`, `ctrl+F` etc.
63
+ const key = [
64
+ evt.ctrlKey ? "ctrl" : undefined,
65
+ evt.altKey ? "alt" : undefined,
66
+ evt.shiftKey ? "shift" : undefined,
67
+ evt.metaKey ? "meta" : undefined,
68
+ evt.code.startsWith("Key") ? evt.key : evt.code
69
+ ].filter(a => a).join('+').toLowerCase();
70
+ for (const commandBlock of matchingCommandBlocks) {
71
+ const action = commandBlock.actions.find(a => {
72
+ return Array.isArray(a.shortcutKey)
73
+ ? a.shortcutKey.includes(key)
74
+ : a.shortcutKey == key;
75
+ });
76
+ if (action) {
77
+ evt.stopPropagation();
78
+ evt.preventDefault();
79
+ this.invokeAction(action);
80
+ // Execute the action and move on.
81
+ return;
82
+ }
83
+ // Keep checking for matching actions
84
+ }
85
+ // If execution reaches this point, there were no matching actions on the
86
+ // path of elements that were registered.
87
+ }
88
+ addCommand(element, action) {
89
+ const commandBlock = this.commandBlocks.find(b => b.element == element) ?? (() => {
90
+ const cb = { element, actions: [] };
91
+ this.commandBlocks.push(cb);
92
+ return cb;
93
+ })();
94
+ // This is likely a duplicate entry
95
+ if (commandBlock.actions.find(a => a.shortcutKey && a.shortcutKey == action.shortcutKey)) {
96
+ console.warn(`Inserting duplicate action on element`, { element, action });
97
+ }
98
+ else {
99
+ // log(LogIcon.circle_blue, `Inserted action`, action)
100
+ }
101
+ // Make the shortcut keys lowercase so case sensitivity doesn't scalp someone
102
+ if (action.shortcutKey) {
103
+ if (Array.isArray(action.shortcutKey))
104
+ action.shortcutKey = action.shortcutKey.map(k => k.toLowerCase());
105
+ else
106
+ action.shortcutKey = action.shortcutKey.toLowerCase();
107
+ }
108
+ commandBlock.actions.push(action);
109
+ }
110
+ removeCommand(element, action) {
111
+ const commandBlock = this.commandBlocks.find(b => b.element == element) ?? { element, actions: [] };
112
+ const actionIndex = commandBlock?.actions.findIndex(a => typeof action == "string" ? a.shortcutKey == action : a == action);
113
+ if (!commandBlock) {
114
+ console.error(`Cannot remove command: element does not have any commands registered`, { element, action });
115
+ }
116
+ else if (actionIndex == -1) {
117
+ console.warn(`Cannot remove command: not present in list`, { element, action });
118
+ }
119
+ else {
120
+ commandBlock.actions.splice(actionIndex, 1);
121
+ }
122
+ }
123
+ /**
124
+ *
125
+ */
126
+ initialize(options) {
127
+ this.attachElementCommands([
128
+ {
129
+ shortcutKey: options.keybind,
130
+ action: () => this.openPalette(),
131
+ description: "Open the command palette",
132
+ keywords: ["command", "prompt", "console", "actions"],
133
+ label: "Command Palette",
134
+ visibleInList: false
135
+ }
136
+ ]);
137
+ }
138
+ /**
139
+ * Open the command palette
140
+ */
141
+ openPalette() {
142
+ return this.dialog.open(CommandPaletteComponent, {
143
+ position: {
144
+ top: "8px"
145
+ },
146
+ data: {
147
+ contextElement: document.activeElement
148
+ },
149
+ panelClass: ['ngx-command-palette'],
150
+ backdropClass: ['ngx-command-palette'],
151
+ restoreFocus: true,
152
+ role: 'dialog'
153
+ });
154
+ }
155
+ /**
156
+ * Public helper to invoke an action.
157
+ */
158
+ invokeAction(action, args) {
159
+ const fn = action.action;
160
+ if (typeof fn == 'function') {
161
+ try {
162
+ const res = fn(args);
163
+ // Handle promises so that the GUI can show spinners for them
164
+ if (res instanceof Promise) {
165
+ // TODO
166
+ }
167
+ else {
168
+ // TODO
169
+ }
170
+ }
171
+ catch (ex) {
172
+ console.error(`Executing action threw an error`, { action }, ex);
173
+ }
174
+ }
175
+ else {
176
+ console.warn(`Cannot execute action, type is not "function"`, { action });
177
+ }
178
+ }
179
+ attachElementCommands(element = document.body, actions = []) {
180
+ if (Array.isArray(element)) {
181
+ actions = element;
182
+ element = document.body;
183
+ }
184
+ actions.forEach(a => this.addCommand(element, a));
185
+ }
186
+ /**
187
+ * Detach specified commands from an Element subtree
188
+ */
189
+ detachElementCommands(element = document.body, actions = []) {
190
+ actions.forEach(a => this.removeCommand(element, a));
191
+ }
192
+ /**
193
+ * Return the list of registered commands under a given element
194
+ */
195
+ getRegisteredCommands(element = document.body) {
196
+ return this.getCommandBlocks(element).map(c => c.actions).flat();
197
+ }
198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommandPaletteService, deps: [{ token: i1.MatDialog }, { token: i2.LazyLoaderService }], target: i0.ɵɵFactoryTarget.Injectable }); }
199
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommandPaletteService, providedIn: 'root' }); }
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CommandPaletteService, decorators: [{
202
+ type: Injectable,
203
+ args: [{
204
+ providedIn: 'root'
205
+ }]
206
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.LazyLoaderService }] });
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1wYWxldHRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vY29tbWFuZC1wYWxldHRlL2NvbW1hbmQtcGFsZXR0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFrSnRFLE1BQU0sT0FBTyxxQkFBcUI7SUFLOUIsWUFDcUIsTUFBaUIsRUFDakIsVUFBNkI7UUFEN0IsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUwxQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFPdkMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUM3Qiw0REFBNEQ7WUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2xELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXpDLHNEQUFzRDtnQkFDdEQsa0RBQWtEO2dCQUNsRCw2QkFBNkI7Z0JBQzdCLHlEQUF5RDtnQkFDekQscUJBQXFCO2dCQUNyQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxPQUFPO2dCQUNYLENBQUM7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ZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IExhenlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnQGRvdGdsaXRjaC9uZ3gtY29tbW9uL2NvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbW1hbmQtcGFsZXR0ZS5jb21wb25lbnQnO1xuXG50eXBlIEtleUNvZGUgPSBcIkJhY2tzcGFjZVwiIHwgXCJUYWJcIiB8IFwiRW50ZXJcIiB8IFwiU2hpZnRMZWZ0XCIgfCBcIlNoaWZ0UmlnaHRcIlxuICAgIHwgXCJDb250cm9sTGVmdFwiIHwgXCJDb250cm9sUmlnaHRcIiB8IFwiQWx0TGVmdFwiIHwgXCJBbHRSaWdodFwiIHwgXCJQYXVzZVwiIHwgXCJDYXBzTG9ja1wiXG4gICAgfCBcIkVzY2FwZVwiIHwgXCJTcGFjZVwiIHwgXCJQYWdlVXBcIiB8IFwiUGFnZURvd25cIiB8IFwiRW5kXCIgfCBcIkhvbWVcIiB8IFwiQXJyb3dMZWZ0XCJcbiAgICB8IFwiQXJyb3dVcFwiIHwgXCJBcnJvd1JpZ2h0XCIgfCBcIkFycm93RG93blwiIHwgXCJQcmludFNjcmVlblwiIHwgXCJJbnNlcnRcIiB8IFwiRGVsZXRlXCJcbiAgICB8IFwiTWV0YUxlZnRcIiB8IFwiTWV0YVJpZ2h0XCIgfCBcIkNvbnRleHRNZW51XCIgfCBcIk51bXBhZDBcIiB8IFwiTnVtcGFkMVwiIHwgXCJOdW1wYWQyXCJcbiAgICB8IFwiTnVtcGFkM1wiIHwgXCJOdW1wYWQ0XCIgfCBcIk51bXBhZDVcIiB8IFwiTnVtcGFkNlwiIHwgXCJOdW1wYWQ3XCIgfCBcIk51bXBhZDhcIlxuICAgIHwgXCJOdW1wYWQ5XCIgfCBcIk51bXBhZE11bHRpcGx5XCIgfCBcIk51bXBhZEFkZFwiIHwgXCJOdW1wYWRTdWJ0cmFjdFwiXG4gICAgfCBcIk51bXBhZERlY2ltYWxcIiB8IFwiTnVtcGFkRGl2aWRlXCJcbiAgICB8IFwiRjFcIiB8IFwiRjJcIiB8IFwiRjNcIiB8IFwiRjRcIiB8IFwiRjVcIiB8IFwiRjZcIiB8IFwiRjdcIiB8IFwiRjhcIiB8IFwiRjlcIiB8IFwiRjEwXCIgfCBcIkYxMVwiIHwgXCJGMTJcIlxuICAgIHwgXCJOdW1Mb2NrXCIgfCBcIlNjcm9sbExvY2tcIiB8IFwiU2VtaWNvbG9uXCIgfCBcIkVxdWFsXCIgfCBcIkNvbW1hXCIgfCBcIk1pbnVzXCJcbiAgICB8IFwiUGVyaW9kXCIgfCBcIlNsYXNoXCIgfCBcIkJhY2txdW90ZVwiIHwgXCJCcmFja2V0TGVmdFwiIHwgXCJCYWNrc2xhc2hcIlxuICAgIHwgXCJCcmFja2V0UmlnaHRcIiB8IFwiUXVvdGVcIiB8IFwiYmFja3NwYWNlXCIgfCBcInRhYlwiIHwgXCJlbnRlclwiIHwgXCJzaGlmdGxlZnRcIlxuICAgIHwgXCJzaGlmdHJpZ2h0XCIgfCBcImNvbnRyb2xsZWZ0XCIgfCBcImNvbnRyb2xyaWdodFwiIHwgXCJhbHRsZWZ0XCIgfCBcImFsdHJpZ2h0XCJcbiAgICB8IFwicGF1c2VcIiB8IFwiY2Fwc2xvY2tcIiB8IFwiZXNjYXBlXCIgfCBcInNwYWNlXCIgfCBcInBhZ2V1cFwiIHwgXCJwYWdlZG93blwiIHwgXCJlbmRcIlxuICAgIHwgXCJob21lXCIgfCBcImFycm93bGVmdFwiIHwgXCJhcnJvd3VwXCIgfCBcImFycm93cmlnaHRcIiB8IFwiYXJyb3dkb3duXCIgfCBcInByaW50c2NyZWVuXCJcbiAgICB8IFwiaW5zZXJ0XCIgfCBcImRlbGV0ZVwiIHwgXCJtZXRhbGVmdFwiIHwgXCJtZXRhcmlnaHRcIiB8IFwiY29udGV4dG1lbnVcIlxuICAgIHwgXCJudW1wYWQwXCIgfCBcIm51bXBhZDFcIiB8IFwibnVtcGFkMlwiIHwgXCJudW1wYWQzXCIgfCBcIm51bXBhZDRcIiB8IFwibnVtcGFkNVwiXG4gICAgfCBcIm51bXBhZDZcIiB8IFwibnVtcGFkN1wiIHwgXCJudW1wYWQ4XCIgfCBcIm51bXBhZDlcIiB8IFwibnVtcGFkbXVsdGlwbHlcIiB8IFwibnVtcGFkYWRkXCJcbiAgICB8IFwibnVtcGFkc3VidHJhY3RcIiB8IFwibnVtcGFkZGVjaW1hbFwiIHwgXCJudW1wYWRkaXZpZGVcIlxuICAgIHwgXCJmMVwiIHwgXCJmMlwiIHwgXCJmM1wiIHwgXCJmNFwiIHwgXCJmNVwiIHwgXCJmNlwiIHwgXCJmN1wiIHwgXCJmOFwiIHwgXCJmOVwiIHwgXCJmMTBcIiB8IFwiZjExXCIgfCBcImYxMlwiXG4gICAgfCBcIm51bWxvY2tcIiB8IFwic2Nyb2xsbG9ja1wiIHwgXCJzZW1pY29sb25cIiB8IFwiZXF1YWxcIiB8IFwiY29tbWFcIiB8IFwibWludXNcIiB8IFwicGVyaW9kXCJcbiAgICB8IFwic2xhc2hcIiB8IFwiYmFja3F1b3RlXCIgfCBcImJyYWNrZXRsZWZ0XCIgfCBcImJhY2tzbGFzaFwiIHwgXCJicmFja2V0cmlnaHRcIiB8IFwicXVvdGVcIlxuICAgIHwgXCJBXCIgfCBcIkJcIiB8IFwiQ1wiIHwgXCJEXCIgfCBcIkVcIiB8IFwiRlwiIHwgXCJHXCIgfCBcIkhcIiB8IFwiSVwiIHwgXCJKXCIgfCBcIktcIiB8IFwiTFwiIHwgXCJNXCJcbiAgICB8IFwiTlwiIHwgXCJPXCIgfCBcIlBcIiB8IFwiUVwiIHwgXCJSXCIgfCBcIlNcIiB8IFwiVFwiIHwgXCJVXCIgfCBcIlZcIiB8IFwiV1wiIHwgXCJYXCIgfCBcIllcIiB8IFwiWlwiXG4gICAgfCBcImFcIiB8IFwiYlwiIHwgXCJjXCIgfCBcImRcIiB8IFwiZVwiIHwgXCJmXCIgfCBcImdcIiB8IFwiaFwiIHwgXCJpXCIgfCBcImpcIiB8IFwia1wiIHwgXCJsXCIgfCBcIm1cIlxuICAgIHwgXCJuXCIgfCBcIm9cIiB8IFwicFwiIHwgXCJxXCIgfCBcInJcIiB8IFwic1wiIHwgXCJ0XCIgfCBcInVcIiB8IFwidlwiIHwgXCJ3XCIgfCBcInhcIiB8IFwieVwiIHwgXCJ6XCI7XG5cbi8vIGN0cmwrYWx0K21ldGErc2hpZnRcbnR5cGUgS2V5UHJlZml4ID1cbiAgICBgY3RybGAgfFxuICAgIGBjdHJsK2FsdGAgfFxuICAgIGBjdHJsK2FsdCtzaGlmdGAgfFxuICAgIGBjdHJsK2FsdCtzaGlmdCttZXRhYCB8XG4gICAgYGN0cmwrYWx0K21ldGFgIHxcbiAgICBgY3RybCtzaGlmdGAgfFxuICAgIGBjdHJsK3NoaWZ0K21ldGFgIHxcbiAgICBgY3RybCttZXRhYCB8XG4gICAgYGFsdGAgfFxuICAgIGBhbHQrc2hpZnRgIHxcbiAgICBgYWx0K3NoaWZ0K21ldGFgIHxcbiAgICBgYWx0K21ldGFgIHxcbiAgICBgc2hpZnRgIHxcbiAgICBgc2hpZnQrbWV0YWAgfFxuICAgIGBtZXRhYDtcblxuZXhwb3J0IHR5cGUgS2V5YmluZEV2ZW50ID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBLZXliaW5kQ29kZSA9IGAke0tleVByZWZpeH0rJHtLZXlDb2RlfWAgfCBLZXlDb2RlO1xuXG5cblxuZXhwb3J0IHR5cGUgQ29tbWFuZEFjdGlvbjxUID0gYW55PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbm9uLW1vZGlmaWVyIGtleShzKSB0aGF0IG11c3QgYmUgcHJlc3NlZCBmb3IgdGhlIGV2ZW50IHRvIGZpcmUuXG4gICAgICovXG4gICAgc2hvcnRjdXRLZXk/OiBLZXliaW5kQ29kZSB8IEtleWJpbmRDb2RlW10sXG5cbiAgICAvKipcbiAgICAgKiBBY3Rpb24gdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIGtleWJvYXJkIHNob3J0Y3V0IGlzIHByZXNzZWQgb3IgdGhlIGl0ZW1cbiAgICAgKiBpcyBhY3RpdmF0ZWQgaW4gdGhlIEdVSSBtZW51XG4gICAgICogSWYgdGhlIEdVSSBtZW51IGlzIG9wZW4sIGl0IHdpbGwgc2hvdyBhIHNwaW5uZXIgaWYgdGhlIGFjdGlvbiByZXR1cm5zIGEgYFByb21pc2VgXG4gICAgICovXG4gICAgYWN0aW9uPzogKGV2dDogS2V5Ym9hcmRFdmVudCwgZGF0YT86IFQpID0+IFByb21pc2U8YW55PiB8IGFueSxcblxuICAgIC8qKlxuICAgICAqIEFyYml0cmFyeSBkYXRhIG9iamVjdCB0byBiZSBwYXNzZWQgaW50byB0aGUgYWN0aW9uXG4gICAgICovXG4gICAgZGF0YT86IFQsXG5cbiAgICAvKipcbiAgICAgKiBMYWJlbCBpbiB0aGUgY29tbWFuZCBwYWxldHRlIHBvcHVwXG4gICAgICovXG4gICAgbGFiZWw/OiBzdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBIaW50IHRoYXQgZm9sbG93cyB0aGUgbGFiZWwsIHN1YnRseVxuICAgICAqL1xuICAgIGhpbnQ/OiBzdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBJY29uIGZvciB0aGUgZW50cnlcbiAgICAgKiBDYW4gYmUgYSBtYXQtaWNvblxuICAgICAqIFdpbGwgYmUgYSBtYXQtaWNvbiBpZiB0aGUgc3RyaW5nIGlzIHNpbXBsZVxuICAgICAqIElmIHRoZSBzdHJpbmcgY29udGFpbnMgYSBzbGFzaCBvciBjb2xvbiwgaXQgd2lsbCBiZSBsb2FkZWQgYXNcbiAgICAgKiBhbiBpbWFnZSBzb3VyY2VcbiAgICAgKi9cbiAgICBpY29uPzogc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogS2V5d29yZHMgdGhhdCBjYW4gaGVscCBwaWNrIHRoaXMgY29tbWFuZFxuICAgICAqL1xuICAgIGtleXdvcmRzPzogc3RyaW5nIHwgc3RyaW5nW10sXG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmlwdGlvbiBmb3IgdGhlIHBvcHVwXG4gICAgICogV0lQXG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBhbmNlc3RvciBlbGVtZW50IG9mIHRoZSBhY3Rpb25cbiAgICAgKiAoVGhpcyBhbGxvd3Mgc2NvcGluZyBjb21tYW5kcyB0byBzcGVjaWZpYyBIVE1MIGVsZW1lbnRzKVxuICAgICAqIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgZXZlbnQgdGFyZ2V0IG11c3QgYmUgYSBkZXNjZW5kYW50XG4gICAgICpcbiAgICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWF0Y2hpbmcgZGVzY2VuZGFudHMsIG9ubHlcbiAgICAgKiB0aGUgZnVydGhlc3QgZGVzY2VuZGFudCB3aWxsIGJlIGZpcmVkXG4gICAgICpcbiAgICAgKiBGb3IgY29tbWFuZCBzY29waW5nLCB3ZSByZWFkIHRoZSBkYXRhLWxhYmVsIGF0dHJpYnV0ZVxuICAgICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IGxhYmVsIGFuZCBlbGVtZW50IGFzIGFuIG9iamVjdCBoZXJlLlxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50PzogSFRNTEVsZW1lbnQgfCBzdHJpbmcgfCB7XG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgc3RyaW5nLFxuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFiZWwgZm9yIHRoZSByb290LiBVc2VkIGZvciB0aGUgVUkgY29udHJvbCBhbmQgZGVidWdnaW5nLlxuICAgICAqL1xuICAgIHJvb3ROYW1lPzogc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbCB3aGV0aGVyIHRoaXMgY29tbWFuZCBhY3Rpb24gaXMgdmlzaWJsZSBpbiB0aGUgcG9wdXAgY29tbWFuZFxuICAgICAqIHBhbGV0dGUgR1VJLlxuICAgICAqL1xuICAgIHZpc2libGVJbkxpc3Q/OiBib29sZWFuLFxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHNlbGVjdGluZyBhbiBpdGVtIHRvIHNob3cgYSBsaXN0IG9mIHN1Yi1pdGVtc1xuICAgICAqL1xuICAgIHN1Yk1lbnU/OiBDb21tYW5kQWN0aW9uPFQ+W10gfCAoKCkgPT4gUHJvbWlzZTxDb21tYW5kQWN0aW9uPFQ+W10+KSB8ICgoKSA9PiBDb21tYW5kQWN0aW9uPFQ+W10pO1xuXG59O1xuXG50eXBlIENvbW1hbmRCbG9jayA9IHtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBhY3Rpb25zOiBDb21tYW5kQWN0aW9uW107XG59O1xuXG5leHBvcnQgdHlwZSBDb21tYW5kUGFsZXR0ZU9wdGlvbnMgPSB7XG4gICAga2V5YmluZDogS2V5YmluZENvZGU7XG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbW1hbmRQYWxldHRlU2VydmljZSB7XG5cbiAgICBwcml2YXRlIGNvbW1hbmRCbG9ja3M6IENvbW1hbmRCbG9ja1tdID0gW107XG4gICAgcHJpdmF0ZSBpbnRlcnZhbDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxhenlMb2FkZXI6IExhenlMb2FkZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZ0KSA9PiB0aGlzLm9uS2V5RG93bihldnQpKTtcblxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgLy8gR28gYmFja3dhcmRzIHNpbmNlIHdlJ3JlIHNwbGljaW5nIGl0ZW1zIG91dCBvZiB0aGUgYXJyYXkuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5jb21tYW5kQmxvY2tzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgY29tbWFuZEJsb2NrID0gdGhpcy5jb21tYW5kQmxvY2tzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgaW5kZXggaXMgc29tZWhvdyBudWxsLCByaXAgaXQgb3V0IG9mXG4gICAgICAgICAgICAgICAgLy8gdGhlIGFycmF5IGFuZCB3YWl0IGZvciBjbGVhbnVwIHRvIHRyaWdnZXIgYWdhaW5cbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGFycmF5LlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IENvdWxkIHRoaXMgbGVhZCB0byBsZWFrcyB3aGVyZSB0aGluZ3MgYXQgdGhlIGVuZFxuICAgICAgICAgICAgICAgIC8vIG5ldmVyIGdldCBjbGVhbmVkP1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kQmxvY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRCbG9ja3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gdGhlIERPTSwgd2Ugd2lsbFxuICAgICAgICAgICAgICAgIC8vIHRyZWF0IGl0IGFzIGhhdmluZyBiZWVuIHBlcm1hbmVudGx5IHJlbW92ZWQuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQ291bGQgdGhpcyBldmVyIGNhdXNlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzP1xuICAgICAgICAgICAgICAgIGlmICghY29tbWFuZEJsb2NrPy5lbGVtZW50LmlzQ29ubmVjdGVkKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRCbG9ja3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1ICogNjAgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tbWFuZEJsb2NrcyhlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFBhdGg6IEhUTUxFbGVtZW50W10gPSBbZWxlbWVudF07XG4gICAgICAgIGxldCBjdXJyZW50VGFyZ2V0OiBIVE1MRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGVsZW1lbnRQYXRoLnVuc2hpZnQoY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudCk7XG4gICAgICAgIH0gd2hpbGUgKGN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgLy8gT3JkZXJlZCBtYXRjaGluZyBjb21tYW5kIGJsb2NrcywgY2xvc2VzdCBmaXJzdFxuICAgICAgICBjb25zdCBtYXRjaGluZ0NvbW1hbmRCbG9ja3M6IENvbW1hbmRCbG9ja1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50UGF0aCkge1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZEJsb2NrID0gdGhpcy5jb21tYW5kQmxvY2tzLmZpbmQoY2IgPT4gY2IuZWxlbWVudCA9PSBlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChjb21tYW5kQmxvY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaGluZ0NvbW1hbmRCbG9ja3MudW5zaGlmdChjb21tYW5kQmxvY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoaW5nQ29tbWFuZEJsb2NrcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUga2V5ZG93biBldmVudHNcbiAgICAgKlxuICAgICAqIElmIGFuIGV2ZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRE9NIHRyZWUsIHdlIGRvbid0IG5lZWRcbiAgICAgKiB0byBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYmluZGluZ3MsIGFzIHRoZXkgd2lsbCBuZXZlciBmaXJlXG4gICAgICpcbiAgICAgKiBXZSBwZXJpb2RpY2FsbHkgY2hlY2sgYW5kIHJlbW92ZSB1bmNvbm5lY3RlZCBjb21tYW5kIGJsb2Nrc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25LZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBtYXRjaGluZ0NvbW1hbmRCbG9ja3MgPSB0aGlzLmdldENvbW1hbmRCbG9ja3MoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgLy8gU3RyaW5nIGluIGZvcm1hdCBgY3RybCthbHQrRmAsIGBjdHJsK0ZgIGV0Yy5cbiAgICAgICAgY29uc3Qga2V5ID0gW1xuICAgICAgICAgICAgZXZ0LmN0cmxLZXkgPyBcImN0cmxcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGV2dC5hbHRLZXkgPyBcImFsdFwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXZ0LnNoaWZ0S2V5ID8gXCJzaGlmdFwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXZ0Lm1ldGFLZXkgPyBcIm1ldGFcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGV2dC5jb2RlLnN0YXJ0c1dpdGgoXCJLZXlcIikgPyBldnQua2V5IDogZXZ0LmNvZGVcbiAgICAgICAgXS5maWx0ZXIoYSA9PiBhKS5qb2luKCcrJykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmRCbG9jayBvZiBtYXRjaGluZ0NvbW1hbmRCbG9ja3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGNvbW1hbmRCbG9jay5hY3Rpb25zLmZpbmQoYSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYS5zaG9ydGN1dEtleSlcbiAgICAgICAgICAgICAgICAgICAgPyBhLnNob3J0Y3V0S2V5LmluY2x1ZGVzKGtleSBhcyBhbnkpXG4gICAgICAgICAgICAgICAgICAgIDogYS5zaG9ydGN1dEtleSA9PSBrZXkgYXMgYW55O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUFjdGlvbihhY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCBtb3ZlIG9uLlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEtlZXAgY2hlY2tpbmcgZm9yIG1hdGNoaW5nIGFjdGlvbnNcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGV4ZWN1dGlvbiByZWFjaGVzIHRoaXMgcG9pbnQsIHRoZXJlIHdlcmUgbm8gbWF0Y2hpbmcgYWN0aW9ucyBvbiB0aGVcbiAgICAgICAgLy8gcGF0aCBvZiBlbGVtZW50cyB0aGF0IHdlcmUgcmVnaXN0ZXJlZC5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvbW1hbmQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFjdGlvbjogQ29tbWFuZEFjdGlvbikge1xuICAgICAgICBjb25zdCBjb21tYW5kQmxvY2sgPSB0aGlzLmNvbW1hbmRCbG9ja3MuZmluZChiID0+IGIuZWxlbWVudCA9PSBlbGVtZW50KSA/PyAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2IgPSB7IGVsZW1lbnQsIGFjdGlvbnM6IFtdIH07XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRCbG9ja3MucHVzaChjYik7XG4gICAgICAgICAgICByZXR1cm4gY2I7XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgLy8gVGhpcyBpcyBsaWtlbHkgYSBkdXBsaWNhdGUgZW50cnlcbiAgICAgICAgaWYgKGNvbW1hbmRCbG9jay5hY3Rpb25zLmZpbmQoYSA9PiBhLnNob3J0Y3V0S2V5ICYmIGEuc2hvcnRjdXRLZXkgPT0gYWN0aW9uLnNob3J0Y3V0S2V5KSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNlcnRpbmcgZHVwbGljYXRlIGFjdGlvbiBvbiBlbGVtZW50YCwgeyBlbGVtZW50LCBhY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBsb2coTG9nSWNvbi5jaXJjbGVfYmx1ZSwgYEluc2VydGVkIGFjdGlvbmAsIGFjdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgdGhlIHNob3J0Y3V0IGtleXMgbG93ZXJjYXNlIHNvIGNhc2Ugc2Vuc2l0aXZpdHkgZG9lc24ndCBzY2FscCBzb21lb25lXG4gICAgICAgIGlmIChhY3Rpb24uc2hvcnRjdXRLZXkpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFjdGlvbi5zaG9ydGN1dEtleSkpXG4gICAgICAgICAgICAgICAgYWN0aW9uLnNob3J0Y3V0S2V5ID0gYWN0aW9uLnNob3J0Y3V0S2V5Lm1hcChrID0+IGsudG9Mb3dlckNhc2UoKSkgYXMgYW55O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFjdGlvbi5zaG9ydGN1dEtleSA9IGFjdGlvbi5zaG9ydGN1dEtleS50b0xvd2VyQ2FzZSgpIGFzIGFueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1hbmRCbG9jay5hY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUNvbW1hbmQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFjdGlvbjogQ29tbWFuZEFjdGlvbiB8IHN0cmluZykge1xuICAgICAgICBjb25zdCBjb21tYW5kQmxvY2sgPSB0aGlzLmNvbW1hbmRCbG9ja3MuZmluZChiID0+IGIuZWxlbWVudCA9PSBlbGVtZW50KSA/PyB7IGVsZW1lbnQsIGFjdGlvbnM6IFtdIH07XG4gICAgICAgIGNvbnN0IGFjdGlvbkluZGV4ID0gY29tbWFuZEJsb2NrPy5hY3Rpb25zLmZpbmRJbmRleChhID0+IHR5cGVvZiBhY3Rpb24gPT0gXCJzdHJpbmdcIiA/IGEuc2hvcnRjdXRLZXkgPT0gYWN0aW9uIDogYSA9PSBhY3Rpb24pO1xuXG4gICAgICAgIGlmICghY29tbWFuZEJsb2NrKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgcmVtb3ZlIGNvbW1hbmQ6IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWFuZHMgcmVnaXN0ZXJlZGAsIHsgZWxlbWVudCwgYWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFjdGlvbkluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCByZW1vdmUgY29tbWFuZDogbm90IHByZXNlbnQgaW4gbGlzdGAsIHsgZWxlbWVudCwgYWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tbWFuZEJsb2NrLmFjdGlvbnMuc3BsaWNlKGFjdGlvbkluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZShvcHRpb25zOiBDb21tYW5kUGFsZXR0ZU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hFbGVtZW50Q29tbWFuZHMoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNob3J0Y3V0S2V5OiBvcHRpb25zLmtleWJpbmQsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLm9wZW5QYWxldHRlKCksXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT3BlbiB0aGUgY29tbWFuZCBwYWxldHRlXCIsXG4gICAgICAgICAgICAgICAga2V5d29yZHM6IFtcImNvbW1hbmRcIiwgXCJwcm9tcHRcIiwgXCJjb25zb2xlXCIsIFwiYWN0aW9uc1wiXSxcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJDb21tYW5kIFBhbGV0dGVcIixcbiAgICAgICAgICAgICAgICB2aXNpYmxlSW5MaXN0OiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHRoZSBjb21tYW5kIHBhbGV0dGVcbiAgICAgKi9cbiAgICBvcGVuUGFsZXR0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nLm9wZW4oQ29tbWFuZFBhbGV0dGVDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgdG9wOiBcIjhweFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNvbnRleHRFbGVtZW50OiBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWyduZ3gtY29tbWFuZC1wYWxldHRlJ10sXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiBbJ25neC1jb21tYW5kLXBhbGV0dGUnXSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIHJvbGU6ICdkaWFsb2cnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1YmxpYyBoZWxwZXIgdG8gaW52b2tlIGFuIGFjdGlvbi5cbiAgICAgKi9cbiAgICBpbnZva2VBY3Rpb24oYWN0aW9uOiBDb21tYW5kQWN0aW9uLCBhcmdzPykge1xuICAgICAgICBjb25zdCBmbiA9IGFjdGlvbi5hY3Rpb247XG4gICAgICAgIGlmICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGZuKGFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHByb21pc2VzIHNvIHRoYXQgdGhlIEdVSSBjYW4gc2hvdyBzcGlubmVycyBmb3IgdGhlbVxuICAgICAgICAgICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFeGVjdXRpbmcgYWN0aW9uIHRocmV3IGFuIGVycm9yYCwgeyBhY3Rpb24gfSwgZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBDYW5ub3QgZXhlY3V0ZSBhY3Rpb24sIHR5cGUgaXMgbm90IFwiZnVuY3Rpb25cImAsIHsgYWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGNvbW1hbmRzIHRvIGFuIEVsZW1lbnQgYW5kIGl0J3Mgc3VidHJlZVxuICAgICAqL1xuICAgIGF0dGFjaEVsZW1lbnRDb21tYW5kcyhhY3Rpb25zOiBDb21tYW5kQWN0aW9uW10pO1xuICAgIGF0dGFjaEVsZW1lbnRDb21tYW5kcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgYWN0aW9uczogQ29tbWFuZEFjdGlvbltdKTtcbiAgICBhdHRhY2hFbGVtZW50Q29tbWFuZHMoZWxlbWVudDogQ29tbWFuZEFjdGlvbltdIHwgSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5ib2R5LCBhY3Rpb25zOiBDb21tYW5kQWN0aW9uW10gPSBbXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICAgICAgYWN0aW9ucyA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjdGlvbnMuZm9yRWFjaChhID0+IHRoaXMuYWRkQ29tbWFuZChlbGVtZW50IGFzIGFueSwgYSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGFjaCBzcGVjaWZpZWQgY29tbWFuZHMgZnJvbSBhbiBFbGVtZW50IHN1YnRyZWVcbiAgICAgKi9cbiAgICBkZXRhY2hFbGVtZW50Q29tbWFuZHMoZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5ib2R5LCBhY3Rpb25zOiBDb21tYW5kQWN0aW9uW10gPSBbXSkge1xuICAgICAgICBhY3Rpb25zLmZvckVhY2goYSA9PiB0aGlzLnJlbW92ZUNvbW1hbmQoZWxlbWVudCwgYSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGNvbW1hbmRzIHVuZGVyIGEgZ2l2ZW4gZWxlbWVudFxuICAgICAqL1xuICAgIGdldFJlZ2lzdGVyZWRDb21tYW5kcyhlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWFuZEJsb2NrcyhlbGVtZW50KS5tYXAoYyA9PiBjLmFjdGlvbnMpLmZsYXQoKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90Z2xpdGNoLW5neC1jb21tb24tY29tbWFuZC1wYWxldHRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL2NvbW1hbmQtcGFsZXR0ZS9kb3RnbGl0Y2gtbmd4LWNvbW1vbi1jb21tYW5kLXBhbGV0dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './command-palette.component';
2
+ export * from './command-palette.service';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vY29tbWFuZC1wYWxldHRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tbWFuZC1wYWxldHRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmQtcGFsZXR0ZS5zZXJ2aWNlJztcblxuIl19
@@ -0,0 +1,19 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ShortcutComponent {
4
+ constructor() {
5
+ this.keys = [];
6
+ }
7
+ ngOnChanges() {
8
+ this.keys = this.shortcut?.split("+");
9
+ }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ShortcutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ShortcutComponent, isStandalone: true, selector: "ngx-commandpalette-shortcut", inputs: { shortcut: "shortcut" }, usesOnChanges: true, ngImport: i0, template: "@for (key of keys; track key; let i = $index) {\n @if(i > 0) {\n <span class=\"plus\">+</span>\n }\n\n <span class=\"key\">{{key}}</span>\n}\n", styles: [".key{background:#444;padding:2px 6px;border-radius:4px;font-family:Fira Mono,Courier New,Courier,monospace;text-transform:capitalize}.plus{margin:0 4px}\n"] }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ShortcutComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: 'ngx-commandpalette-shortcut', standalone: true, template: "@for (key of keys; track key; let i = $index) {\n @if(i > 0) {\n <span class=\"plus\">+</span>\n }\n\n <span class=\"key\">{{key}}</span>\n}\n", styles: [".key{background:#444;padding:2px 6px;border-radius:4px;font-family:Fira Mono,Courier New,Courier,monospace;text-transform:capitalize}.plus{margin:0 4px}\n"] }]
16
+ }], propDecorators: { shortcut: [{
17
+ type: Input
18
+ }] } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRjdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL2NvbW1hbmQtcGFsZXR0ZS9zaG9ydGN1dC9zaG9ydGN1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vY29tbWFuZC1wYWxldHRlL3Nob3J0Y3V0L3Nob3J0Y3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVNqRCxNQUFNLE9BQU8saUJBQWlCO0lBTjlCO1FBVUksU0FBSSxHQUFhLEVBQUUsQ0FBQztLQUt2QjtJQUhHLFdBQVc7UUFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7K0dBUlEsaUJBQWlCO21HQUFqQixpQkFBaUIsOElDVDlCLGdLQU9BOzs0RkRFYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0ksNkJBQTZCLGNBRzNCLElBQUk7OEJBSVAsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtleWJpbmRDb2RlIH0gZnJvbSAnLi4vY29tbWFuZC1wYWxldHRlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1jb21tYW5kcGFsZXR0ZS1zaG9ydGN1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Nob3J0Y3V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zaG9ydGN1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgU2hvcnRjdXRDb21wb25lbnQge1xuXG4gICAgQElucHV0KCkgc2hvcnRjdXQ6IEtleWJpbmRDb2RlO1xuXG4gICAga2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmtleXMgPSB0aGlzLnNob3J0Y3V0Py5zcGxpdChcIitcIik7XG4gICAgfVxufVxuIiwiQGZvciAoa2V5IG9mIGtleXM7IHRyYWNrIGtleTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICBAaWYoaSA+IDApIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbHVzXCI+Kzwvc3Bhbj5cbiAgICB9XG5cbiAgICA8c3BhbiBjbGFzcz1cImtleVwiPnt7a2V5fX08L3NwYW4+XG59XG4iXX0=